学习使用Jieba1.Jieba2. 特点3.功能4.安装5.使用6.其他中文分词工具

1.Jieba

  • 相信大多数知道NLP的人都知道什么是Jieba,但对于像我这样的新手而言,也仅限于知道而已,并没有学习过它,使用过它,打算用几天的时间来记录自己学习、使用Jieba的过程。
  • jieba是一款开源的中文分词工具 github ,“结巴”中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentation module.

2. 特点

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

3.功能

  1. 分词
  2. 添加自定义词典
  3. 关键字提取
  4. 词性标注
  5. 并行分词
  6. Tokenize:返回词语在原文的起止位置
  7. ChineseAnalyzer for Whoosh 搜索引擎
  8. 命令行分词

4.安装

本机环境:

windos10 python3.6

* 全自动安装:`easy_install jieba` 或者 `pip install jieba` / `pip3 install jieba`
* 半自动安装:先下载 http://pypi.python.org/pypi/jieba/ ,解压后运行 `python setup.py install`
* 手动安装:将 jieba 目录放置于当前目录或者 site-packages 目录
* 通过 `import jieba` 来引用 

5.使用

1.问题描述

使用Jieba生成词云图

2.学习相关API

1.分词

  • jieba.cut 方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型
  • jieba.cut_for_search 方法接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细 待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8
  • jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用
  • jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
  • jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。
#! /usr/bin/python3
# -*- coding: utf-8 -*-

import jieba

def word_partition():
    '''
    分词
    '''
    seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
    print("Full Mode: " + "/ ".join(seg_list))  # 全模式

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

    seg_list = jieba.cut("我来到北京清华大学清华园")  # 默认是精确模式
    print(", ".join(seg_list))

    seg_list = jieba.cut("今天是个好日子", cut_all=False, HMM=True)  # 默认
    print(",".join(seg_list))

    seg_list = jieba.cut("今天是个好日子女", cut_all=True, HMM=True)
    print(",".join(seg_list))

    # 返回一个generator
    seg_list = jieba.cut("今天是个好日子女", cut_all=True, HMM=False)
    print(",".join(seg_list), type(seg_list))

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

    # 返回一个list
    seg_list = jieba.lcut("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")
    print(",".join(seg_list), type(seg_list))

    # 返回一个list
    seg_list = jieba.lcut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")
    print(",".join(seg_list), type(seg_list))

2.载入字典

  • 开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。虽然 jieba 有新词识别能力,但是自行添加新词可以保证更高的正确率
  • 用法: jieba.load_userdict(file_name) # file_name 为文件类对象或自定义词典的路径 词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。
  • 词频省略时使用自动计算的能保证分出该词的词频。

self_dict.txt

中二病 2 n
萝莉 2 n
正太 400 n
鬼畜 50 n
创新办 3 i
#! /usr/bin/python3
# -*- coding: utf-8 -*-

import jieba

def add_self_dict():
    '''
    添加自定义字典
    '''
    test_sentence=(
        "小明好高中二病了\n"
        "小红爱萝莉\n"
        "魔鬼畜生都走开\n"
        "大中午的正太阳在头顶\n"
        "李小福是创新办主任也是云计算方面的专家"
    )
    words = jieba.cut(test_sentence)
    print('/'.join(words))
    jieba.load_userdict("self_dict.txt")
    words = jieba.cut(test_sentence)
    print('/'.join(words))

    #调整
    jieba.add_word('石墨烯')
    jieba.add_word('凱特琳')
    jieba.del_word('中二病')

    test_sentence=(
        "小明好高中二病了\n"
        "例如我输入一个带“韩玉赏鉴”的标题,在自定义词库中也增加了此词为N类\n"
        "「台中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"
    )
    words=jieba.cut(test_sentence)
    print("/".join(words))
    
    #调节词频
    jieba.suggest_freq("台中",tune=True)
    words=jieba.cut("「台中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。")
    print("/".join(words))

3.提取关键字

基于 TF-IDF 算法的关键词抽取 基于 TextRank 算法的关键词抽取

