当前位置: 首页 > news >正文

Python-基于PyQt5,wordcloud,pillow,numpy,os,sys等的智能词云生成器

前言:日常生活中,我们有时后就会遇见这样的情形:我们需要将给定的数据进行可视化处理,同时保证呈现比较良好的量化效果。这时候我们可能就会用到词云图。词云图(Word cloud)又称文字云,是一种文本数据的图片视觉表达方式,一般是由词汇组成类似云的图形,用于展示大量文本数据。词云这个概念首先是由美国西北大学新闻学副教授、新媒体专业主任里奇·戈登提出的,通常用于描述网站上的关键字元数据(标签),或可视化自由格式文本。“词云”就是通过形成“关键词云层”或“关键词渲染”,对网络文本中出现频率较高的“关键词”的视觉上的突出,每个词的重要性以字体大小或颜色显示。今天,我们就一起来学习如何利用Python制作一个简单的智能词云生成器。与上次不同的是,我们这次将给原程序扩展额外功能-从文本文件中提取文本数据(包括纯文本文件(TXT文件),PDF文件Word文件)。

 编程思路:本次编程我们将会调用到调用到wordcloud,PyQt5,pillow(PIL),numpy,sys,os,pytesseract,docx,pdfplumber等库。其中,wordcloud是本次编程的主体,它可以指定词云的形状,颜色,字体,背景等,帮助我们轻松地生成美观、直观的词云。PyQt5被用于创建一个图形用户界面,包括按钮、文本框、标签、布局管理器等组件,以及处理用户交互和事件,它将在词云生成的功能与用户界面相结合方面会很有用。pillow是Python的一个很重要的图像处理库,它被用于读取我们选择好的词云的形状图片,并将其转换为numpy数组,以便在生成词云时使用。numpy则负责进行数据处理(包括我们输入的文本以及传入的图片等信息)。sysos将会帮助我们与Python解释器(PyCharm)进行交互,以及控制程序的执行,并对系统文件进行相关操作。与上次相比,我们导入了新的库:pytesseract,它可以将图像中的文字转换为字符串,从而实现了对扫描版PDF文件的文字提取。pdfplumber让我们可以很方便地从 PDF 文件中提取文本内容(包括普通的文本型PDF和扫描版的PDF)。docx是Python的一个很强大的文本文件处理库,有了docx 库,我们可以方便地从docx文件(扩展名为.docx)中提取文本内容,并将其显示在文本编辑框中。

第一步:导入库

标准库:sys,os。

第三方库:PyQt5,pillow(PIL),wordcloud,numpy,docx,pdfplumber,pytesseract。

#导入必要库
import sys
import os
import numpy as np
from PIL import Image
from wordcloud import WordCloud
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt
import docx
import pdfplumber
import pytesseract

第二步:创建内部功能类

我们用PyQt5库创建了一个功能丰富的GUI类(词云生成器类),允许用户选择形状图片、输入文本内容、选择字体文件、生成词云并保存生成的词云图片。在词云生成器类这个类中,我们创建了总共11个函数(初始化函数,UI初始化函数,系统图片文件夹获取函数,词云形状图片加载函数,字体文件选择函数,词云生成核心逻辑函数和词云图片保存函数等),它们将执行各自的功能,共同完成生成词云图的工作。值得一提的是,相比于上次的代码,本次扩展了4个函数,其功能围绕从文本文件中提取文本数据展开。

