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

红楼梦文本数据分析

一、项目背景
《红楼梦》是中国古典文学的巅峰之作,其丰富的语言和复杂的人物关系为文本分析提供了绝佳的素材。在本次项目中,我们将通过 Python 实现以下目标:

分词与停用词处理:对《红楼梦》文本进行分词,并去除无意义的停用词。

TF-IDF 关键词提取:计算每个章节的 TF-IDF 值,并提取关键词。

通过这些步骤,我们可以更好地理解《红楼梦》的文本结构,挖掘其主题和核心内容。

二、项目实现步骤
(一)分词与停用词处理
1. 文本数据的准备
我们将《红楼梦》的文本按卷分割,存储在文件夹中,每个卷的内容保存为一个单独的文本文件。这样可以方便我们后续对每个卷分别进行处理。

2. 遍历文件夹并读取文本内容
我们使用 os.walk 方法遍历存储《红楼梦》文本的文件夹,获取每个卷的文件路径,并读取其内容。以下是实现代码的关键部分:

filePaths = []  # 保存文件的路径
fileContents = []  # 保存文件路径对应的内容# 遍历文件夹中的所有文件
for root, dirs, files in os.walk(r"D:\Users\妄生\PycharmProjects\机器学习pythonProject\.idea\红楼梦\分卷"):for name in files:filePath = os.path.join(root, name)  # 获取每个文件的路径print(filePath)filePaths.append(filePath)  # 卷文件路径添加到列表中with open(filePath, 'r', encoding='utf-8') as f:fileContent = f.read()  # 读取文件内容fileContents.append(fileContent)  # 文件内容添加到列表中

通过上述代码,我们将所有卷的文件路径和内容分别存储在 `filePaths` 和 `fileContents` 列表中,以便后续处理。

3. 加载自定义词库
由于《红楼梦》中存在一些特定的词汇,这些词汇可能不在 jieba 的默认词库中。为了提高分词的准确性,我们需要加载自定义词库。我们使用 jieba.load_userdict 方法加载自定义词库:
jieba.load_userdict(r"D:\Users\妄生\PycharmProjects\机器学习pythonProject\.idea\红楼梦\红楼梦词库.txt")

这一步确保了 `jieba` 在分词时能够正确识别《红楼梦》中的专有名词、成语等词汇。

4. 读取停用词
停用词是指在文本中频繁出现但对文本意义贡献较小的词汇,如“的”“是”“和”等。在文本分析中,去除停用词可以减少噪声,提高分析效果。我们从文件中读取停用词列表,并将其存储为一个集合,以便后续快速查找:

stopwords = pd.read_csv(r"D:\Users\妄生\PycharmProjects\机器学习pythonProject\.idea\红楼梦\StopwordsCN.txt",encoding='utf8', engine='python', index_col=False)
stopwords = set(stopwords['stopword'].values)
5. 分词与停用词过滤
file_to_jieba = open(r'D:\Users\妄生\PycharmProjects\机器学习pythonProject\.idea\红楼梦\分词后汇总.txt', 'w', encoding='utf-8')
for index, row in corpos.iterrows():juan_ci = ''  # 空的字符串fileContent = row['fileContent']segs = jieba.cut(fileContent)  # 对文本内容进行分词for seg in segs:  # 遍历每一个词if seg not in stopwords and len(seg.strip()) > 0:  # 剔除停用词和空字符juan_ci += seg + ' 'file_to_jieba.write(juan_ci + '\n')
file_to_jieba.close()

通过上述代码,我们将每个卷的内容分词后,去除停用词,并将结果写入到一个汇总文件中。

 1.读取和显示图像
cv.imread(firepath, flags=1)
读取图像
firepath 图像的路径
flags 图像的打开方式
返回值 返回一个图像对象,实际上是一个三维矩阵

cv.imwrite(firepath, img)
firepath 图像的保存路径
img 要保存的图像对象

