Python数据挖掘-文本挖掘

article/2025/10/5 7:51:06

文本挖掘概要

搞什么的?

  • 从大量文本数据中,抽取出有价值的知识,并且利用这些知识更好的组织信息的过程。

目的是什么?

  • 把文本信息转化为人们可利用的知识。

举例来说,下面的图表利用文本挖掘技术对库克iphoneX 发布会的内容进行分析,得出此次发布会报告中的几个常青词汇、词频的趋势变化情况。

(一)语料库(Corpus)

在python中,如何根据以往的文档文件搭建一个语料库?

1.什么是语料库

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

在日常工作中我们对文章的管理,先是一篇篇的文章不断的积累,我们存了大量的文章之后,会对文章信息进行一些归类的工作,一般体现于建立不同的文件夹来保存不同类别的文章。

同样的,我们把我们需要分析的文本文件,读取内存变量中,然后在内存变量中使用不同的数据结构,对这些文本文件进行存储,以便进行下一步的分析。

这个内存变量就是语料库

2.语料库构建实操

我们通过一个案例来了解语料库构建的过程。
这里,jacky为了分享,整理了一份iphone8发布后,主流新闻网站评论的语料数据。
数据分析-jacky
数据分析- jacky

我存放iphone 语义文件夹的路
file:///Users/apple/Downloads/Iphone8
如果是windows系统要替换成响应的路径。

1) 如何把语料数据作为语料库导入到内存中

# -*- coding:utf-8 -*-
import os
import os.path
import codecs
filePaths=[]
fileContents=[]
for root,dirs,files in os.walk('Users/apple/Documents/Iphone8'):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
})

上述代码注解:

把一个文件夹中,包括嵌套文件夹的全路径,读入到一个内存变量中,我们定义为filePaths数组变量,接着使用os中walk方法,传入这个目录作为参数,就可以遍历该文件中的所有文件了
for root,dirs,files in os.walk中root为文件目录,dirs为root目录下的所有子目录,root目录下的所有文件,我们命名为files,然后进行遍历。
为了拿到root目录下的所有文件,我们再次便利所有的文件(代码:for name in files:)把它追加到filePaths变量中去即可。
os.path.join是拼接文件路径的方法,因为文件路径在windows,mac,linux中的写法是不同的,使用这个方法可以解决在不同系统中使用文件路径要使用不同方法的问题。
最后组建数据框pandas.DataFrame

我们可以print(corpos)
@数据分析-jacky

(二)中文分词(Chinese Word Segmentation)

1.中文分词

英文中单词是以空格作为自然分界符,而中文只是字句和段,能够通过明显的分界符简单化简,唯独词没有一个明显的分界符

  • 将一个汉字序列切分成一个一个单独的词

    • 我是数据分析部落的发起人 —-> 我/是/数据/分析/部落/的/发起人(@数据分析-jacky)

2.停用词(Stop Words)

对文章进行分词后,会产生大量的分词,这些分词中并不是每个词都有用的,在我们进行数据处理时,要过滤掉某些字或词

  • 泛滥的词:如web,网站等;

  • 语气助词、副词、介词、连接词等:如的、地、得

3.分词模块-jieba分词包

分词包有很多,jieba分词包是效率高,最简单的分词包

1)jieba基本使用方法-cut方法

import jieba
for w in jieba.cut('我是数据分析-jacky'):print(w)

@数据分析-jacky

下面是“分词届”最奇葩,也是最津津乐道的分词难题:

工信处女干事
每月经过下属科室都要亲口交代
24口交换机等技术性器件的安装工作

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

@数据分析-jacky

jieba在没有使用自定义分词的情况下,只使用默认词库,效果还是非常好的。

2)导入词库

虽然jieba包已经有默认词库,一般场景使用不会出现什么问题,但是我们要是把分词的功能用于专业的场景,会出现什么状况呢?

# -*- coding:utf-8 -*-
import jieba
seg_list = jieba.cut('天马流星拳和庐山升龙霸哪个更牛逼呢?')
for w in seg_list:print(w)

数据分析- jacky

import jieba
jieba.add_word('天马流星拳')
jieba.add_word('庐山升龙霸')
jieba.add_word('牛逼')
seg_list = jieba.cut('天马流星拳和庐山升龙霸哪个更牛逼呢?')
for w in seg_list:print(w)

@数据分析-jacky

  • 我们增加了自定义分词,明显增加了分词效果
  • 但是我们要处理的分词很多,使用一个个导入的方法就显得非常不高效了,我们可以使用load_userdict方法一次导入用户自定义词库中
jieba.load_userdict('路径/圣斗士招数.txt')

掌握了对单个字符串进行分词后,我们就可以对大量的文字进行分词了,用load_userdict一次性导入自定义词库中

3) 与语料库结合的实操案例