#词云生成器类
class WordCloudGenerator(QWidget):#初始化函数def __init__(self):super().__init__()self.mask_image = Noneself.font_path = Noneself.temp_path = self.get_pictures_path()self.initUI()#UI初始化函数def initUI(self):# 主布局main_layout = QHBoxLayout()# 左侧面板left_panel = QVBoxLayout()# 文件导入按钮self.import_btn = QPushButton('导入文本文件(txt/docx/pdf(支持OCR识别))', self)self.import_btn.clicked.connect(self.import_text)# 形状图片选择self.image_btn = QPushButton('选择形状图片', self)self.image_btn.clicked.connect(self.load_image)# 图片预览self.image_preview = QLabel('图片预览区域')self.image_preview.setFixedSize(300, 300)self.image_preview.setFrameShape(QFrame.Box)self.image_preview.setAlignment(Qt.AlignCenter)# 文本输入框self.text_edit = QTextEdit()self.text_edit.setPlaceholderText("在此输入文本内容,或使用上方按钮导入文件...")# 字体选择self.font_btn = QPushButton('选择字体文件(存在中文字体时需要)', self)self.font_btn.clicked.connect(self.select_font)# 生成按钮self.generate_btn = QPushButton('生成词云', self)self.generate_btn.clicked.connect(self.generate_wordcloud)# 保存按钮self.save_btn = QPushButton('保存词云', self)self.save_btn.clicked.connect(self.save_wordcloud)# 添加左侧组件left_panel.addWidget(self.import_btn)left_panel.addWidget(self.image_btn)left_panel.addWidget(self.image_preview)left_panel.addWidget(QLabel('输入文本:'))left_panel.addWidget(self.text_edit)left_panel.addWidget(self.font_btn)left_panel.addWidget(self.generate_btn)left_panel.addWidget(self.save_btn)# 右侧面板right_panel = QVBoxLayout()self.result_preview = QLabel('词云预览区域')self.result_preview.setFixedSize(400, 485)self.result_preview.setFrameShape(QFrame.Box)self.result_preview.setAlignment(Qt.AlignCenter)# 状态栏self.status_bar = QStatusBar()# 添加右侧组件right_panel.addWidget(QLabel('词云图预览:'))right_panel.addWidget(self.result_preview)right_panel.addWidget(self.status_bar)# 组合主布局main_layout.addLayout(left_panel, 40)main_layout.addLayout(right_panel, 60)self.setLayout(main_layout)# 窗口设置self.setWindowTitle('智能词云生成器(进阶版)')self.resize(800, 600)self.show()def get_pictures_path(self):#获取系统图片文件夹路径if os.name == 'nt':return os.path.join(os.environ['USERPROFILE'], 'Pictures')else:return os.path.expanduser('~/Pictures')def import_text(self):#导入文本文件(支持TXT/DOCX/PDF)path, _ = QFileDialog.getOpenFileName(self,'选择文本文件','','所有支持格式 (*.txt *.docx *.pdf);;文本文件 (*.txt);;Word文档 (*.docx);;PDF文件 (*.pdf)')if path:try:text = ""if path.lower().endswith('.txt'):with open(path, 'r', encoding='utf-8') as f:text = f.read()elif path.lower().endswith('.docx'):doc = docx.Document(path)text = '\n'.join([para.text for para in doc.paragraphs])elif path.lower().endswith('.pdf'):text = self.extract_pdf_text(path)else:QMessageBox.warning(self, '格式错误', '不支持的文本格式!')returnself.text_edit.setPlainText(text)QMessageBox.information(self, '导入成功', '文件内容已加载到文本框')except Exception as e:QMessageBox.critical(self, '读取错误', f'文件读取失败:{str(e)}')def extract_pdf_text(self, pdf_path):#智能PDF文本提取text = ""try:# 先尝试普通文本提取with pdfplumber.open(pdf_path) as pdf:total_pages = len(pdf.pages)for i, page in enumerate(pdf.pages):self.update_status(f"解析PDF第 {i + 1}/{total_pages} 页...")page_text = page.extract_text()text += page_text + "\n" if page_text else ""QApplication.processEvents()# 如果文本过少则尝试OCRif len(text.strip()) < total_pages * 50:  # 假设每页至少应有50个字符self.update_status("检测到扫描版PDF,启用OCR识别...")return self.extract_scanned_pdf(pdf_path)return textexcept Exception as e:raise Exception(f"PDF解析失败: {str(e)}")def extract_scanned_pdf(self, pdf_path):#处理扫描版PDF(OCR识别)text = ""try:with pdfplumber.open(pdf_path) as pdf:total_pages = len(pdf.pages)for i, page in enumerate(pdf.pages):self.update_status(f"OCR识别第 {i + 1}/{total_pages} 页...")# 转换为高分辨率图像(300 DPI)img = page.to_image(resolution=300).original# 图像预处理img = Image.fromarray(img).convert('L')  # 转为灰度图# OCR识别page_text = pytesseract.image_to_string(img, lang='chi_sim+eng')text += page_text + "\n"# 保持界面响应QApplication.processEvents()return textexcept Exception as e:raise Exception(f"OCR处理失败: {str(e)}")def update_status(self, message):#更新状态栏self.status_bar.showMessage(message)QApplication.processEvents()  # 强制刷新界面def load_image(self):#加载形状图片path, _ = QFileDialog.getOpenFileName(self, '选择形状图片', '', '图像文件 (*.jpg *.jpeg *.png *.bmp)')if path:self.mask_image = np.array(Image.open(path))pixmap = QPixmap(path).scaled(300, 300, Qt.KeepAspectRatio)self.image_preview.setPixmap(pixmap)def select_font(self):#选择字体文件path, _ = QFileDialog.getOpenFileName(self, '选择字体文件', '', '字体文件 (*.ttf *.otf)')if path:self.font_path = pathdef generate_wordcloud(self):#生成词云text = self.text_edit.toPlainText()if not text.strip():QMessageBox.warning(self, '内容缺失', '请输入需要生成词云的文本内容!')returnif self.mask_image is None:QMessageBox.warning(self, '形状未选', '请先选择词云形状图片!')returntry:# 配置词云参数wc = WordCloud(background_color='white',mask=self.mask_image,font_path=self.font_path,max_words=200,width=800,height=600)wc.generate(text)# 保存临时文件temp_file = os.path.join(self.temp_path, "wordcloud_temp.png")wc.to_file(temp_file)# 显示预览pixmap = QPixmap(temp_file).scaled(400, 400, Qt.KeepAspectRatio)self.result_preview.setPixmap(pixmap)except Exception as e:QMessageBox.critical(self, '生成错误', f'词云生成失败: {str(e)}')def save_wordcloud(self):#保存词云图片if not self.result_preview.pixmap():QMessageBox.warning(self, '无内容', '请先生成词云!')returndefault_path = os.path.join(self.temp_path, "我的词云.png")path, _ = QFileDialog.getSaveFileName(self,'保存词云',default_path,'PNG图像 (*.png);;JPEG图像 (*.jpg);;所有文件 (*)')if path:# 保持原始分辨率保存Image.open(os.path.join(self.temp_path, "wordcloud_temp.png")).save(path)QMessageBox.information(self, '保存成功', f'词云已保存至:\n{path}')