flags参数    属性    含义
1    cv.IMREAD_COLOR    以彩色模式加载图像,任何图像的透明度都将被忽略,这是默认参数
0    cv.IMREAD_GRAYSCALE    以灰度模式加载图像
-1    cv.IMREAD_UNCHANGED    包括alpha通道的加载图像模式

flags可以是上述数字参数,也可以是上述属性
cv.imshow(winname, mat)
显示图像
winname 图像显示窗口的名称,字符串的形式
mat 要显示的图像对象

cv.waitKey(time)
图像的停留时间
time=0 时表示图像一直停留

cv.destroyAllWindows()
按任意键可以停止 waitKey(time) 的等待,并关闭所有图像
例:

img = cv.imread("HappyFish.jpg", 1)
cv.imshow("HappyFish", img)
cv.waitKey(0)

2.图像的读取方式
在 OpenCV 中,读取和表达图像的方式是B-G-R通道,(Blue-Green-Red)

在 OpenCV 中,图像对象实际上是一个 M×N×3 的三维矩阵,数据类型一般为 uint8 [0, 255],如图所示:

例:分别显示出一张彩色图像的 B-G-R 灰度 [0, 255]

img = cv.imread("HappyFish.jpg", 1)# B
img_b = img[:, :, 0]
# G
img_g = img[:, :, 1]
# R
img_r = img[:, :, 2]
cv.imshow("B", img_b)
cv.imshow("G", img_g)
cv.imshow("R", img_r)
# 原图
cv.imshow("img", img)

此外,在 Matplotlib 中,读取和表达图像的方式是R-G-B通道,显然,如果想要使 OpenCV 打开的图像通过 Matplotlib 来表达,就需要通道的转换,很显然,B-G-R通道 ⇨ R-G-B通道 的转换,只需要将一维矩阵中的元素反转即可

img[:, :, ::-1]
对图像对象进行通道转换,即一维矩阵的反转

img[:, ::-1, :]
对图像进行列翻转,即对图像进行水平翻转

img[::-1, :, :]
对图像进行行翻转,即对图像进行竖直翻转
注:还可以多处进行 ::-1 处理

plt.imshow(img, cmap=)
使用 Matplotlib 来显示图像,通道:R-G-B
img 要显示的图像
cmap= 图像显示的颜色图谱

plt.show()
显示图像
cmap参数    含义
plt.cm.autumn    红-橙-黄
plt.cm.bone    黑-白,x线
plt.cm.cool    青-洋红
plt.cm.copper    黑-铜
plt.cm.flag    红-白-蓝-黑
plt.cm.gray    黑-白
plt.cm.hot    黑-红-黄-白
plt.cm.hsv    hsv颜色空间, 红-黄-绿-青-蓝-洋红-红
plt.cm.inferno    黑-红-黄
plt.cm.jet    蓝-青-黄-红
plt.cm.magma    黑-红-白
plt.cm.pink    黑-粉-白
plt.cm.plasma    绿-红-黄
plt.cm.prism    红-黄-绿-蓝-紫-…-绿模式
plt.cm.spring    洋红-黄
plt.cm.summer    绿-黄
plt.cm.viridis    蓝-绿-黄
plt.cm.winter    蓝-绿

img_cv = cv.imread("HappyFish.jpg", 1)
img_plt = img_cv[:, :, ::-1]# 原图在OpenCV中的显示
cv.imshow("img_cv", img_cv)
# 反转图在OpenCV中的显示
cv.imshow("img_plt_in_cv", img_plt)# 反转图在Matplotlib中显示
plt.imshow(img_plt)
plt.show()cv.waitKey(0)
cv.destroyAllWindows()

二、绘制几何图形
cv.line(img, start, end, color, thickness, lineType)
绘制直线
img 要绘制直线的图像
start, end 直线的起点和终点
color 直线的颜色,用(B, G, R)表示
thickness 线条宽度
lineType 线条类型

cv.circle(img, centerpoint, radius, color, thickness, lineType)
绘制圆形
img 要绘制圆形的图像
centerpoint, radius 圆形的圆心和半径
color 线条的颜色,用(B, G, R)表示
thickness 线条宽度,为-1时生成闭合的图案并填充线条颜色
lineType 线条类型