# -*- coding:utf-8 -*-
#搭建预料库
import os
import os.path
import codecs
filePaths=[]
fileContents=[]
for root,dirs,files in os.walk('Iphone8'):for name in files:filePath=os.path.join(root,name)filePaths.append(filePath)f=codecs.open(filePath,'r','GB2312')fileContent=f.read()f.close()fileContents.append(fileContent)import pandas
corpos=pandas.DataFrame({'filePath':filePaths,'fileContent':fileContents
})#每个分词后面都要跟着一个信息,那就是这个分词来源是哪篇文章
#因此,我们的结果除了分词,还需要指明分词的出处,以便进行后续的分析
import jieba
segments=[]
filePaths=[]
#接下来,遍历所有文章,使用数据框的方法,我们获取到语料库的每行数据,这样遍历得到的行是一个字典,
#列名index作为key,于是我们可以通过列名,使用字典的值的获取方法,获取到文件路径filePath,和文件内容fileContentfor index,row in corpos.iterrows():filePath=row['filePath']fileContent=row['fileContent']#接着调用cut方法,对文件内容进行分词segs=jieba.cut(fileContent)#接着遍历每个分词,和分词对应的文件路径一起,把它加到两列中for seg in segs:segments.append(seg)filePaths.append(filePath)#最后我们把得到的结果存在一个数据框中
segmentDataFrame=pandas.DataFrame({'segment':segments,'filePath':filePaths
})print(segmentDataFrame)

@数据分析-jacky

(三)文本挖掘的入口-词频统计

1.词频

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

  • 用词频这个指标来做应用的时候,并不会给定特定的词,而是计算机先对文章进行分词,然后对所得到的所有分词进行词频统计,然后看看哪些词在文章中经常出现。

2.如何使用Python进行词频统计

接着说上面Iphone8发布会语料库的案例,我们已经把语料库搭建好,对语料库进行了分词,上面的案例我们得到了一列为分词(segment),一列为分词所属文件(filePath)的数据框,接下来我们进行词频统计就非常简单了

我们使用分组统计函数,直接在分词变量数据框后调用groupby方法,使用分词字段进行分组,然后聚合函数使用numpy.size函数,也就是对分组字段做一个计数,最后重新设定索引[‘segment’],在根据计算进行倒序排列,得到的结果就是我们词频统计的结果了

import numpy
#进行词频统计
segStat=segmentDataFrame.groupby(by='segment'
)['segment'].agg({'计数':numpy.size}).reset_index().sort(columns=['计数'],ascending=False
)
  • 这里要特别注意的是:降序计数调用的方法sort函数,需要新版本的pandas库,懒得升新版本不降序也不影响后续的处理,这里小伙伴们可以自己处理。

接下来就是过滤停用词:

#首先判断分词列里面是否包含这些停用词
stopwords=pandas.read_csv(
"路径.txt",
encoding='utf-8',
index_col=False
)
#用isin方法,包含停用词就过滤词,用~符号取反
fSegStat=segStat[
~segStat.segment.isin(stopwords.stopword)
]

(四)生词词云

#导入WordCloud和matplotlib包
from wordcloud import WordCloud
import matplotlib.pyplot as plt#生成一个matplot对象,传入一个字体位置的路径和背景颜色即可
wordcloud=WordCloud(font_path='字体路径\simhei.ttf',background_color='black'
)
#WordCloud方法接受一个字典结构的输入,我们前面整理出来的词频统计结果是数据框的形式,因此需要转换,转换的方法,首先把分词设置为数据框的索引,然后在调用一个to_dict()的方法,就可以转换为字典的机构
words=fSegStat.set_index('segment').to_dict()#接着调用fit_words方法来调用我们的词频
wordcloud.fit_words(words['计数'])#绘图
plt.imshow(wordcloud)
plt.close()

(五)完整案例代码展示

# -*- coding:utf-8 -*-
import os
import os.path
import codecs
filePaths=[]
fileContents=[]
for root,dirs,files in os.walk('Users/apple/Documents/Iphone8'):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 jieba
segments=[]
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(columns=['计数'],ascending=False
)stopwords=pandas.read_csv(
"路径.txt",
encoding='utf-8',
index_col=False
)
fSegStat=segStat[
~segStat.segment.isin(stopwords.stopword)
]from wordcloud import WordCloud
import matplotlib.pyplot as plt
wordcloud=WordCloud(font_path='字体路径\simhei.ttf',background_color='black'
)
words=fSegStat.set_index('segment').to_dict()
wordcloud.fit_words(words['计数'])
plt.imshow(wordcloud)
plt.close()

最后,我们来看看效果吧
数据分析-jacky


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

相关文章

Python数据挖掘——文本分析

一、 一、定义: 文本挖掘:从大量文本数据中抽取出有价值的知识,并且利用这些知识重新组织信息的过程。 二、语料库(Corpus) 语料库是我们要分析的所有文档的集合。 import os import os.pathfilePaths [] #定义…

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

一、数据预处理简介 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格式…