第三步:创建驱动单元

与上次一样,我们需要创建一段程序,它是Python程序的入口点,我们将利用它来驱动以上词云生成器类并执行相关系统程序。

if __name__ == '__main__':app = QApplication(sys.argv)window = WordCloudGenerator()sys.exit(app.exec_())

第四步:完整代码展示

#导入必要库
import sys
import os
import numpy as np
from PIL import Image
from wordcloud import WordCloud
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt
import docx
import pdfplumber
import pytesseract#词云生成器类
class WordCloudGenerator(QWidget):#初始化函数def __init__(self):super().__init__()self.mask_image = Noneself.font_path = Noneself.temp_path = self.get_pictures_path()self.initUI()#UI初始化函数def initUI(self):# 主布局main_layout = QHBoxLayout()# 左侧面板left_panel = QVBoxLayout()# 文件导入按钮self.import_btn = QPushButton('导入文本文件(txt/docx/pdf(支持OCR识别))', self)self.import_btn.clicked.connect(self.import_text)# 形状图片选择self.image_btn = QPushButton('选择形状图片', self)self.image_btn.clicked.connect(self.load_image)# 图片预览self.image_preview = QLabel('图片预览区域')self.image_preview.setFixedSize(300, 300)self.image_preview.setFrameShape(QFrame.Box)self.image_preview.setAlignment(Qt.AlignCenter)# 文本输入框self.text_edit = QTextEdit()self.text_edit.setPlaceholderText("在此输入文本内容,或使用上方按钮导入文件...")# 字体选择self.font_btn = QPushButton('选择字体文件(存在中文字体时需要)', self)self.font_btn.clicked.connect(self.select_font)# 生成按钮self.generate_btn = QPushButton('生成词云', self)self.generate_btn.clicked.connect(self.generate_wordcloud)# 保存按钮self.save_btn = QPushButton('保存词云', self)self.save_btn.clicked.connect(self.save_wordcloud)# 添加左侧组件left_panel.addWidget(self.import_btn)left_panel.addWidget(self.image_btn)left_panel.addWidget(self.image_preview)left_panel.addWidget(QLabel('输入文本:'))left_panel.addWidget(self.text_edit)left_panel.addWidget(self.font_btn)left_panel.addWidget(self.generate_btn)left_panel.addWidget(self.save_btn)# 右侧面板right_panel = QVBoxLayout()self.result_preview = QLabel('词云预览区域')self.result_preview.setFixedSize(400, 485)self.result_preview.setFrameShape(QFrame.Box)self.result_preview.setAlignment(Qt.AlignCenter)# 状态栏self.status_bar = QStatusBar()# 添加右侧组件right_panel.addWidget(QLabel('词云图预览:'))right_panel.addWidget(self.result_preview)right_panel.addWidget(self.status_bar)# 组合主布局main_layout.addLayout(left_panel, 40)main_layout.addLayout(right_panel, 60)self.setLayout(main_layout)# 窗口设置self.setWindowTitle('智能词云生成器(进阶版)')self.resize(800, 600)self.show()def get_pictures_path(self):#获取系统图片文件夹路径if os.name == 'nt':return os.path.join(os.environ['USERPROFILE'], 'Pictures')else:return os.path.expanduser('~/Pictures')def import_text(self):#导入文本文件(支持TXT/DOCX/PDF)path, _ = QFileDialog.getOpenFileName(self,'选择文本文件','','所有支持格式 (*.txt *.docx *.pdf);;文本文件 (*.txt);;Word文档 (*.docx);;PDF文件 (*.pdf)')if path:try:text = ""if path.lower().endswith('.txt'):with open(path, 'r', encoding='utf-8') as f:text = f.read()elif path.lower().endswith('.docx'):doc = docx.Document(path)text = '\n'.join([para.text for para in doc.paragraphs])elif path.lower().endswith('.pdf'):text = self.extract_pdf_text(path)else:QMessageBox.warning(self, '格式错误', '不支持的文本格式!')returnself.text_edit.setPlainText(text)QMessageBox.information(self, '导入成功', '文件内容已加载到文本框')except Exception as e:QMessageBox.critical(self, '读取错误', f'文件读取失败:{str(e)}')def extract_pdf_text(self, pdf_path):#智能PDF文本提取text = ""try:# 先尝试普通文本提取with pdfplumber.open(pdf_path) as pdf:total_pages = len(pdf.pages)for i, page in enumerate(pdf.pages):self.update_status(f"解析PDF第 {i + 1}/{total_pages} 页...")page_text = page.extract_text()text += page_text + "\n" if page_text else ""QApplication.processEvents()# 如果文本过少则尝试OCRif len(text.strip()) < total_pages * 50:  # 假设每页至少应有50个字符self.update_status("检测到扫描版PDF,启用OCR识别...")return self.extract_scanned_pdf(pdf_path)return textexcept Exception as e:raise Exception(f"PDF解析失败: {str(e)}")def extract_scanned_pdf(self, pdf_path):#处理扫描版PDF(OCR识别)text = ""try:with pdfplumber.open(pdf_path) as pdf:total_pages = len(pdf.pages)for i, page in enumerate(pdf.pages):self.update_status(f"OCR识别第 {i + 1}/{total_pages} 页...")# 转换为高分辨率图像(300 DPI)img = page.to_image(resolution=300).original# 图像预处理img = Image.fromarray(img).convert('L')  # 转为灰度图# OCR识别page_text = pytesseract.image_to_string(img, lang='chi_sim+eng')text += page_text + "\n"# 保持界面响应QApplication.processEvents()return textexcept Exception as e:raise Exception(f"OCR处理失败: {str(e)}")def update_status(self, message):#更新状态栏self.status_bar.showMessage(message)QApplication.processEvents()  # 强制刷新界面def load_image(self):#加载形状图片path, _ = QFileDialog.getOpenFileName(self, '选择形状图片', '', '图像文件 (*.jpg *.jpeg *.png *.bmp)')if path:self.mask_image = np.array(Image.open(path))pixmap = QPixmap(path).scaled(300, 300, Qt.KeepAspectRatio)self.image_preview.setPixmap(pixmap)def select_font(self):#选择字体文件path, _ = QFileDialog.getOpenFileName(self, '选择字体文件', '', '字体文件 (*.ttf *.otf)')if path:self.font_path = pathdef generate_wordcloud(self):#生成词云text = self.text_edit.toPlainText()if not text.strip():QMessageBox.warning(self, '内容缺失', '请输入需要生成词云的文本内容!')returnif self.mask_image is None:QMessageBox.warning(self, '形状未选', '请先选择词云形状图片!')returntry:# 配置词云参数wc = WordCloud(background_color='white',mask=self.mask_image,font_path=self.font_path,max_words=200,width=800,height=600)wc.generate(text)# 保存临时文件temp_file = os.path.join(self.temp_path, "wordcloud_temp.png")wc.to_file(temp_file)# 显示预览pixmap = QPixmap(temp_file).scaled(400, 400, Qt.KeepAspectRatio)self.result_preview.setPixmap(pixmap)except Exception as e:QMessageBox.critical(self, '生成错误', f'词云生成失败: {str(e)}')def save_wordcloud(self):#保存词云图片if not self.result_preview.pixmap():QMessageBox.warning(self, '无内容', '请先生成词云!')returndefault_path = os.path.join(self.temp_path, "我的词云.png")path, _ = QFileDialog.getSaveFileName(self,'保存词云',default_path,'PNG图像 (*.png);;JPEG图像 (*.jpg);;所有文件 (*)')if path:# 保持原始分辨率保存Image.open(os.path.join(self.temp_path, "wordcloud_temp.png")).save(path)QMessageBox.information(self, '保存成功', f'词云已保存至:\n{path}')if __name__ == '__main__':app = QApplication(sys.argv)window = WordCloudGenerator()sys.exit(app.exec_())

