去停用词python
⑴ python中从列表中用for循环删除(remove方法)停用词特别慢,有快一点的方法吗
循环删除,必须用循环语句,而循环语句就那么几个!!
⑵ 如何用python对一个文件夹下的多个txt文本进行去停用词
在用 for 循环去停用词的部分,出错,仅去掉了 stopwords 中的部分停用词,且相同停用词只去除了一次。求大神告知错误之处,贴上代码再好不过!!
#encoding=utf-8
import sys
import re
import codecs
import os
import shutil
import jieba
import jieba.analyse
#导入自定义词典
#jieba.load_userdict("dict_.txt")
#Read file and cut
def read_file_cut():
#create path
stopwords = {}.fromkeys([ line.strip() for line in open('stopword.txt') ])
path = "Lon\\"
respath = "Lon_Result\\"
if os.path.isdir(respath): #如果respath这个路径存在
shutil.rmtree(respath, True) #则递归移除这个路径
os.makedirs(respath) #重新建立一个respath目录
num = 1
while num<=20:
name = "%d" % num
fileName = path + str(name) + ".txt"
resName = respath + str(name) + ".txt"
source = open(fileName, 'r')
if os.path.exists(resName):
os.remove(resName)
result = codecs.open(resName, 'w', 'utf-8')
line = source.readline()
line = line.rstrip('\n')
while line!="":
line = unicode(line, "utf-8")
output=''
seglist = jieba.cut(line,cut_all=False)
for seg in seglist:
seg=seg.encode('utf-8')
if seg not in stopwords:
output+=seg
output = ' '.join(list(seglist))#空格拼接
print output
result.write(output + '\r\n')
line = source.readline()
else:
print 'End file: ' + str(num)
source.close()
result.close()
num = num + 1
else:
print 'End All'
#Run function
if __name__ == '__main__':
read_file_cut()
我觉得是这样啦:
...
seglist = jieba.cut(line,cut_all=False)
seglist = (seg.encode('utf-8') for seg in seglist)
seglist = [seg for seg in seglist if seg not in stopwords]
output = ' '.join(seglist)
print output
...
不太懂你这两行的意思:
output+=seg
output = ' '.join(list(seglist))#空格拼接
每次 output 都会被设定成 ' '.join(list(seglist)) 那 output+=seg 好像就没有意义了。
⑶ 以下函数可以实现分词,但是为什么去停用词没有效果呢问题在哪里
我觉得可能还是编码不对吧。我也遇到这种情况,所以搜到了这个问题,查了很多东西也没有个结果。
我最开始数据都是用GB2312处理的,后来用结巴分词看文档上说用好用utf-8编码,就写了段代码把文本改成utf-8了,然后停用词文件也是用的utf-8保存的,但是不是用代码保存的,使用Notpad,之后就一直不能停用文件里的词。
后来,在代码中加了几个比较明显的停用词组成的list,当分出来的词不在list里的时候,才输出该词,结果就成功的停用了list里的所有词。
建议楼主再调整一下编码试试吧。
另外,我最开始用的是Python2.7.10,因为停用词没反应,我查到一个网页说他用Python3.4就好了,我又换了Python3.4.3,可是一样不能用,然后向我上面那么做的就好了,Python2.7还没有试,估计问题都差不多了吧...
楼主加油!Python程序猿加油!
⑷ python英文去停用词,报错 'str' object has no attribute 'word'
你把w.word改成w就可以了
⑸ python jieba停用词该如何设置
你把你的停用词排一下序,然后再给结巴看看。
或者加两个停用词,一个河北、一个西南部。
停用词通常是很短的高频出现的词语,真实情况你这样的不多。
如果你这种情况,不妨先分词,也不去停用词。
然后自己再来后续处理。
⑹ Python SnowNLP情感分析实践与优化总结
由于语料缺乏,前期若使用到情感分析,建议暂时使用SnowNLP(此模块主要使用淘宝评论语料)做情感挖掘,但不仅仅为单纯调用,需要优化,下面是一些实践思考:
可在此基础上优化,比如文本需要特别处理,除了平常的去停用词外,还可以需要对输入的文本结合词性等进行处理。
下面是一些常识:
一)无情感的词语(如去停用词,去掉语气词,无词性标签的词语)
二)对于文本过长,则可以考虑提取关键词或抽取文本摘要后再提取关键词
对于后者实践结果差异明显:
以"发布了头条文章: 《5分钟11亿!京东双11场景化产品消费增长明显》 5分钟11亿!京东双11场景化产品消费增长明显 "为例子, 显然该文本为“积极****”文本。
1)s = SnowNLP("发布了头条文章:《5分钟11亿!京东双11场景化产品消费增长明显》 5分钟11亿!京东双11场景化产品消费增长明显")
得分为0.5,明显不符合
2)s = SnowNLP(“ ”.join(jieba.analyse.textrank("发布了头条文章:《5分钟11亿!京东双11场景化产品消费增长明显》 5分钟11亿!京东双11场景化产品消费增长明显")))
而对于文本特别长的,则可以先抽取摘要,再对摘要提取关键词。
这主要由于此SnowNLP主要用贝叶斯机器学习方法进行训练文本,机器学习在语料覆盖上不够,特征上工程处理不当会减分,也没考虑语义等。
为何要考虑语义层面:
以“ 苏宁易购,是谁给你们下架OV的勇气****” 中的“ 下架”其实才是中心词(为表达愤怒的文本),但“ 勇气 ”为下架的宾语(其为积极的文本),此句应该结果小于0.5,但实际为0.88,去掉“苏宁易购”则为0.6>