Python数据挖掘——文本分析

article/2025/10/5 7:56:03

一、

一、定义:

文本挖掘:从大量文本数据中抽取出有价值的知识,并且利用这些知识重新组织信息的过程。

二、语料库(Corpus)

语料库是我们要分析的所有文档的集合。

import os
import os.pathfilePaths = []  #定义一个数组变量
#再用OS.walk的方法传入目录
#文件所在的文件目录,命名为root
#root下的所有子目录,命名为dirs
#root下的所有文件,命名为files
for root, dirs, files in os.walk("C:\\Python_DM\\2.1\\SogouC.mini\\Sample"
):#进行遍历,需要得到输入目录下的所有文件for name in files:  #为了拿到root目录下的所有文件,我们再次便利所有的文件(代码:for name in files:)把它追加到filePaths变量中去即可。filePaths.append(os.path.join(root, name)) 
"""
os.path.join,拼接文件路径的方法。如果没有name,则filepaths里面没有xx.txt文件,没有root则没有文件目录路径。
"""import codecs  #编码转换filePaths = [];
fileContents = [];
for root, dirs, files in os.walk("C:\\Python_DM\\2.1\\SogouC.mini\\Sample"
):for name in files:filePath = os.path.join(root, name);filePaths.append(filePath);f = codecs.open(filePath, 'r', 'utf-8') #1.文件路径 2.打开方式 3.文件编码fileContent = f.read()f.close()fileContents.append(fileContent)import pandas;
corpos = pandas.DataFrame({'filePath': filePaths, 'fileContent': fileContents
})

二、中文分词

2.1概念:

中文分词(Chinese Word Segmentation):将一个汉字序列切分成一个一个单独的词。

eg:我的家乡是广东省湛江市-->我/的/家乡/是/广东省/湛江市

停用词(Stop Words):
数据处理时,需要过滤掉某些字或词
√泛滥的词,如web、网站等。

√语气助词、副词、介词、连接词等,如 的,地,得;

2.2安装Jieba分词包:

最简单的方法是用CMD直接安装:输入pip install jieba,但是我的电脑上好像不行。

后来在这里:https://pypi.org/project/jieba/#files下载了jieba0.39解压缩后 放在Python36\Lib\site-packages里面,然后在用cmd,pip install jieba 就下载成功了,不知道是是什么原因。

然后我再anaconda 环境下也安装了jieba,先在Anaconda3\Lib这个目录下将jieba0.39的解压缩文件放在里面,然后在Anaconda propt下输入 pip install jieba,如下图:

2.3代码实战:

jieba最主要的方法是cut方法:

  • jieba.cut方法接受两个输入参数: 1) 第一个参数为需要分词的字符串 2)cut_all参数用来控制是否采用全模式

  • jieba.cut_for_search方法接受一个参数:需要分词的字符串,该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细

  • 注意:待分词的字符串可以是gbk字符串、utf-8字符串或者unicode

  • jieba.cut以及jieba.cut_for_search返回的结构都是一个可迭代的generator,可以使用for循环来获得分词后得到的每一个词语(unicode),也可以用list(jieba.cut(...))转化为list代码示例( 分词 )

import jieba;for w in jieba.cut("我爱Python"):print(w)
输出结果为:


Python

for w in jieba.cut("""工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作
"""):print(w)
工信处

女干事

每月
经过
下属
科室


亲口

交代

24

交换机

技术性
器件

安装

工作

分词功能用于专业的场景:

import jieba;
seg_list = jieba.cut("真武七截阵和天罡北斗阵哪个更厉害呢?"
)
for w in seg_list:print(w)
会出现真武七截阵和天罡北斗阵被分成几个词。为了改善这个现象,我们用导入词库的方法。
import jieba;
jieba.add_word('真武七截阵')#添加词库
jieba.add_word('天罡北斗阵')
seg_list = jieba.cut("真武七截阵和天罡北斗阵哪个更厉害呢?"
)
for w in seg_list:print(w)

但是,如果需要导入的单词很多,jieba.add_word()这样的添加词库的方法就不高效了。

我们可以用jieba.load_userdict(‘D:\\PDM\\2.2\\金庸武功招式.txt’)方法一次性导入整个词库,txt文件中为每行一个特定的词。

2.3.1对大量文章进行分词

先搭建语料库:

分词后我们需要对信息处理,就是这个分词来源于哪个文章。

三、词频统计

3.1词频(Term Frequency):

    某个词在该文档中出现的次数。

3.2利用Python进行词频统计