第五步:运行效果展示

第六步:操作指南

点击"导入文本文件(txt/docx/pdf(支持OCR识别)),然后选择你想要提取的文本数据的文本文件(当然,你也可以手动输入文本数据)。"点击"选择形状图片",选择你想生成的词云图的形状(注意:图片最好分辨率高,以白色为背景为好,这样生成的词云图清晰美观),接着在"输入文本"下面的输入框中输入你想要生成的词云图的内容,接着点击下方的"选择字体文件(存在中文字体时需要)"(注意:如果你的文本数据存在中文文本时需要你自行准备相关的中文字体文件,TTF或OTF都行;如果是纯英文字符的话不用)。再点击下方"生成词云",你就可以在窗口右方看到生成的预览词云图(如果不满意,可以再次点击"生成词云"重新生成词云)。如果满意生成的词云,可以点击下方"保存词云",填写你的词云图片文件名,并选择文件类型(当然,你也可以默认该操作),点击保存,系统会弹出一个信息框,提醒你图片的保存位置,记住这个位置,点击保存。返回计算机系统,按照位置搜索即可找到你生成的词云图。

第七步:温馨提示

1,导入文本文件后文本框中的数据可以手动修改。

2,白色背景的图片可以通过手机"醒图"软件中的"抠图"功能实现。

