当前位置:   article > 正文

Python中文分词库jieba用法代码示例_jieba分词代码

jieba分词代码
  • jieba三种分词模式1

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

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

jieba 采用延迟加载,import jieba 和 jieba.Tokenizer() 不会立即触发词典的加载,一旦有必要才开始加载词典构建前缀字典。如果你想手工初始 jieba,也可以手动初始化。

import jieba
jieba.initialize() # 手工初始化
jieba.set_dictionary('data/dict.txt.big') # 改变主词典的路径
  • 1
  • 2
  • 3

1.分词

jieba.cut(“String”, cut_all = Defalt False采用精确模式\True采用全模式, HMM = 是否采用隐式马尔可夫模型)
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all= True) # 全模式
print("Full Mode:"+"/".join(seg_list))
seg_list = jieba.cut("我来到北京清华大学", cut_all= False) # 精确模式
print("Accurte Mode:"+"/".join(seg_list)) 
seg_list = jieba.cut("我来到北京清华大学", cut_all= False, HMM= False) # 不用HMM
print("Accurate Mode with No Hiden Markov Model:"+"/".join(seg_list))
print(type(seg_list))
print(seg_list)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
Full Mode:我/来到/北京/清华/清华大学/华大/大学
Accurte Mode:我/来到/北京/清华大学
Accurate Mode with No Hiden Markov Model:我/来到/北京/清华大学
<class 'generator'>
<generator object Tokenizer.cut at 0x00000176126972A0>
  • 1
  • 2
  • 3
  • 4
  • 5
jieba.cut_for_search(“Sting to be segmented”, HMM = 是否采用隐式马尔可夫模型)
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
print(", ".join(seg_list)) # 搜索引擎模式
print(type(seg_list))
print(seg_list)
  • 1
  • 2
  • 3
  • 4
小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, ,, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造
<class 'generator'>
<generator object Tokenizer.cut_for_search at 0x00000176126972A0>
  • 1
  • 2
  • 3
jieba.lcut() jieba.lcut_for_search()返回list结构
seg_list = jieba.lcut("我来到北京清华大学") # 精确模式,返回list
print(type(seg_list))
print(seg_list)
print("\n")
seg_list = jieba.lcut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式,返回list00
print(type(seg_list))
print(seg_list)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
<class 'list'>
['我', '来到', '北京', '清华大学']
  • 1
  • 2

<class 'list'>
['小明', '硕士', '毕业', '于', '中国', '科学', '学院', '科学院', '中国科学院', '计算', '计算所', ',', '后', '在', '日本', '京都', '大学', '日本京都大学', '深造']
  • 1
  • 2

2.添加自定义词典

开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。虽然 jieba 有新词识别能力,但是自行添加新词可以保证更高的正确率。

  1. 词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。
  2. 词频省略时使用自动计算的能保证分出该词的词频
  3. file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。
jieba.load_userdict(file_name) 载入词典
动态修改词典
1. add_word(word, freq = None词频, tag = True词性)
2. del_word(word)
3. siuggest_freq(segment, tune= True) 可调节单个词语的词频,使其能(或不能)被分出来。
print("/".join(jieba.cut("如果放到post中将出错", HMM= False)))
jieba.suggest_freq(("中","将"), True)
print("/".join(jieba.cut("如果放到post中将出错", HMM= False)))
  • 1
  • 2
  • 3
如果/放到/post/中将/出错
如果/放到/post/中/将/出错
  • 1
  • 2
print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
jieba.suggest_freq('台中', True)
print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
  • 1
  • 2
  • 3
「/台/中/」/正确/应该/不会/被/切开
「/台中/」/正确/应该/不会/被/切开
  • 1
  • 2

3.关键字提取

基于IF-IDF算法的关键词抽取
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
  1. sentence 为待提取的文本
  2. topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
  3. withWeight 为是否一并返回关键词权重值,默认值为 False
  4. allowPOS 仅包括指定词性的词,默认值为空,即不筛选

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

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

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

基于TextRank算法的关键词抽取

jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=(‘ns’, ‘n’, ‘vn’, ‘v’)) 直接使用,接口相同,注意默认过滤词性。

jieba.analyse.TextRank() 新建自定义TextRank示例

4.词性标注

jieba.posseg.POSTokenizer(tokenizer=None) 新建自定义分词器,tokenizer 参数可指定内部使用的 jieba.Tokenizer 分词器。jieba.posseg.dt 为默认词性标注分词器。

import jieba.posseg as pseg
words = pseg.cut("我爱北京天安门")
for word, flag in words:
    print("%s %s" % (word, flag))
  • 1
  • 2
  • 3
  • 4
我 r
爱 v
北京 ns
天安门 ns
  • 1
  • 2
  • 3
  • 4

5.并行分词

将目标文本按行分隔后,把各行文本分配到多个 Python 进程并行分词,然后归并结果,从而获得分词速度的可观提升.

基于 python 自带的 multiprocessing 模块,目前暂不支持 Windows

6.Tokenize返回词语在原文的起止位置

输入参数只接受 unicode
jieba.tokenize(u"segment", mode= “default” or “search”, HMM=Ture)

result = jieba.tokenize(u"永和服装饰品有限公司") # 默认模式
for tk in result:
    print("word %s \t\t start: %d \t\t end:%d" % (tk[0], tk[1], tk[2]))
  • 1
  • 2
  • 3
word 永和 		 start: 0 		 end:2
word 服装 		 start: 2 		 end:4
word 饰品 		 start: 4 		 end:6
word 有限公司 		 start: 6 		 end:10
  • 1
  • 2
  • 3
  • 4
result = jieba.tokenize(u'永和服装饰品有限公司', mode='search') # 搜索模式
for tk in result:
    print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
  • 1
  • 2
  • 3
word 永和		 start: 0 		 end:2
word 服装		 start: 2 		 end:4
word 饰品		 start: 4 		 end:6
word 有限		 start: 6 		 end:8
word 公司		 start: 8 		 end:10
word 有限公司		 start: 6 		 end:10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

7.ChineseAnalyzer for Whoosh搜索引擎

8.命令行分词

python -m jieba [options] filename
  • 1
  • 常见问题列表

    链接

  • Reference


  1. fxsjy,jieba official document,github,2018.12 ↩︎

  2. Quant_By_Python,精确率(Precision、查准率)与召回率(Recall Rate、查全率),CSDN,2019.6 ↩︎

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/348466?site
推荐阅读
相关标签
  

闽ICP备14008679号