A. python 中文切词使用停用词表问题
python中最好不要在list遍历中使用list.remove方法:
remove 仅仅 删除一个值的首次出现。
如果在 list 中没有找到值,程序会抛出一个异常
建议使用新的list存储要保留的内容,然后返回这个新list。比如
a_list=[1,2,3,4,5]
needs_to_be_removed=[3,4,5]
result=[]
forvina_list:
ifvnotinneeds_to_be_removed:
result.append(v)
printresult
B. python 结巴分词 停用词库
ifwnotinstopword:
#改为
ifw.wordnotinstopword.keys():
#试试
C. Python豆瓣电影《肖申克的救赎》评论爬取
先看效果图:
地址:( https://movie.douban.com/subject/1292052/comments?sort=time&status=P)
爬取前1w条评论
存储成txt文档
数据预处告携理
中文分词
统计top10的高频词
可视化展示高频词
根据词频生成词云
审核评论
================================================================
配置准备
中文分词需要jieba
词云绘制需要wordcloud
可视化展示中需要的中文字体
网上公开资源中找一个中咐桐文停用词表
根据分词结果自己制作新增词袜简伏表
准备一张词云背景图(附加项,不做要求)
paddlehub配置
#安装jieba分词和词云
pip install jieba
pip install wordcloud
#安装paddle
pip install --upgrade PaddlePaddle
#安装模型
#hub install porn_detection_lstm==1.1.0
pip install --upgrade paddlehub
pip install numpy
#安装Beautifulsoup
pip install BeautifulSoup4
Github地址: https://github.com/mikite/python_sp_shawshank
有可能遇到的问题:
1.UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe8 in position 1: invalid continuation byte
解决方法:
1.不使用urlLib换做requests
2.去掉请求头中的 'Accept-Encoding': 'gzip, deflate, br'
3.返回值reponse 转字符串指定编码utf-8
# 'Accept-Encoding': 'gzip, deflate, br',
2.关于cookie
解决方法:
1.去豆瓣请求头中复制cookie设置到请求头中
'Cookie': 'bid=WD6_t6hVqgM'
3.请求返回418的问题
解决方案模拟设置请求头,设置user-agent
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
4.使用beautifulsoup获取不到评论
解决方法:
第一步:指定解析参数为'lxml'
soupComment = BeautifulSoup(html, 'lxml')
第二步:
findAll方法指定css文件的class名
print('网页内容:', soupComment.prettify())
comments = soupComment.findAll(class_='short')
点击获取源码
D. python jieba停用词该如何设置
你把你的停用词排一下序,然后再给结巴看看。
或者加两个停用词,一个河北、一个西南部。
停用词通常是很短的高频出现的词语,真实情况你这样的不多。
如果你这种情况,不妨先分词,也不去停用词。
然后自己再来后续处理。
E. python 怎么向textblob中加停用词
把语料从数据库提取出来以后就要进行分词啦,我是在linux环境下做的,先把jieba安装好,然后找到内容是build jieba PKG-INFO setup.py test的那个文件夹(我这边是jieba-0.38),把自己的自定义词典(选用,目的是为了分出原始词库中没有的词以及优先分出一些词),停用词词典(选用),需要分词的语料文件,调用jieba的python程序都放到这个文件夹里,就可以用啦。至于词典要什么样的格式,在网上一查就可以了。
之前有看到别的例子用自定义词典替换掉jieba本身词典,但是我试了一下好像效果不行,假设原始词典中有’云‘,’计算‘而没有’云计算‘,我想要分出’云计算‘这个词,加载自定义词典可以成功,但替换原始词典就不一定成功了。(当然我说的也不一定对)
还有停用词词典,我之前是把停用词在程序里存入一个列表,然后分每个词时都循环一遍列表,这样特别浪费时间。后来把停用词做成字典就很快了。
for eachline in fin可避免memory error。如果还是报memory error,那应该就是输入语料文件单行数据多长了。
#!/usr/bin/python #-*- encoding:utf-8 -*- import jieba #导入jieba模块import re
jieba.load_userdict("newdict.txt") #加载自定义词典 import jieba.posseg as pseg
def splitSentence(inputFile, outputFile): #把停用词做成字典
stopwords = {}
fstop = open('stop_words.txt', 'r') for eachWord in fstop:
stopwords[eachWord.strip().decode('utf-8', 'ignore')] = eachWord.strip().decode('utf-8', 'ignore')
fstop.close()
fin = open(inputFile, 'r') #以读的方式打开文件
fout = open(outputFile, 'w') #以写得方式打开文件
jieba.enable_parallel(4) #并行分词
for eachLine in fin:
line = eachLine.strip().decode('utf-8', 'ignore') #去除每行首尾可能出现的空格,并转为Unicode进行处理
line1 = re.sub("[0-9s+.!/_,$%^*()?;;:-【】+"']+|[+——!,;:。?、~@#¥%……&*()]+".decode("utf8"), "".decode("utf8"),line)
wordList = list(jieba.cut(line1)) #用结巴分词,对每行内容进行分词
outStr = ''
for word in wordList: if word not in stopwords:
outStr += word
outStr += ' '
fout.write(outStr.strip().encode('utf-8') + '
') #将分词好的结果写入到输出文件 fin.close()
fout.close()
splitSentence('ss.txt', 'tt.txt')
F. python数据挖掘——文本分析
作者 | zhouyue65
来源 | 君泉计量
文本挖掘:从大量文本数据中抽取出有价值的知识,并且利用这些知识重新组织信息的过程。
一、语料库(Corpus)
语料库是我们要分析的所有文档的集合。
二、中文分词
2.1 概念:
中文分词(Chinese Word Segmentation):将一个汉字序列切分成一个一个单独的词。
eg:我的家乡是广东省湛江市-->我/的/家乡/是/广东省/湛江市
停用词(Stop Words):
数据处理时,需要过滤掉某些字或词
√泛滥的词,如web、网站等。
√语气助词、副词、介词、连接词等,如 的,地,得;
2.2 安装Jieba分词包:
最简单的方法是用CMD直接安装:输入pip install jieba,但是我的电脑上好像不行。
后来在这里:https://pypi.org/project/jieba/#files下载了jieba0.39解压缩后 放在Python36Libsite-packages里面,然后在用cmd,pip install jieba 就下载成功了,不知道是是什么原因。
然后我再anaconda 环境下也安装了jieba,先在Anaconda3Lib这个目录下将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代码示例( 分词 )
输出结果为: 我 爱
Python
工信处
女干事
每月 经过 下属 科室 都 要 亲口
交代
24 口 交换机 等 技术性 器件 的 安装
工作
分词功能用于专业的场景:
会出现真武七截阵和天罡北斗阵被分成几个词。为了改善这个现象,我们用导入词库的方法。
但是,如果需要导入的单词很多,jieba.add_word()这样的添加词库的方法就不高效了。
我们可以用jieba.load_userdict(‘D:PDM2.2金庸武功招式.txt’)方法一次性导入整个词库,txt文件中为每行一个特定的词。
2.3.1 对大量文章进行分词
先搭建语料库:
分词后我们需要对信息处理,就是这个分词来源于哪个文章。
四、词频统计
3.1词频(Term Frequency):
某个词在该文档中出现的次数。
3.2利用Python进行词频统计
3.2.1 移除停用词的另一种方法,加if判断
代码中用到的一些常用方法:
分组统计:
判断一个数据框中的某一列的值是否包含一个数组中的任意一个值:
取反:(对布尔值)
四、词云绘制
词云(Word Cloud):是对文本中词频较高的分词,给与视觉上的突出,形成“关键词渲染”,从而国旅掉大量的文本信息,使浏览者一眼扫过就可以领略文本的主旨。
4.1 安装词云工具包
这个地址:https://www.lfd.uci.e/~gohlke/pythonlibs/ ,可以搜到基本上所有的Python库,进去根据自己的系统和Python的版本进行下载即可。
在python下安装很方便,在anaconda下安装费了点劲,最终将词云的文件放在C:UsersAdministrator 这个目录下才安装成功。
五、美化词云(词云放入某图片形象中)
六、关键词提取
结果如下:
七、关键词提取实现
词频(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代码实战
G. python jieba分词如何去除停用词
-*- coding: utf-8 -*-
import jieba
import jieba.analyse
import sys
import codecs
reload(sys)
sys.setdefaultencoding('utf-8')
#使用其他编码读取停用词表
#stoplist = codecs.open('../../file/stopword.txt','r',encoding='utf8').readlines()
#stoplist = set(w.strip() for w in stoplist)
#停用词文件是utf8编码
stoplist = {}.fromkeys([ line.strip() for line in open("../../file/stopword.txt") ])
#经过分词得到的应该是unicode编码,先将其转成utf8编码