3,TTF/OTF格式的各种字体文件可以在网站"字体天下"中免费下载。

第八步:注意事项

- 形状图片(建议使用透明背景PNG图片)
- 中文字体文件(如需处理中文内容)

- 首次运行时会在系统图片文件夹创建临时文件
- 保存时可自由修改文件名,但默认保存在系统图片目录
- 程序会自动处理文件夹不存在的情况(系统一般自带Pictures目录)

(我是闪云-微星,感谢你的点赞/关注)

相关文章:

Python-基于PyQt5,wordcloud,pillow,numpy,os,sys等的智能词云生成器

前言&#xff1a;日常生活中&#xff0c;我们有时后就会遇见这样的情形&#xff1a;我们需要将给定的数据进行可视化处理&#xff0c;同时保证呈现比较良好的量化效果。这时候我们可能就会用到词云图。词云图&#xff08;Word cloud&#xff09;又称文字云&#xff0c;是一种文…...

海外问卷调查之渠道查,企业经营的指南针

海外问卷调查&#xff0c;是企业调研最常用到的方法&#xff0c;有目的、有计划、有系统地收集研究对象的现实状况或历史状况的一种有效手段&#xff0c;是指导企业经营的有效手段。 海外问卷调查充分运用历史法、观察法等方法&#xff0c;同时使用谈话、问卷、个案研究、测试…...

C++:虚函数与多态性习题

题目内容&#xff1a; 构建一个车&#xff08;vehicle&#xff09;基类&#xff0c;包含Run、Stop两个纯虚函数。由此基类&#xff0c;派生出&#xff08;Car&#xff09;轿车类&#xff0c;&#xff08;truck&#xff09;卡车类&#xff0c;在这两个类中别分定义Run和Stop两个…...

单片机基础模块学习——超声波传感器

一、超声波原理 左边发射超声波信号&#xff0c;右边接收超声波信号 左边的芯片用来处理超声波发射信号&#xff0c;中间的芯片用来处理接收的超声波信号 二、超声波原理图 T——transmit 发送R——Recieve 接收 U18芯片对输入的N_A1信号进行放大&#xff0c;然后输入给超声…...

通过protoc工具生成proto的pb.go文件以及使用protoc-go-inject-tag工具注入自定义标签

1.ProtoBuf认识,安装以及用法 参考:[golang 微服务] 3. ProtoBuf认识&#xff0c;安装以及golang 中ProtoBuf使用 2. 使用protoc-go-inject-tag工具注入自定义标签 这里有一个案例: syntaxproto3; package test;option go_package ".;test";message MyMessage {int6…...

42【语言的编码架构】

不同语言采用的编码架构不一样 火山采用&#xff1a;UTF-16 易语言采用&#xff1a;GBK php采用&#xff1a;UTF-8 这个编码架构指的就是文本所代表的字节集&#xff0c;比如易语言中“你好”表示的就是{196,227,186,195} 窗口程序集名保 留 保 留备 注窗口程序集_启动窗口 …...

TOF技术原理和静噪对策

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时&#xff0c;也能帮助其他需要参考的朋友。如有谬误&#xff0c;欢迎大家进行指正。 一、什么是TOF TOF 是Time of Flight的缩写&#xff0c;它是一种通过利用照射波和反射波之间的时间差来测量到物体的距离的测…...

ssh调试:fatal: Could not read from remote repository.

我遇到的原因和网上说的什么在生产密钥时没加邮箱&#xff0c;以及多个密钥的配置问题都不一样&#xff1b; 例如https://blog.csdn.net/baoyin0822/article/details/122584931 或https://blog.csdn.net/qq_55558061/article/details/124117445 我遇到的问题的原因跟他们都i不…...

win10部署本地deepseek-r1,chatbox,deepseek联网(谷歌网页插件)

win10部署本地deepseek-r1&#xff0c;chatbox&#xff0c;deepseek联网&#xff08;谷歌网页插件&#xff09; 前言一、本地部署DeepSeek-r1step1 安装ollamastep2 下载deepseek-r1step2.1 找到模型deepseek-r1step2.2 cmd里粘贴 后按回车&#xff0c;进行下载 step3 测试指令…...

SpringCloud系列教程:微服务的未来(十九)请求限流、线程隔离、Fallback、服务熔断

前言 前言 在现代微服务架构中&#xff0c;系统的高可用性和稳定性至关重要。为了解决系统在高并发请求或服务不可用时出现的性能瓶颈或故障&#xff0c;常常需要使用一些技术手段来保证服务的平稳运行。请求限流、线程隔离、Fallback 和服务熔断是微服务中常用的四种策略&…...

Hot100之子串

560和为K的子数组 题目 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列 思路解析 ps&#xff1a;我们的presum【0】就是0&#xff0c;如果没有这个0的话我们的第一个元素就无法减去上…...

SpringBoot笔记