# -*- coding: utf-8 -*-
"""搭建语料库,及分词"""
import os
import os.path
import codecsfilePaths = []
fileContents = []
for root, dirs, files in os.walk("C:\\Python_DM\\2.1\\SogouC.mini\\Sample"
):for name in files:filePath = os.path.join(root, name)filePaths.append(filePath);f = codecs.open(filePath, 'r', 'utf-8')fileContent = f.read()f.close()fileContents.append(fileContent)import pandas;
corpos = pandas.DataFrame({'filePath': filePaths, 'fileContent': fileContents
});import jiebasegments = []
filePaths = []
for index, row in corpos.iterrows():filePath = row['filePath']fileContent = row['fileContent']segs = jieba.cut(fileContent)for seg in segs:segments.append(seg)filePaths.append(filePath)segmentDataFrame = pandas.DataFrame({'segment': segments, 'filePath': filePaths
})"""filepath一直没变,对fileContents进行了分词,赋值如segment."""import numpy
#进行词频统计        
segStat = segmentDataFrame.groupby( #调用groupby方法by="segment")["segment"].agg({"计数":numpy.size}).reset_index().sort_values(#重新设置索引by=['计数'],ascending=False#倒序排序)
"""排在前面的为停用词"""#移除停用词
stopwords = pandas.read_csv("C:\\Python_DM\\2.3\\StopwordsCN.txt", encoding='utf8', index_col=False
)#获得没有停用词的词频统计结果
fSegStat = segStat[~segStat.segment.isin(stopwords.stopword)
]#'~'取反,不包含停用词的留下。

3.2.1移除停用词的另一种方法,加if判断

import os
import os.path
import codecsfilePaths = []
fileContents = []
for root, dirs, files in os.walk("C:\\Python_DM\\2.1\\SogouC.mini\\Sample"
):for name in files:filePath = os.path.join(root, name)filePaths.append(filePath);f = codecs.open(filePath, 'r', 'utf-8')fileContent = f.read()f.close()fileContents.append(fileContent)import pandas;
corpos = pandas.DataFrame({'filePath': filePaths, 'fileContent': fileContents
});
import jiebasegments = []
filePaths = []
for index, row in corpos.iterrows():filePath = row['filePath']fileContent = row['fileContent']segs = jieba.cut(fileContent)for seg in segs:#下面加一个判断,如果不在分词中就加入进分组,加一个条件:分词去除空格后的长度大于0if seg not in stopwords.stopword.values and len(seg.strip())>0:segments.append(seg)filePaths.append(filePath)segmentDataFrame = pandas.DataFrame({'segment': segments, 'filePath': filePaths
});segStat = segmentDataFrame.groupby(by="segment")["segment"].agg({"计数":numpy.size}).reset_index().sort_values(by=["计数"],ascending=False);

代码中用到的一些常用方法:

分组统计:

DataFrame.groupby(by=列名数组)[统计列明数组].agg({'统计项名称':统计函数})
判断一个数据框中的某一列的值是否包含一个数组中的任意一个值:
DataFrame.列名.isin(数组)
取反:(对布尔值)
df[~df.列名.isin(数组)]

四、词云绘制
词云(Word Cloud):是对文本中词频较高的分词,给与视觉上的突出,形成“关键词渲染”,从而国旅掉大量的文本信息,使浏览者一眼扫过就可以领略文本的主旨。

4.1安装词云工具包
这个地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/ ,可以搜到基本上所有的Python库,进去根据自己的系统和Python的版本进行下载即可。

在python下安装很方便,在anaconda下安装费了点劲,最终将词云的文件放在C:\Users\Administrator 这个目录下才安装成功。