def keyword_extract():
    '''
    提取关键字
    '''
    #基于 TF-IDF 算法的关键词抽取
    import sys
    from optparse import OptionParser
    USAGE = "usage:    python extract_tags.py [file name] -k [top k]"
    print("USAGE:",USAGE)
    parser = OptionParser(USAGE)
    parser.add_option("-k", dest="topK")
    opt, args = parser.parse_args()
    if len(args) < 1:
        print(USAGE)
        sys.exit(1)
    file_name = args[0]
    if opt.topK is None:
        topK = 10
    else:
        topK = int(opt.topK)
    content = open(file_name, 'rb').read()
    tags = jieba.analyse.extract_tags(content, topK=topK)
    print(",".join(tags))
    #基于 TextRank 算法的关键词抽取
    content = open(file_name, 'rb').read()
    tags=jieba.analyse.textrank(content,topK=topK)
    print(",".join(tags))

补充: TF-IDF TextRank optparse

3.源代码

数据

新华社北京2月10日电 (记者隋笑飞)中共中央政治局常委、中央书记处书记刘云山2月8日和9日,代表习近平总书记和党中央看望文化界知名人士,向他们致以诚挚问候,向广大文化工作者致以新春祝福。刘云山首先来到中国人民大学教授、著名马克思主义哲学专家陈先达家中,关切询问陈先达的生活和工作情况,对他为党的思想理论建设作出的贡献给予肯定,陈先达就深化马克思主义理论研究、加强哲学社会科学教材教学工作提出建议。在中国文联荣誉委员、著名书法家沈鹏家中,刘云山悉心了解书法艺术传承发展情况,希望老一辈书法家继续发挥传帮带作用、为弘扬中华优秀传统文化贡献力量。在看望中国舞协名誉主席、著名芭蕾舞表演艺术家白淑湘时,刘云山赞赏她为芭蕾舞民族化进行的探索,白淑湘建议加强青年艺术人才培养、加大对代表国家水准的艺术门类扶持力度。在看望原新闻出版署署长、著名出版家宋木文时,刘云山与他就出版业现状和前景进行交流,认真听取他关于提高出版质量、加强版权保护、重视社会效益等建议。在中国作协名誉委员、著名少数民族作家玛拉沁夫家中,刘云山赞扬玛拉沁夫为民族文学发展做出的成绩,并与他就加强少数民族文艺创作、繁荣中华民族文艺园地进行探讨。文化界知名人士对习近平总书记和党中央的亲切关怀表示感谢,对党的十八大以来党治国理政的新举措新局面高度赞誉,对党和政府重视弘扬优秀传统文化、提升国家文化软实力等部署深表赞同,一致认为文化工作者赶上了好时代,文化发展展示出更加美好的前景。刘云山指出,国运兴、文运兴,文化是民族生存和发展的重要力量,实现中华民族伟大复兴的中国梦需要文化的繁荣兴盛。推进“四个全面”战略布局,赋予当代文化工作者重要责任和使命。希望广大文化工作者深入学习贯彻习近平总书记在文艺工作座谈会上的重要讲话精神,增强文化自信,坚守文化追求,树立正确创作导向,用更多更好的文化作品讲好中国故事、反映时代进步。要强化精品意识,学习老一辈文化工作者的优良传统,努力在扎根生活、扎根群众中丰富生活积淀,在深化艺术实践、积极探索创新中提高文艺表现力,为推动文化繁荣发展、建设社会主义文化强国作出积极贡献。各级党委、政府和有关部门要重视文化建设、关心文化人才,加强扶持引导、多办实事好事,为文化工作者施展才华创造良好条件。中共中央政治局委员、中宣部部长刘奇葆陪同看望。中宣部、教育部、文化部、新闻出版广电总局、中国文联、中国作协有关负责同志参加看望活动。《 人民日报 》( 2015年02月11日 01 版)

背景

#! /usr/bin/python3
# -*- coding: utf-8 -*-


