结巴分词的安装及使用[通俗易懂]

(35) 2023-04-05 15:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说结巴分词的安装及使用[通俗易懂],希望能够帮助你!!!。

参考内容:

  • 十分钟快速上手结巴分词
  • 结巴分词安装与使用
  • python中结巴分词快速入门

一、安装
我这里采用的是在cmd命令行中进行pip安装:pip install jieba结巴分词的安装及使用[通俗易懂]_https://bianchenghao6.com/blog__第1张
进入python环境,import jieba如果没有问题表示安装成功:
结巴分词的安装及使用[通俗易懂]_https://bianchenghao6.com/blog__第2张
二、使用
1)结巴分词的分词模式有3种:全模式;精确模式;搜索引擎模式;结巴分词还有支持繁体分词、支持自定义词典、MIT授权协议等特性。
使用的算法:

  • 基于前缀词典实现高效的词图扫描,生成了句子中汉字所有可能成词情况所构成的有向无环图(DAG)
  • 采用了动态规划查找最大路径概率,找出基于词频的最大切分组合
  • 对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法

函数描述:

  • jieba.cut(“需要分词的字符串”, cut_all =True, HMM = False)
    该方法接受3个输入参数:需要分词的字符串;cut_all参数用来控制是否采用全模式;HMM参数用来控制是否使用HMM模型
  • jieba.cut_for_search(“需要分词的字符串”, HMM = False)
    该方法接受两个参数:需要分词的字符串;是否使用HMM模型。该方法适用于搜索引擎构建倒排索引的分词,粒度比较细
  • 待分词的字符串可以是unicode或UTF-8字符串、GBK字符串
  • jieba.cut以及jieba.cut_for_search返回的结构都是一个可迭代的generator,可以使用for循环来获得分词后得到的每一个词语(Unicode),或者用jieba.lcut以及jieba.lcut_for_search直接返回list
  • jieba.Tokenizer(dictionary=DEFAULT_DICT)
    新建自定义分词器,可用于同时使用不同词典。jieba.dt为默认分词器,所有全局分词相关函数都是该分词器的映射
import jieba
# 1. 采用“全模式”切词,把句子中的所有可以成词的词语都扫描出来。 速度非常快,但是不能解决歧义;
seg_list = jieba.cut('我叫XXX,是昆明理工大学的学生。', cut_all=True)
print(" ".join(seg_list))

# 2. 采用“精确模式”切词,试图将文本最精确的分开,适合于做文本分析
seg_list = jieba.cut('我叫XXX,是昆明理工大学的学生。')
print(" ".join(seg_list))

# 3. 采用“搜索引擎模式”切词,在精确的基础上对长词进行进一步的切分

seg_list = jieba.cut_for_search('我叫XXX,是昆明理工大学的学生。')
print(" ".join(seg_list))

运行结果如下:
结巴分词的安装及使用[通俗易懂]_https://bianchenghao6.com/blog__第3张

2)添加自定义词典
开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。虽然 jieba 有新词识别能力,但是自行添加新词可以保证更高的正确率。
可以看出上面的例子不能将“昆明理工大学”当成一个词分析出来,此时我们可以加一个外部词典辅助jieba分析出“昆明理工大学”这个词。
该外部自定义词典是一个txt文档,在里面添加内容“昆明理工大学 8”,注意file_name(词典路径名)若为路径或二进制方式打开的文件,则文件必须为UTF-8编码。
词典格式和dict.txt一样,一个词占一行;每一行分三部分,一部分为词语,另一部分为词频(可省略),最后为词性(可省略),用空格隔开。词频可省略,使用计算出的能保证分出该词的词频。
引入该词典的方法:jieba.load_userdict("词典名.txt") # "词典名.txt" 为自定义词典的路径

import jieba
jieba.load_userdict("open_data/user_dict.txt") #引入外部用户自定义词典

seg_list = jieba.cut('我叫XXX,是昆明理工大学的学生。', cut_all=True)#采用“全模式”切词
print(" ".join(seg_list))

seg_list = jieba.cut('我叫XXX,是昆明理工大学的学生。')#采用“精确模式”切词
print(" ".join(seg_list))

seg_list = jieba.cut_for_search('我叫XXX,是昆明理工大学的学生。')#采用“搜索引擎模式”切词
print(" ".join(seg_list))

运行结果如下:(原来不能识别出“昆明理工大学,现在可以了)
结巴分词的安装及使用[通俗易懂]_https://bianchenghao6.com/blog__第4张

3)对文件进行分词

import jieba
import jieba.analyse

#对文件进行分词
def splitFile(inputFile,outputFile):
    fin = open(inputFile,'r',encoding='utf-8')
    fout = open(outputFile,'w',encoding='utf-8')
    for line in fin:
        line = line.strip()
        line = jieba.cut(line) #采用“精确模式进行切词”
        outstr = " ".join(line)
        print(outstr)
        fout.write(outstr + '\n')
    fin.close()
    fout.close()
    
splitFile("open_data/dang_test.txt","open_data/dang_tag.txt")

上一篇

已是最后文章

下一篇

已是最新文章

发表回复