# -*- coding: utf-8 -*-
import os;
import os.path;
import codecs;filePaths = [];
fileContents = [];
for root, dirs, files in os.walk("C:\\Python_DM\\2.4\\SogouC.mini\\Sample\\C000007"
):for name in files:filePath = os.path.join(root, name);filePaths.append(filePath);f = codecs.open(filePath, 'r', 'utf-8')fileContent = f.read()f.close()fileContents.append(fileContent)import pandas;
corpos = pandas.DataFrame({'filePath': filePaths, 'fileContent': fileContents
});import jiebasegments = []
filePaths = []
for index, row in corpos.iterrows():filePath = row['filePath']fileContent = row['fileContent']segs = jieba.cut(fileContent)for seg in segs:segments.append(seg)filePaths.append(filePath)segmentDataFrame = pandas.DataFrame({'segment': segments, 'filePath': filePaths
});import numpy;
#进行词频统计        
segStat = segmentDataFrame.groupby(by="segment")["segment"].agg({"计数":numpy.size}).reset_index().sort_values(by=["计数"],ascending=False);#移除停用词
stopwords = pandas.read_csv("C:\\Python_DM\\2.4\\StopwordsCN.txt", encoding='utf8', index_col=False
)fSegStat = segStat[~segStat.segment.isin(stopwords.stopword)
]#绘画词云
#http://www.lfd.uci.edu/~gohlke/pythonlibs/
from wordcloud import WordCloud
import matplotlib.pyplot as plt#传入字体文件的路径,还有背景颜色
#微软雅黑的字体,黑色背景
wordcloud = WordCloud(font_path='C:\\Python_DM\\2.4\\simhei.ttf', background_color="black"
)#把分词设置成数据框的索引,再调用to_dict()的方法,获得一个字典的数据结构了。
words = fSegStat.set_index('segment').to_dict()wordcloud.fit_words(words['计数'])plt.imshow(wordcloud)#plt.close()
五、美化词云(词云放入某图片形象中)
六、关键词提取
import os
import codecs
import pandas
import jieba
import jieba.analyse #关键字提取方法#定义好存储的列数组,抽取5个关键字
filePaths = []
contents = []
tag1s = []
tag2s = []
tag3s = []
tag4s = []
tag5s = []for root, dirs, files in os.walk("C:\\Python_DM\\2.6\\SogouC.mini\\Sample\\"
):for name in files:filePath = root + '\\' + name;f = codecs.open(filePath, 'r', 'utf-8')content = f.read().strip()f.close()#将文件内容(content)传递给extract_tags方法#把管家你在tags添加到对应的列中tags = jieba.analyse.extract_tags(content, topK=5)filePaths.append(filePath)contents.append(content)tag1s.append(tags[0])tag2s.append(tags[1])tag3s.append(tags[2])tag4s.append(tags[3])tag5s.append(tags[4])tagDF = pandas.DataFrame({'filePath': filePaths, 'content': contents, 'tag1': tag1s, 'tag2': tag2s, 'tag3': tag3s, 'tag4': tag4s, 'tag5': tag5s
})
结果如下:

七、关键词提取实现

词频(Term Frequency):

    指的是某一个给定的词在该文档中出现的次数。

计算公式: TF = 该次在文档中出现的次数

逆文档频率(Inverse Document Frequency)

    IDF就是每个词的权重,它的大小与一个词的常见程度成反比。

计算公式:IDF = log(文档总数/(包含该词的文档数 - 1))

TF-IDF(Term Frequency-Inverse Document Frequency)

    权衡某个分词是否关键词的指标,该值越大,是关键词的可能性就越大。

计算公式:TF - IDF = TF * IDF

7.1文档向量化


7.2代码实战




http://chatgpt.dhexx.cn/article/KI1rbGVu.shtml

相关文章

文本数据挖掘----数据预处理

一、数据预处理简介 1、为什么要进行数据预处理 一开始拿到的数据在数据的质量方面或多或少有一些问题,即在数据的准确性、完整性、一 致性、合时性(实时性)、可信性、解释性等方面可能存在问题,所以需要数据预处理来提高数据 …

文本数据挖掘----初识数据挖掘

一、数据挖掘的内容 1、关联规则挖掘 (1)关联规则挖掘工作内容 关联规则挖掘是指寻找给定数据集中项之间的有趣关联或相关联系(频繁出现的项集模式知 识);可以帮助许多决策的制定。 2、非监督式机器学习-聚类 &am…

文本数据挖掘(Text Mining)

文本数据挖掘是利用某些方法比如自然语言处理(Natural language processing (NLP))技术把一堆没有结构的数据而处理成有结构的数据的一种人工智能技术,而处理后的这些有结构的数据可以作为机器学习和深度学习模型的输入,也可以直接…

基于Python数据挖掘的文本数据的分类与分析

目录 数据获取 2数据预处理 2建立词典 4生成词向量 6贝叶斯分类器 7SVM 10逻辑回归 12实验总结与反思 14 实验一 文本数据的分类与分析 【实验目的】 1.掌握数据预处理的方法,对训练集数据进行预处理; 2.掌握文本建模的方法,对语料库的文档进…

使用VS2015编译JSBSim

1.说明 最近在研究JSBSim的代码,首先百度了一些JSBSim相关的文档和教程,有一篇《Building_JSBSim_with_Visual_Cpp_2010》讲了如何利用VS2010编译JSBSim,参考这个教程编译完成了一个JSBSim工程。但是这个工程是好多年以前的了,在…

C++学习 | VS2015下配置FFTW3库的方法,亲测实用