cv.rectangle(img, leftupper, rihtdown, color, thickness, lineType)
绘制矩形
img 要绘制矩形的图像
leftupper, rightdown 矩形的左上角和右下角坐标
color 线条的颜色,用(B, G, R)表示
thickness 线条宽度,为-1时生成闭合的图案并填充线条颜色
lineType 线条类型

cv.putText(img, text, station, font, fontsize, color, thickness, cv.LINE_AA)
向图像中添加文字
img 要添加文字的图像
text 要写入的文本内容
station 文本的放置位置
font 字体
fontsize 字体大小
color 线条的颜色,用(B, G, R)表示
thickness 线条宽度
cv.LINE_AA 一种线条类型

# 创建一个全黑的三维矩阵作为图像对象
img = np.zeros((512, 512, 3), np.uint8)
# 绘制图形
cv.line(img, (0, 0), (511, 511), color=(255, 0, 0), thickness=5)
cv.rectangle(img, (384, 0), (510, 128), color=(0, 255, 0), thickness=3)
cv.circle(img, (447, 63), radius=63, color=(0, 0, 255), thickness=-1)
# 添加字体
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img, "OpenCV", (10, 500), font, 4, (255, 255, 255), thickness=2, lineType=cv.LINE_AA)
# 显示图像
plt.imshow(img[:, :, ::-1])
plt.title("result"), plt.xticks([]), plt.yticks([])
plt.show()
三、其他图像操作

前面已经提到,图像对象实际上是一个三维矩阵,因此我们可以通过对三维矩阵的操作来实现对图像的操作

1.获取并修改图像中的像素点

当我们只指定图像对象的行、列下标时,我们就可以获得图像的B-G-R的1×3一维数组

http://www.dtcms.com/a/324037.html

相关文章:

  • Fish shell的abbr命令行参数介绍和Bat文件查看工具
  • 诺基亚就4G/5G相关专利起诉吉利对中国汽车及蜂窝模组企业的影响
  • (一)Tailwindcss
  • 【开源】分层状态机(HFSM)解析:复杂逻辑的清晰表达与FPGA实现(附完整的Verilog交通灯案例及仿真)
  • Loki+Alloy+Grafana构建轻量级的日志分析系统
  • aurora接口ufc控流设计
  • Rust面试题及详细答案120道(11-18)-- 控制流与函数
  • Docker 镜像常见标签(如 `标准`、`slim`、`alpine` 和 `noble`)详细对比
  • 利用 SD-WAN 技术优化机房运维与网络安全评估的最佳实践
  • 2025下半年AI技术热点全景透视:从多模态革命到具身智能爆发
  • SpringMVC的知识点总结
  • Microsoft Store​​ 总是打不开页面怎么办
  • LeetCode131~150题解
  • opencv:图像轮廓检测与轮廓近似(附代码)
  • 浏览器CEFSharp88+X86+win7 之js交互开启(五)
  • 人工智能系列(8)如何实现无监督学习聚类(使用竞争学习)?
  • Lua基础+Lua数据类型
  • Java学习第一百二十一部分——HTTP
  • 超越基础!一文掌握CNN/Transformer/MoE架构,实战多模态AI(第三章)
  • 《解锁 C++ 基础密码:输入输出、缺省参数,函数重载与引用的精髓》
  • NLP 2025全景指南:从分词到128专家MoE模型,手撕BERT情感分析实战(第四章)
  • FlinkSQL Joins全解析
  • Spring基于XML的自动装配
  • 低版本 IntelliJ IDEA 使用高版本 JDK 语言特性的问题
  • IntelliJ IDEA 2025.2 重磅发布
  • 第16届蓝桥杯Scratch选拔赛初级及中级(STEMA)2025年1月12日真题
  • 机器学习——TF-IDF 衡量词语在文档中重要程度
  • 【代码随想录day 15】 力扣 257. 二叉树的所有路径
  • LeetCode 括号生成
  • Jmeter性能测试之检测服务器CPU/Memory/磁盘IO/网络IO