结巴分词

jieba 是python的第三方库,致力于做最好的中文分词组件

特点:

 支持三种分词模式:

   精确模式:试图将句子最精确地切开,适合文本分析;

   全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;

   搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

 支持繁体分词

 支持自定义词典

 MIT 授权协议

安装使用:

pip install jieba

import jieba

算法:

  基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)

  采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合

  对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法

主要功能



1、分词

函数接口:

注意:

待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8

def cut(self, sentence, cut_all=False, HMM=True):
    """
    这个函数的主要功能是切分sentence句子
    :param self:
    :param sentence: 待切分的句子
    :param cut_all: 切分模式【True:全模式切分,False:精确模式切分】
    :param HMM: 是否使用Hidden Markov Model 模型
    :return:返回切分结果,是一个迭代器generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode)
    """

def cut_for_search(self, sentence, HMM=True):
    """
    该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
    :param self:
    :param sentence:待切分的句子
    :param HMM:是否使用Hidden Markov Model 模型
    :return:返回切分结果,是一个迭代器generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode)
    """
def lcut(self, *args, **kwargs):
    """
    该方法和 cut方法的功能和用法完全一致,只是改方法返回的是一个列表

    """
    return list(self.cut(*args, **kwargs))

def lcut_for_search(self, *args, **kwargs):
    """
    该方法和 cut_for_search 方法的功能和用法完全一致,只是改方法返回的是一个列表
    """
    return list(self.cut_for_search(*args, **kwargs))

【使用案例】

import jieba
seg_list = jieba.cut(sentence="我来到北京清华大学",cut_all=True,HMM=True)
print(seg_list)
print("【全模式】","/".join(seg_list))#全模式

seg_list = jieba.cut(sentence="我来到北京清华大学",cut_all=False,HMM=True)
print("【精确模式】","/".join(seg_list)) #精确模式(默认)

seg_list = jieba.cut(sentence='他来到了网易杭研大厦')
print("【新词识别】",'/'.join(seg_list),' (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)')

seg_list = jieba.cut_for_search(sentence='小明硕士毕业于中国科学院计算所,后在日本京都大学深造',HMM=True)
print("【搜索引擎模式】",'/'.join(seg_list))

【输出】

【全模式】 我/来到/北京/清华/清华大学/华大/大学

【精确模式】 我/来到/北京/清华大学

【新词识别】 他/来到/了/网易/杭研/大厦  (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)

【搜索引擎模式】 小明/硕士/毕业/于/中国/科学/学院/科学院/中国科学院/计算/计算所/,/后/在/日本/京都/大学/日本京都大学/深造

  

  jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。

2. 添加自定义词典

载入词典

结巴之所有可以做到正确的切词,是因为自带有很强大的词库:(如下是自带词库位置)

自带词库如下:(自带35万词库)

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

虽然 jieba 有新词识别能力以及强大的词库,但是总有漏网之鱼,此时,开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词,自行添加新词可以保证更高的正确率;

猜你喜欢

转载自www.cnblogs.com/liubao-xiaoqin/p/8967477.html