import os
import jieba
import jieba.analyse
from PIL import Image, ImageSequence
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator


def load_data(file_path):
    '''
    输入文件路径,返回文件内容
    '''
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()
    except Exception as e:
        print("something wrong in load_data()")
    return content


def load_image(file_path):
    image = Image.open(file_path)
    graph = np.array(image)
    return graph


def generate_wordcloud(content, graph):
    result = jieba.analyse.textrank(content, topK=50, withWeight=True)
    keywords = dict()
    for i in result:
        keywords[i[0]] = random.randint(1, 10)
    wc = WordCloud(font_path='C:/Windows/Fonts/simhei.ttf',
                   background_color='White', max_words=50, mask=graph)
    wc.generate_from_frequencies(keywords)
    image_color = ImageColorGenerator(graph)
    plt.imshow(wc)
    plt.imshow(wc.recolor(color_func=image_color))
    plt.axis("off")
    plt.show()


if __name__ == '__main__':
    data_file = input('Please enter a data file path:')
    content = load_data(data_file)
    image_file = input('Please enter a image file path:')
    graph = load_image(image_file)

    generate_wordcloud(content, graph)

4.结果

6.其他中文分词工具

  1. LTP
  2. NLPIR
  3. THULAC
  4. SnowNLP
  5. Hanlp
  6. Stanfordnlp
  7. NLPIR

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黄成甲

AI不是魔法:人工智能的能与不能

如果把AI技术分为「前端的交互技术」和「后端的人工智能技术」。前端的交互技术包括语音识别、图像识别和自然语言处理;后端的人工智能技术就是人工智能的核心算法,包括...

19130
来自专栏LhWorld哥陪你聊算法

【自然语言处理篇】--Chatterbot聊天机器人

ChatterBot是一个基于机器学习的聊天机器人引擎,构建在python上,主要特点是可以自可以从已有的对话中进行学(jiyi)习(pipei)。

1.1K50
来自专栏机器学习和数学

自然语言处理 | 使用Spacy 进行自然语言处理

Spacy的github地址:https://github.com/explosion/spaCy

37520
来自专栏AI星球

吾爱NLP(5)—词向量技术-从word2vec到ELMo

"词和句子的嵌入已成为所有基于深度学习的自然语言处理(NLP)系统的重要组成部分,它们在固定长度的稠密向量中编码单词和句子,以大幅度提高神经网络处理文本数据的能...

81770
来自专栏AI星球

如何快速入门成为厉害的数据分析师,一份完整书单

“一切都被记录,一切都被分析”就了一个信息爆炸的时代,人类过去两年产生的数据占据了整个人类文明中所产生的数据的90%。而在这些无限丰富的数据中,蕴藏着巨大的价值...

41840
来自专栏AI星球

[转载]如何在NLP领域第一次做成一件事

自己也写过一篇关于NLP研究领域的个人粗浅的理解与入门学习建议----吾爱NLP(3)—我对NLP的理解与学习建议,今日偶然发现了微软亚研大佬的这篇文章,不仅介...

22950
来自专栏黄成甲

全方位解读人工智能

人工智能技术旨在根据数据和分析赋予计算机做出类似人类思维方式与判断的能力。该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等等。人工智能的目标...

30450
来自专栏java一日一条

入职3年薪资还是初级水平,这波到底有多亏??

最近,有一个有趣的新闻,某著名 IT 外包公司在北京等一线城已经不招任何月薪 ¥10K 以下的程序员,因为发现招来没法用,代码还没有高级工程师的生成器写得好,因...

40910
来自专栏AI星球

吾爱NLP(3)—我对NLP的理解与学习建议

简单来说,NLP = Nature Language Process = 自然语言处理 ≈ 语言信息(文本/语音)+机器学习 。

31620
来自专栏AI星球

吾爱NLP(1)--我与自然语言处理

文字只是信息的载体,而非信息本身,那么不用文字,而用其它的载体(比如word2vec形式的词向量)是否一样可以储存同样意义的信息呢?这个答案是肯定的,这也是现在...

31520

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励