jieba的基本使用

jieba 是一款优秀的 Python 第三方中文分词库,可以使用 pip install jieba / pip3 install jieba 命令安装,本博客主要参考 官方文档 对 jieba 作简单的介绍

1、分词

jieba 支持三种 分词模式,它们各有优劣,可以根据自己的需要选择合适的模式:

  • 精确模式:试图将句子最精确地切开,适合文本分析
  • 全模式:把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解决歧义问题
  • 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合搜索引擎分词

(1)精确模式 和 全模式

jieba.cut(sentence,cut_all=False,HMM=True)
jieba.lcut(sentence,cut_all=False,HMM=True)

以上两种方法都可以用精确模式或全模式对句子进行分词

不同之处只是在于 cut 方法返回迭代器,而 lcut 方法返回列表

它们都接受三个参数:

  • sentence:字符串,表示需要进行分词的文本,可以是 Unicode、UTF-8 或者 GBK (不建议) 格式
  • cut_all:布尔值,默认为 False,表示使用精确模式,若为 True,则使用全模式
  • HMM:布尔值,默认为 True,表示使用隐马尔可夫模型,若为 False,则不使用隐马尔可夫模型
>>> import jieba
>>> # -------- 使用 cut 方法,cut_all 参数默认为 False,精确模式 --------
>>> result = jieba.cut('我来到北京清华大学')
>>> print(','.join(result))
# 我,来到,北京,清华大学
>>> # -------- 使用 cut 方法,cut_all 参数设置为 True,全模式 --------
>>> result = jieba.cut('我来到北京清华大学',cut_all=True) 
>>> print(','.join(result))
# 我,来到,北京,清华,清华大学,华大,大学

(2)搜索引擎模式

jieba.cut_for_search(sentence,HMM=True)
jieba.lcut_for_search(sentence,HMM=True)

以上两种方法都可以用搜索引擎模式对句子进行分词

不同之处只是在于 cut_for_search 方法返回迭代器,而 lcut_for_search 方法返回列表

它们都接受两个参数:

  • sentence:字符串,表示需要进行分词的文本,可以是 Unicode、UTF-8 或者 GBK (不建议) 格式
  • HMM:布尔值,默认为 True,表示使用隐马尔可夫模型,若为 False,则不使用隐马尔可夫模型
>>> import jieba
>>> # -------- 使用 cut_for_search 方法,搜索引擎模式 --------
>>> result = jieba.cut_for_search('我来到北京清华大学')
>>> print(','.join(result))
# 我,来到,北京,清华,华大,大学,清华大学

(3)新建自定义分词器

jieba.Tokenizer(dictionary=DEFAULT_DICT)

以上方法用于新建自定义分词器,jieba.dt 为默认的分词器,所有全局分词相关函数都是该分词器的映射

2、添加自定义词典

(1)载入词典

jieba.load_userdict(userdict.txt)

以上方法可以载入自定义词典,以便包含 jieba 词库里没有的词,提高准确率

  • userdict.txt:自定义词典,格式要求如下:

    一个词占一行,一行分三部分:词语、词频 (可省略)、词性 (可省略),用空格隔开,顺序不可颠倒

另外,还需要更改分词器的 tmp_dircache_file 属性,可分别指定缓存文件所在的文件夹及其文件名

(2)调整词典

  • 使用 add_word(word, freq=None, tag=None)del_word(word) 可在程序中动态修改词典
  • 使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来

3、关键词提取

关键词提取功能主要使用 jieba.analyse,故需要在程序中导入

import jieba.analyse

(1)基于 TF-IDF 算法的关键词抽取

jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())

基于 TF-IDF 算法的关键词抽取,其接受四个参数:

  • sentence:待提取的文本
  • topK:返回 topK 个 TF/IDF 权重最大的关键词,默认值为 20
  • withWeight:指定是否一并返回关键词权重值,默认值为 False
  • allowPOS:仅包括指定词性的词,默认值为空,即不进行筛选
>>> import jieba.analyse
>>> s = "此外,公司拟对全资子公司吉林欧亚置业有限公司增资4.3亿元,增资后,吉林欧亚置业注册资本由7000万元增加到5亿元。吉林欧亚置业主要经营范围为房地产开发及百货零售等业务。目前在建吉林欧亚城市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。"
>>> for word,weight in jieba.analyse.extract_tags(s, 5, withWeight=True):
        print('%s %s' % (word, weight))

# 欧亚 0.7300142700289363
# 吉林 0.659038184373617
# 置业 0.4887134522112766
# 万元 0.3392722481859574
# 增资 0.33582401985234045

另外,jieba.analyse.TFIDF(idf_path=None) 用于新建 TFIDF 实例,idf_path 为 IDF 频率文件

jieba.analyse.set_idf_path(file_name) 用于将关键词提取所使用的逆向文件频率(IDF)文本语料库切换成自定义语料库的路径

jieba.analyse.set_stop_words(file_name) 用于将关键词提取所使用的停止词(Stop Words)文本语料库切换成自定义语料库的路径

(2)基于 TextRank 算法的关键词抽取

jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))

基于 TextRank 算法的关键词抽取,与 extract_tags 基本一致,注意默认的过滤词性

  • sentence:待提取的文本
  • topK:返回 topK 个 TF/IDF 权重最大的关键词,默认值为 20
  • withWeight:指定是否一并返回关键词权重值,默认值为 False
  • allowPOS:仅包括指定词性的词,默认值为 ('ns', 'n', 'vn', 'v')
>>> import jieba.analyse
>>> s = "此外,公司拟对全资子公司吉林欧亚置业有限公司增资4.3亿元,增资后,吉林欧亚置业注册资本由7000万元增加到5亿元。吉林欧亚置业主要经营范围为房地产开发及百货零售等业务。目前在建吉林欧亚城市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。"
>>> for word,weight in jieba.analyse.textrank(s, 5, withWeight=True):
        print('%s %s' % (word, weight))

# 吉林 1.0
# 欧亚 0.9966893354178172
# 置业 0.6434360313092776
# 实现 0.5898606692859626
# 收入 0.43677859947991454

4、词性标注

词性标注功能主要使用 jieba.posseg,故需要在程序中导入

import jieba.posseg

(1)词性标注

jieba.posseg.cut()

标注句子分词后每个词的词性,采用和 ictclas 兼容的标记法

>>> import jieba.posseg
>>> s = '我爱北京天安门'
>>> for word, flag in jieba.posseg.cut(s):
        print('%s %s' % (word, flag))

# 我 r
# 爱 v
# 北京 ns
# 天安门 ns

(2)新建自定义分词器

jieba.posseg.POSTokenizer(tokenizer=None)

以上方法用于新建自定义分词器,jieba.posseg.dt 为默认的词性标注分词器

猜你喜欢

转载自www.cnblogs.com/wsmrzx/p/10457055.html