本文仅作为本人的笔记分享,便于以后查找,也可以提供一些学习笔记给同学们,如有错误,欢迎批评指正

一.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.结果

在这里插入图片描述

在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