美文网首页小资料工程师乐园
从零开始学自然语言处理(一)—— jieba 分词

从零开始学自然语言处理(一)—— jieba 分词

作者: 数据科学杂谈 | 来源:发表于2019-11-28 10:35 被阅读0次

    作者:Allen
    欢迎关注我们的公众号:数据科学杂谈

    今天,我们正式开始《从零开始学自然语言处理》系列文章的更新。内容会涉及自然语言处理的各个方面知识内容和具体操作:包括但不仅限于词法分析,句法分析,语义分析,文本聚类,文本分类,情感分析,文本摘要生成,主题模型,词嵌入,文本语义相似度,自然语言推理,机器翻译,语言模型,信息抽取,关系预测,对话,指代消解等等。 从最基础的内容开始讲起,欢迎持续关注学习。
    (温馨提示:文章中代码部分左右滑动可查看全部)针对中文的自然语言处理,我们需要先将段落和句子切分为词语,这是最基础的一步操作,分词属于词法分析的基础部分。本文聊聊 jieba 这个工具包。jieba 是一款优秀的中文分词工具。如何安装 jieba 呢?我们可以通过 Python 的 pip 直接安装:

    pip install jieba
    

    jieba 采用的算法为:

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

    jieba 有三种分词模式:

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

    我们接下来开始具体操作首先我们使用全模式进行分词:

    import jieba
    seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
    print("Full Mode: " + "/ ".join(seg_list))  # 全模式
    
    结果为: image

    使用精确模式(默认的也是精确模式,即去掉cut_all参数也是精确模式):

    seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
    print("Default Mode: " + "/ ".join(seg_list))  # 精确模式
    
    image

    使用搜索引擎模式:

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

    但是当我们遇到一些新词的时候,jieba 可能并不能正确分词,例如我们在对以下句子进行分词时:

    seg_list = jieba.cut("新研发的产品名为一网搜索。", cut_all=False)
    print("Default Mode: " + "/ ".join(seg_list))  # 精确模式
    
    image

    那如何解决这个问题呢?
    我们只需要创建一个自定义词典文件,文件格式为 txt 词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。词频省略时使用自动计算的能保证分出该词的词频。例如,我在本地创建了一个名为 userdict.txt 的文件

    image 然后将 “一网搜索” 加入自定义词典,后面的 5 表示词的词频(词频越高,对该词分词的准确度和优先级越高),然后保存。 image

    用法:jieba.load_userdict(file_name)
    file_name 为文件类对象或自定义词典的路径然后使用如下代码即可完成正确分词:

    jieba.load_userdict(r'E:/jieba/userdict.txt') 
    seg_list = jieba.cut("新研发的产品名为一网搜索。", cut_all=False)
    print("Default Mode: " + "/ ".join(seg_list))  # 精确模式
    
    image

    想对 jieba 分词有更深入的了解可以传送到 jieba 的 github:https://github.com/fxsjy/jieba《从零开始学自然语言处理》系列文章有兴趣的话,欢迎持续关注学习。历史文章推荐阅读:Python快速安装库的靠谱办法
    欢迎关注我们的公众号:数据科学杂谈 ,每天分享原创干货文章!

    相关文章

      网友评论

        本文标题:从零开始学自然语言处理(一)—— jieba 分词

        本文链接:https://www.haomeiwen.com/subject/lnvvwctx.html