笔者是C的初学者,也是VS2015的初学者,最近的编程内容涉及到了傅里叶变换,于是查阅了很多资料,得知有FFTW这个十分强大的库,下面从下载到安装详细介绍。 一、FFTW简介 FFTW ( the Faster Fourier Transform in the W…

vs2015环境配置android,Visual Studio 2015环境搭建教程

当微软发布了Visual Studio 2015 Preview支持了wp,ios,android三大系统手机开发,相信也有不少朋友想迫不及待的使用这款Visual Studio 2015,下面小编就为大家介绍一下。 Visual Studio 2015环境搭建教程 1、安装之前先要看看自己的…

OpenCV+VS2015的详细配置(小白教程)

OpenCVVS2015的详细配置(小白教程) 一:下载安装OpenCV和VS2015配置环境变量VS2015中配置OpenCV 一:下载安装OpenCV和VS2015 1.下载OpenCV 进入OpenCV官网,下载自己想要版本。这里注意:OpenCV3.0是一个分界…

vs2015中用python编写程序

转载请注明出处:https://mp.csdn.net/postedit/81508867 python功能强大,但是没有专门的编写器,为了避免安装过多软件。在vs2015上配置使用,vs2015安装时直接选中python插件。本文配置中所用电脑型号是win7|64位,参考文…

VS2015镜像安装教程

为了更好地支持 Win10 程序的开发,微软发布了 VS2015。VS2015 支持开发人员编写跨平台的应用程序,从 Windows 到 Mac、Linux、甚至是编写 iOS 和 Android 代码! VS2015 共有三个版本,分别是: 社区版(Commu…

VS2015编译使用Boost库遇到的问题及正确编译使用教程

目录 背景: 一、VS2015Boost1.79.0时出现的问题情况 1、前言 2、问题发现 3、排查找原因 二、VS2015Boost1.69.0正确编译使用 1、执行bat文件 2、运行exe文件,编译lib库 3、VS2015包含库使用 背景: 本机电脑window10上已经安装过VS2…

VS2015 tfs的使用教程

本人文章陆续转向本人微信公账号发布 公众号:搬砖码农SmallNNN,期望您要是搬砖码农,一起学习探讨。 由于最新新换了工作环境,点击打开链接,看了这个文章的人大家都知道, 上家用的是git,这个有的教程了&am…

vs2015使用教程

一、启动 visual studio 2015 稍等片刻,你就会看到这个界面: 点击菜单:”文件”-“新建”-“项目”,会出现这个窗口: 选择左侧的”Visual C”下面的“win32”之后,选择右侧的”win32控制台应用程序”&#…

【VSCode常用插件】Path Autocomplete(@路径提示的插件)

前言❤️ 在路上,见识世界;在途中,认清自己 ❤️ 【VSCode常用插件】Path Autocomplete(路径提示的插件) 一、安装教程二、设置教程(1)在vscode设置打开 settings.json(2&#xff09…

vscode最常用插件

常用插件: 如果喜欢中文就安装中文,如果不喜欢就自动忽略. 1、chinese 2、Open-In-Browser 这个是必须安装的 打开浏览器看效果使用的 快捷键是altb 3、Prettier Prettier 是目前 Web 开发中最受欢迎的代码格式化程序。安装了这个插件,它…

vscode常用插件 - Path Autocomplete

1. Path Autocomplete 作用: 在vscode中使用提示路劲配置 打开vscode设置 搜索 settings.json 添加以下代码 // 导入文件时是否携带文件的拓展名"path-autocomplete.extensionOnImport": true,// 配置的路径提示"path-autocomplete.pathMappings": {"…

VSCode 常用插件推荐

VS Code提供了非常丰富的插件功能,根据你的需要,安装对应的插件可以大大提高开发效率。 完成前端开发,常见插件介绍: 目录 1、Chinese (Simplified) Language Pack 2、Code Spell Checker 3、HTML CSS Support 4、JavaScrip…

前端VSCode常用插件安装和使用

本篇文章先介绍下常见的插件~~~~ VSCode常用的插件 vscode之所以被称为宇宙第一神器,其中丰富的插件功不可没,安装起来超级简单,给我们开发带来了极大的便捷。 注意,新手学习期间,不建议安装形形色色的插件&#xff…

VSCode常用插件和快捷键总结

码字不易,转载请附原链,搬砖繁忙回复不及时见谅。 快捷键 切换打开的项目窗口:Ctrl W打开最近的项目:Ctrl R切换打开的文件:Ctrl 数字键 / Ctrl tab左右切换打开的文件:Command alt 左/右format格式…

VSCode 工具常用插件

1、Debugger for Chrome 方便运行代码,浏览器打开 2、 GitLens — Git supercharged 鼠标放到代码行上可以显示,改行的上一次修改记录 3、Git History git log 4、 Auto Close Tag 自动完成闭合标签 5、 Auto Rename Tag 修改了前面的开始标签&#…