本文仅作为本人的笔记分享,便于以后查找,也可以提供一些学习笔记给同学们,如有错误,欢迎批评指正
一.jieba分词的三种模式
1.全模式:将可以成词的词语都扫描出来,但是不解决歧义
2.精确模式:将所有句子精确地分开
3.搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
import jieba
'''
jieba分词的三种模式:
1.全模式:将可以成词的词语都扫描出来,但是不解决歧义
2.精确模式:将所有句子精确地分开
3.搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
'''
#使用默认词典进行分词
seg=jieba.cut("李小福是创新办主任也是云计算方面的专家",cut_all=True)#全模式
print("/".join(seg))
seg=jieba.cut("李小福是创新办主任也是云计算方面的专家")#默认精确模式 也可以设置cut_all=False
print("/".join(seg))
seg=jieba.cut_for_search("李小福是创新办主任也是云计算方面的专家")#搜索引擎模式
print("/".join(seg))
(我在运行时遇到这种错误,不应该把Python文件命名为jieba.py,换个别的名字就好了)
上述代码使用的是 jieba中自定义的词典,我们也可以使用自己定义的词典。
二.自定义词典
使用jieba.load_userdict(“filepath”)方法获取自定义词典
我自定义两个词典
词典1:创新办 1000 云计算 20000
词典2:新办 100000
(后面的n是词性,有没有都可以)
使用自定义词典代码及结果如下:
jieba.load_userdict(r"C:\Users\de'l'l\Desktop\学习\信息检索与原理\cidian1.txt")
seg=jieba.cut("李小福是创新办主任也是云计算方面的专家")
print("/".join(seg))
jieba.load_userdict(r"C:\Users\de'l'l\Desktop\学习\信息检索与原理\cidian2.txt")
seg=jieba.cut("李小福是创新办主任也是云计算方面的专家")
print("/".join(seg))
我们观察结果发现词典不一样但结果是一样的,这是因为我们最开始使用的是jieba1,它默认后面的分词都使用这个词典,如果想要使用词典2,使用Jupyter NoteBook写代码的只需要点击重启按钮即可(如下图),使用PyCharm的直接把前面的代码注释,留着用词典2的代码就可以了。
结果如下
注意:在自定义词典的文件中,词语与频数之间只能有一个空格,而且文件要保存为UTF-8编码格式,输入文件路径时要 在 \前面加上 \转义或者在路径前面加 r(我写的时候出现的就是上面三种错误);并且我们自定义的词典也只是将词语添加到jieba自带的词典当中,所以词语的频数如果比jieba默认词典的频数少,不起作用(例如:我将词典2中的“新办”的频数改为10,则分词时“新办”不会在一起,而是按照默认词典分为“创新/办“”)
三.对文件内容分词并统计词频
事先要创建三个文本文件,一个存放要分词的内容的文件,一个存放分词之后的结果的文件,另一个存放词语和词频
1.创建停用词
我使用的是哈工大停用词表
(下载地址:https://github.com/goto456/stopwords 下载之后里面的hit_stopwords.txt就是了)
def stopwordslist(filepath):
stopwords=[line.strip() for line in open(filepath,'r',encoding='utf-8').readlines()]
# strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
#readlines()读取所有行并返回列表
return stopwords
2.对句子进行分词
#对句子进行分词
def seg_sentence(sentence):
sentence_seged=jieba.cut(sentence.strip())
stopwords=stopwordslist(r"C:\Users\de'l'l\Desktop\学习\信息检索与原理\哈工大停用词表.txt")#这里加载停用词的路径
outstr=""
for word in sentence_seged:
if word not in stopwords:
if word!='\t':
outstr+=word
outstr+=" "
return outstr
3.读取文件内容,分词后写入文件中
inputs=open(r"C:\Users\de'l'l\Desktop\学习\信息检索与原理\wenjian.txt",'r',encoding='utf-8')#加载要处理的文件的路径
outputs=open(r"C:\Users\de'l'l\Desktop\学习\信息检索与原理\output.txt",'w',encoding='utf-8')#加载处理后的文件路径
for line in inputs:
line_seg=seg_sentence(line)#这里的返回值是字符串
outputs.write(line_seg)
outputs.close()
inputs.close()
4.统计词频
with open(r"C:\Users\de'l'l\Desktop\学习\信息检索与原理\output.txt", 'r',encoding='utf-8') as fr: #读入已经去除停用词的文件
data = jieba.cut(fr.read())
data = dict(Counter(data))#dict()用于创建一个字典 counter()作用就是在一个数组内,遍历所有元素,将元素出现的次数记下来
with open(r"C:\Users\de'l'l\Desktop\学习\信息检索与原理\cipin.txt", 'w',encoding='utf-8') as fw: #读入存储wordcount的文件路径
for k, v in data.items():
fw.write('%s,%d\n' % (k, v))
5.结果