1.创建 使用idea提供的脚手架创建springboot项目&#xff0c;选上需要的模块&#xff0c;会自动进行导包 打成jar包&#xff0c;之前直接用原生的maven打包的是一个瘦jar&#xff0c;不能直接跑&#xff0c;把服务器上部署的jar排除在外了&#xff0c;但是现在加上打包查件&am…...

一、TensorFlow的建模流程

1. 数据准备与预处理&#xff1a; 加载数据&#xff1a;使用内置数据集或自定义数据。 预处理&#xff1a;归一化、调整维度、数据增强。 划分数据集&#xff1a;训练集、验证集、测试集。 转换为Dataset对象&#xff1a;利用tf.data优化数据流水线。 import tensorflow a…...

4 Hadoop 面试真题

4 Hadoop 面试真题 1. Apache Hadoop 3.0.02. HDFS 3.x 数据存储新特性-纠删码Hadoop面试真题 1. Apache Hadoop 3.0.0 Apache Hadoop 3.0.0在以前的主要发行版本&#xff08;hadoop-2.x&#xff09;上进行了许多重大改进。 最低要求的Java版本从Java 7增加到Java 8 现在&…...

信息学奥赛一本通 ybt 1608:【 例 3】任务安排 3 | 洛谷 P5785 [SDOI2012] 任务安排

【题目链接】 ybt 1608&#xff1a;【 例 3】任务安排 3 洛谷 P5785 [SDOI2012] 任务安排 【题目考点】 1. 动态规划&#xff1a;斜率优化动规 2. 单调队列 3. 二分答案 【解题思路】 与本题题面相同但问题规模不同的题目&#xff1a; 信息学奥赛一本通 1607&#xff1a…...

实验六 项目二 简易信号发生器的设计与实现 (HEU)

声明&#xff1a;代码部分使用了AI工具 实验六 综合考核 Quartus 18.0 FPGA 5CSXFC6D6F31C6N 1. 实验项目 要求利用硬件描述语言Verilog&#xff08;或VHDL&#xff09;、图形描述方式、IP核&#xff0c;结合数字系统设计方法&#xff0c;在Quartus开发环境下&#xff…...

基于最近邻数据进行分类

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 完整代码&#xff1a; import torch import numpy as np from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score import matplotlib.pyplot as plt# 生成一个简单的数据…...

SpringSecurity:There is no PasswordEncoder mapped for the id “null“

文章目录 一、情景说明二、分析三、解决 一、情景说明 在整合SpringSecurity功能的时候 我先是去实现认证功能 也就是&#xff0c;去数据库比对用户名和密码 相关的类&#xff1a; UserDetailsServiceImpl implements UserDetailsService 用于SpringSecurity查询数据库 Logi…...

redex快速体验

第一步&#xff1a; 2.回调函数在每次state发生变化时候自动执行...

Flask框架基础入门教程_ezflaskapp

pip install flaskFlask 快速入门小应用 学东西&#xff0c;得先知道我们用这个东西&#xff0c;能做出来一个什么东西。 一个最小的基于flask 的应用可能看上去像下面这个样子&#xff1a; from flask import Flask app Flask(__name__)app.route(/) def hello_world():ret…...

Anaconda 全面解析:从入门到精通的操作教程

大家好&#xff0c;我是滔滔&#xff0c;欢迎来到我的空间。先简单介绍下anconda 一、环境管理 轻松创建独立的 Python 环境&#xff1a;可以为不同的项目创建不同的环境&#xff0c;每个环境可以有不同的 Python 版本和安装不同的包&#xff0c;避免了包冲突问题。例如&…...

3D图形学与可视化大屏:什么是材质属性,有什么作用?

一、颜色属性 漫反射颜色 漫反射颜色决定了物体表面对入射光进行漫反射后的颜色。当光线照射到物体表面时&#xff0c;一部分光被均匀地向各个方向散射&#xff0c;形成漫反射。漫反射颜色的选择会直接影响物体在光照下的外观。例如&#xff0c;一个红色的漫反射颜色会使物体在…...

HTML-新浪新闻-实现标题-排版

标题排版 图片标签&#xff1a;<img> src&#xff1a;指定图片的url&#xff08;绝对路径/相对路径&#xff09; width&#xff1a;图片的宽度&#xff08;像素/相对于父元素的百分比&#xff09; heigth&#xff1a;图片的高度&#xff08;像素/相对于父元素的百分比&a…...

.Net / C# 分析文件编码 并将 各种编码格式 转为 另一个编码格式 ( 比如: GB2312→UTF-8, UTF-8→GB2312)

相关库 .Net 8 编码识别: github.com/CharsetDetector/UTF-unknown <PackageReference Include"UTF.Unknown" Version"2.5.1" />代码 using UtfUnknown;var dir_path "D:\\Desktop\\新建文件夹2\\新建文件夹"; var dir_new_path &quo…...

本地部署 DeepSeek-R1 大模型

