中文自然语言处理--jieba 中文分词

jieba 的分词算法
主要有以下三步:
1.基于统计词典,构造前缀词典,基于前缀词典对句子进行切分,得到所有切分可能,根据切分位置,构造一个有向无环图(DAG);
2.基于DAG图,采用动态规划计算最大概率路径(最有可能的分词结果),根据最大概率路径分词;
3.对于新词(词库中没有的词),采用有汉字成词能力的 HMM 模型进行切分。

import jieba
import jieba.posseg as psg
from collections import Counter

# 并行分词原理为文本按行分隔后,分配到多个 Python 进程并行分词,最后归并结果
# 开启并行分词模式,参数为并行进程数 。
# 注意:only supports posix system,并行分词暂不支持Windows且并行分词仅支持默认分词器 jieba.dt 和 jieba.posseg.dt
# jieba.enable_parallel(4)
# 关闭并行分词模式 。
# jieba.disable_parallel()

content = "现如今,机器学习和深度学习带动人工智能飞速的发展,并在图片处理、语音识别领域取得巨大成功。NLP还需继续努力"

# 1.精确分词:精确模式试图将句子最精确地切开,精确分词也是默认分词
# jieba.cut 方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;
# HMM 参数用来控制是否使用 HMM 模型
segs_1 = jieba.cut(content, cut_all=False)
print("segs_1:", segs_1)
print("/".join(segs_1))

# 2.全模式分词:把句子中所有的可能是词语的都扫描出来,速度非常快,但不能解决歧义。
segs_3 = jieba.cut(content, cut_all=True)
print("segs_3:", segs_3)
print("/".join(segs_3))

# 3.搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
# 适合用于搜索引擎构建倒排索引的分词,粒度比较细。
segs_4 = jieba.cut_for_search(content)
# jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 Generator
print("segs_4:", segs_4)
print("/".join(segs_4))

# jieba.lcut 对 cut 的结果做了封装,l 代表 list,即返回的结果是一个 list 集合
# 同样的,用 jieba.lcut_for_search 也直接返回 list 集合
segs_5 = jieba.lcut(content)
print(segs_5)
segs_6 = jieba.lcut_for_search(content)
print(segs_6)

# 获取词性
# jieba 可以很方便地获取中文词性,通过 jieba.posseg 模块实现词性标注
print([(x.word, x.flag) for x in psg.lcut(content)])

# 获取分词结果中词列表的 top n
top5 = Counter(segs_5).most_common(5)
print(top5)

# 自定义添加词和字典
# 默认情况下,使用默认分词,是识别不出这句话中的“铁甲网”这个新词,这里使用用户字典提高分词准确性。
txt = "铁甲网是中国最大的工程机械交易平台。王者荣耀是一款游戏。"
print(jieba.lcut(txt))
# 如果添加一个词到字典,看结果就不一样了
jieba.add_word("铁甲网")
print(jieba.lcut(txt))
# 但是,如果要添加很多个词,一个个添加效率就不够高了,这时候可以定义一个文件,
# 然后通过 load_userdict()函数,加载自定义词典
jieba.load_userdict('xxx\\user_dict.txt')
print(jieba.lcut(txt))

原文链接:
https://soyoger.blog.csdn.net/article/details/108729415

猜你喜欢

转载自blog.csdn.net/fgg1234567890/article/details/114242878