一、定义:

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

二、语料库(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 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_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

机器学习之---文本分析(jieba分词和词云绘制)相关推荐

  1. 爬取B站中的《啥是佩奇》的实时弹幕并利用jieba分词形成词云效果

    这一连好多天都在忙,到今天为止,终于忙完了,可以认真学习一些自己的技术了! 这次我的目标是爬取B站中<啥是佩奇>的实时弹幕,下面我们开始吧! 找到网址,检查,并找到实时弹幕的API接口 凭 ...

  2. jieba分词_wordcloud词云美化——jieba结巴中文分词(将长句拆分)

    大家好,上一篇文章<五行代码上手WordCloud词云--用一个重复的单词做一个单词云>已经带大家初步认识了词云的基本制作流程,本节教大家如何对长句进行拆分制作词云: 首先我们来了解这张图 ...

  3. python7(文件,join方法,jieba,wordcloud词云绘制)

    文章目录 文件 文件类型 文件的打开和关闭 文件内容的读取 利用with语句 数据文件的写入 实例:利用文件绘制轨迹 join方法 一维数据的表示 一维数据的写入处理 二维数据的表示 jieba库 w ...

  4. 【文本挖掘】——词频统计、词云绘制与美化+[微微一笑很倾城]实战

    词频统计.词云+实战 一.词频统计: 1.基本概念及原理 2.词频统计方法 二.词云 1.词云绘制工具: 2.python词云绘制--Wordcloud 三.基于分词频数绘制词云 1.利用词频绘制词云 ...

  5. python词频统计完整步骤_Python中文文本分词、词频统计、词云绘制

    本文主要从中文文本分词.词频统计.词云绘制方面介绍Python中文文本分词的使用.会使用到的中文文本处理包包括:wordcloud,jieba,re(正则表达式),collections. 1 准备工 ...

  6. NLP实现文本分词+在线词云实现工具

    实现文本分词+在线词云实现工具 词云是NLP中比较简单而且效果较好的一种表达方式,说到可视化,R语言当仍不让,可见R语言︱文本挖掘--词云wordcloud2包 当然用代码写词云还是比较费劲的,网上也 ...

  7. Rstudio 实现 爬虫 文本分词 个性化词云设计--我爱中国我爱党

    Rstudio 爬虫 文本分词个性化词云设计 目录 1.环境准备,加载依赖 2.rvest 爬虫,数据爬取 3.jiebaR用于分词,词频统计 4.wordcloud2 结果可视化 ========= ...

  8. python jieba库分词_Python基于jieba库进行简单分词及词云功能实现方法

    本文实例讲述了Python基于jieba库进行简单分词及词云功能实现方法.分享给大家供大家参考,具体如下: 目标: 1.导入一个文本文件 2.使用jieba对文本进行分词 3.使用wordcloud包 ...

  9. 小白都能学会的Python基础 第六讲:综合实战2 - 大数据分词与词云图绘制

    1.华小智系列 - Python基础(案例版) <Python基础>目录 第六讲:综合实战2 - 大数据分词与词云图绘制 1.大数据分词技巧 2.词频统计技巧 3.词云图绘制 4.微博词云 ...

最新文章

  1. 开发编程值得收藏的经典书籍 免费下载
  2. WCF - WAS Hosting
  3. exlsx表格教程_用Ctrl+E处理Excel表格,快到你无法想象!
  4. MYSQL的函数有哪些?(4.3时间与日期函数)
  5. 在sharepoint中添加视频播放
  6. HTML+CSS+JS实现echarts图表炫光分布地图动画
  7. 没有APP经验的运营者,怎么做好APP推广
  8. POJ 3468 A Simple Problem with Integers(线段树区间更新)
  9. 纯js代码-实战轮播图
  10. 元转万元单位换算_excel中如何将元换算成万元 excel 万单位 不要万字
  11. SuperMap iDesktop常见问题解答集锦(八)
  12. 紫书习题3-6纵横字谜的游戏
  13. 蝴蝶效应、青蛙现象、鳄鱼法则、鲇鱼效应…… 好多新名词 :)
  14. Android 仿QQ好友列表功能实现
  15. 对称、群论与魔术(一)——对称性本质探索
  16. 因果分析.科学实验评估
  17. VS code(Visual Studio Code)乱码解决方法
  18. VUE启动报错:Error: The project seems to require yarn but it‘s not installed
  19. js 鼠标悬浮div显示tip,离开tip消失,不用单独写鼠标离开事件
  20. np.meshgrid函数中的indexing参数问题

热门文章

  1. java打印 好看的图形_分享java打印简单图形的实现代码
  2. 判断通过微信、支付宝扫一扫进入的页面
  3. 华为云开发者官网首页焕新升级,赋能开发者云上成长
  4. 4g上网宝显示无服务器,八天真实体验 华为EC5373 LTE上网宝
  5. np.cosh没有分配_JavaScript中带有示例的Math.cosh()方法
  6. Gitlab调优-备份及恢复
  7. CentOS7配置supervisor开机自启[队列监听,Horizon服务启动]
  8. CentOS docker 部署 flask + uWSGI + Nginx + Supervisor错误
  9. python matplotlib绘制等高线、等值线图
  10. WHQL徽标认证申请流程