本地部署 DeepSeek-R1 大模型指南 1. 引言 1.1 DeepSeek-R1 模型简介 在人工智能的世界里&#xff0c;大型语言模型&#xff08;LLM&#xff09;正如一座巨大的宝库&#xff0c;里面储存着丰富的信息和无限的潜力。而DeepSeek-R1&#xff0c;就像那扇打开智慧之门的钥匙。它…...

canvas的基本用法

canvas canvas元素简介 1.是个container元素<canvas width100 height100></canvas>&#xff0c;有开闭标签 2.有且只有width和height两个attribute&#xff0c;不需要写单位 canvas的基本使用 const canvasEl document.getElementById(canvas01) const ctx …...

力扣【416. 分割等和子集】详细Java题解(背包问题)

首先我们可以求出数组和&#xff0c;当我们找到一个子集中元素的和为数组和的一半时&#xff0c;该就说明可以分割等和子集。 对于该问题我们可以转换成背包问题&#xff0c;求 数组里的元素 装入 数组和的一半大小的背包 能取得的最大值。 然后注意可以剪枝的地方。 代码&…...

UE学习日志#17 C++笔记#3 基础复习3

19.2 [[maybe_unused]] 禁止编译器在未使用某些内容时发出警告 19.3 [[noreturn]] 永远不会把控制权返回给调用点 19.4 [[deprecated]] 标记为已弃用&#xff0c;仍然可以使用但是不鼓励使用 可以加参数表示弃用的原因[[deprecated("")]] 19.5 [[likely]]和[[un…...

c++:vector

1.使用 1.1构造函数 常见的三种构造方式&#xff1a;空构造&#xff0c;拷贝构造&#xff0c;指定元素构造 1.2iterator begin和end也分为正向和反向。 注意&#xff1a;反向迭代器可以反向遍历是因为在定义rbegin和rend函数的时候把尾地址给到了rbegin&#xff0c;而不是说改…...

37. RGBLCD实验

一、RGBLCD显示原理简介 1、像素点 于一个“小灯“&#xff0c;不管是液晶屏&#xff0c;还是手机&#xff0c;平板&#xff0c;RGBLCD屏幕他都是有由一个个的彩色小灯构成的。彩色点阵屏每个像素点有三个小灯&#xff0c;红色、绿色和蓝色&#xff0c;也叫做RGB。RGB就是光的…...

反馈驱动、上下文学习、多语言检索增强等 | Big Model Weekly 第55期

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 01 A Bayesian Approach to Harnessing the Power of LLMs in Authorship Attribution 传统方法严重依赖手动特征&#xff0c;无法捕捉长距离相关性&#xff0c;限制了其有效性。最近的研究利用预训练语言模型的…...

【深度分析】微软全球裁员计划不影响印度地区,将继续增加当地就业机会

当微软的裁员刀锋掠过全球办公室时&#xff0c;班加罗尔的键盘声却愈发密集——这场资本迁徙背后&#xff0c;藏着数字殖民时代最锋利的生存法则。 表面是跨国公司的区域战略调整&#xff0c;实则是全球人才市场的地壳运动。微软一边在硅谷裁撤年薪20万美金的高级工程师&#x…...

H. Mad City

题目链接&#xff1a;Problem - H - Codeforces 题目大意&#xff1a;给定一个带环的图&#xff0c; 以及a, b两点 判断再图上不断的移动&#xff0c; b想不与a相遇&#xff0c; a想捉到b, 并且二者只能移动一步。 若b跑不掉 NO 否则YES. 具体题目看链接 输入&#xff1a; …...

【C++】类与对象(下)

&#x1f984; 个人主页: 小米里的大麦-CSDN博客 &#x1f38f; 所属专栏: 小米里的大麦——C专栏_CSDN博客 &#x1f381; 代码托管: 小米里的大麦的Gitee仓库 ⚙️ 操作环境: Visual Studio 2022 文章目录 1. 再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit 关键…...

AJAX案例——图片上传个人信息操作

黑马程序员视频地址&#xff1a; AJAX-Day02-11.图片上传https://www.bilibili.com/video/BV1MN411y7pw?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p26 图片上传 <!-- 文件选择元素 --><input type"file"…...

Redis-布隆过滤器

文章目录 布隆过滤器的特点:实践布隆过滤器应用 布隆过滤器的特点: 就可以把布隆过滤器理解为一个set集合&#xff0c;我们可以通过add往里面添加元素&#xff0c;通过contains来判断是否包含某个元素。 布隆过滤器是一个很长的二进制向量和一系列随机映射函数。 可以用来检索…...

OpenCV 图像旋转

在学习 OpenCV 和 Matplotlib 处理图像时&#xff0c;遇到了一些关于 cv2.imread()、cv2.getRotationMatrix2D()、plt.imshow() 的问题&#xff1a; import cv2 import numpy as np import matplotlib.pyplot as pltimg cv2.imread(img2.png, 1) # 读取彩色图像&#xff08;…...

联想Y7000+RTX4060+i7+Ubuntu22.04运行DeepSeek开源多模态大模型Janus-Pro-1B+本地部署

