jieba中文分词

粗略来讲,jieba支持精确模式、全模式、搜索引擎模式、paddle模式,共4种模式。学习jieba 最好的参考资料是readme文件,在官方readme中除了以上4种模式还详细介绍了词性、关键词提取、修改词频suggest_freq、命令行分词、动态修改词典add_word等等方法

https://github.com/fxsjy/jieba

import jieba

string = '中国上海是一座美丽的国际性大都市'

# ######## 1、jieba.cut 返回迭代器,有全模式和精确模式

"""

def cut(self, sentence, cut_all=False, HMM=True, use_paddle=False)
    The main function that segments an entire sentence that contains
        Chinese characters into separated words.
    Parameter:
        - sentence: The str(unicode) to be segmented.
        - cut_all: Model type. True for full pattern, False for accurate pattern.默认False精确模式
        - HMM: Whether to use the Hidden Markov Model.对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法,使一些未出现的词能够正确拆分,也就是新词发现功能
        - use_paddle:paddle模式,双向GRU模型进行序列标注

"""

# 全模式,返回会有重叠
seg_list = jieba.cut(string, cut_all=True)
# print(seg_list)  # 返回迭代器 
print("jieba.cut 全模式: " + "/ ".join(seg_list))  # 中国/ 上海/ 是/ 一座/ 美丽/ 的/ 国际/ 国际性/ 大都/ 大都市/ 都市


# 精确模式
seg_list = jieba.cut(string, cut_all=False)
print("jieba.cut 精确模式: " + "/ ".join(seg_list))  # 中国/ 上海/ 是/ 一座/ 美丽/ 的/ 国际性/ 大都市


# ######## 2、jieba.lcut 返回列表,就是对cut的结果再封装
"""
def lcut(self, *args, **kwargs):
    return list(self.cut(*args, **kwargs))
"""
seg_list = jieba.lcut(string)
print("jieba.lcut : ", seg_list)   # ['中国', '上海', '是', '一座', '美丽', '的', '国际性', '大都市']


# ######## 3、jieba.cut_for_search 返回迭代器,搜索引擎模式

"""
def cut_for_search(self, sentence, HMM=True):
    Finer segmentation for search engines.
"""

# 搜索引擎模式,对精确模式再拆分,最大子词在最后
seg_list = jieba.cut_for_search(string)
# print(seg_list)  # 返回迭代器 
print("jieba.cut_for_search 搜索引擎模式: " + "/ ".join(seg_list))  # 中国/ 上海/ 是/ 一座/ 美丽/ 的/ 国际/ 国际性/ 大都/ 大都市/ 都市

# ######## 4、load_userdict 添加自定义词典
# 用POSTokenizer返回词性
from jieba.posseg import POSTokenizer
string2 = '小蘑菇是一本我很喜欢的小说'
exp_jieba = POSTokenizer(tokenizer=None)
word_cut = exp_jieba.lcut(string2)# [pair('小', 'a'), pair('蘑菇', 'n'), pair('是', 'v'), pair('一本', 'm'), pair('我', 'r'), pair('很', 'd'), pair('喜欢', 'v'), pair('的', 'uj'), pair('小说', 'n')]
print(word_cut)

exp_jieba.load_userdict('./tmp/aaa')
"""
aaa 的内容如下,格式为:词语、词频(可省略)、词性(可省略)
小蘑菇 1000 book
莉莉丝 1000 name
"""
word_cut = exp_jieba.lcut(string2)
print(word_cut)# [pair('小蘑菇', 'book'), pair('是', 'v'), pair('一本', 'm'), pair('我', 'r'), pair('很', 'd'), pair('喜欢', 'v'), pair('的', 'uj'), pair('小说', 'n')]


# 直接用jieba加载自定义词典
seg_list = jieba.lcut(string2)
print("jieba.lcut : ", seg_list)  # ['小', '蘑菇', '是', '一本', '我', '很', '喜欢', '的', '小说']

jieba.load_userdict('./tmp/aaa')
seg_list = jieba.lcut(string2)
print("jieba.lcut load_userdict : ", seg_list)  # ['小蘑菇', '是', '一本', '我', '很', '喜欢', '的', '小说']

# ######## 5、分词,词位置查询
res = jieba.tokenize(string2)
for i in res:
    print(i)
"""
('小蘑菇', 0, 3)
('是', 3, 4)
('一本', 4, 6)
('我', 6, 7)
('很', 7, 8)
('喜欢', 8, 10)
('的', 10, 11)
('小说', 11, 13)
"""


你可能感兴趣的:(ML,DL,中文分词,python,自然语言处理)