直接上手搓了&#xff1a; conda create -n myenv python3.10 -ygit clone https://github.com/deepseek-ai/Janus.gitcd Januspip install -e .pip install webencodings beautifulsoup4 tinycss2pip install -e .[gradio]pip install pexpect>4.3python demo/app_januspr…...

在线知识库创建与维护提升企业效率与知识共享能力

内容概要 在当今数字化快速发展的背景下&#xff0c;在线知识库逐渐成为企业管理信息的重要工具。其核心在于将知识进行系统化、结构化的整理和存储&#xff0c;便于员工获取和分享。这不仅提高了信息的访问效率&#xff0c;还促进了团队之间的协作。在线知识库的建立可以有效…...

C语言指针专题二 -- 字符指针与字符串

目录 1. 字符指针与字符串的核心原理 字符串的本质 字符串的存储 字符指针的特性 字符指针的操作 2. 编程实例 3. 常见陷阱与注意事项 4. 总结 1. 字符指针与字符串的核心原理 字符串的本质 C语言中没有独立的字符串类型&#xff0c;字符串本质是 以\0&#xff08;空…...

玄武计划--干中学,知行合一

作为开发者转型安全领域有一定优势,但需要系统学习网络安全知识。以下是针对你的情况(Java背景 + 快速入门)的实战导向学习路径,分为基础、工具、漏洞利用和进阶四个阶段: 一、基础准备(1-2周) 网络协议与渗透基础 重点协议:深入理解 TCP/IP、HTTP/HTTPS、DNS、SMTP,用…...

处理 .gitignore 未忽略文件夹问题

本地删除缓存 例如 .idea 文件夹被其他同事误提交&#xff0c;那么他本地执行以下代码 git rm -r --cached .idea对应本地再提交即可...

实验七 JSP内置对象II

实验七 JSP内置对象II 目的&#xff1a; 1、掌握JSP内置对象的使用。 2、理解JSP的作用域 3、掌握session&#xff0c;application对象的使用 实验要求&#xff1a; 1、完成实验题目 2、要求提交实验报告&#xff0c;将代码和实验结果页面截图放入报告中 实验过程&#xff1a…...

【Leetcode 每日一题 - 补卡】219. 存在重复元素 II

问题背景 给你一个整数数组 n u m s nums nums 和一个整数 k k k&#xff0c;判断数组中是否存在两个 不同的索引 i i i 和 j j j&#xff0c;满足 n u m s [ i ] n u m s [ j ] nums[i] nums[j] nums[i]nums[j] 且 ∣ i − j ∣ < k |i - j| < k ∣i−j∣<…...

Flask数据的增删改查(CRUD)_flask删除数据自动更新

查询年龄小于17的学生信息 Student.query.filter(Student.s_age < 17) students Student.query.filter(Student.s_age.__lt__(17))模糊查询&#xff0c;使用like&#xff0c;查询姓名中第二位为花的学生信息 like ‘_花%’,_代表必须有一个数据&#xff0c;%任何数据 st…...

web自动化——前端知识

<iframe> 是 HTML 中的一个元素&#xff0c;用于在当前网页中嵌入另一个网页或文档。它就像一个“窗口”&#xff0c;可以在页面中显示其他内容。 主要特点&#xff1a; 嵌入外部内容&#xff1a;可以在网页中嵌入其他网页、视频、地图等。独立上下文&#xff1a;嵌入的…...

计算机网络一点事(22)

地址解析协议ARP ARP&#xff1a;查询Mac地址 ARP表&#xff08;ARP缓存&#xff09;&#xff1a;记录映射关系&#xff0c;一个数据结构&#xff0c;定期更新ARP表 过程&#xff1a;请求分组&#xff0c;响应分组 动态主机配置协议DHCP 分配IP地址&#xff0c;配置默认网关…...

SG算法解析

Savitzky-Golay 滤波器的核心代码主要集中在计算投影矩阵B并使用这个矩阵对输入信号进行滤波。这部分核心代码包括计算B矩阵、处理边界效应和进行实际滤波操作。以下是对核心代码的一点解释&#xff1a; ① 计算 Savitzky-Golay 投影矩阵B B sgolay(order, framelen, weight…...

Ubuntu Server连接wifi

背景 家里服务器放在客厅太吵了, 准备挪到阳台, 所以买了TP wifi接收器, 因此需要配置wifi连接. 刚开始买了Tenda Ax300, 结果不支持服务器系统, 买前还是得和客服交流交流. 准备 驱动安装 对于windows系统来说, 这款接收器是免驱的, 但在linux上需要安装相应型号驱动 安装…...

Linux 4.19内核中的内存管理:x86_64架构下的实现与源码解析

在现代操作系统中,内存管理是核心功能之一,它直接影响系统的性能、稳定性和多任务处理能力。Linux 内核在 x86_64 架构下,通过复杂的机制实现了高效的内存管理,涵盖了虚拟内存、分页机制、内存分配、内存映射、内存保护、缓存管理等多个方面。本文将深入探讨这些机制,并结…...