python 中文分词工具


jieba

“结巴”中文分词:https://github.com/fxsjy/jieba
算法
1)基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG);
2)采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合;
3)对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法。

1、分词

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

import jieba

seg1 = jieba.cut("好好学学python,有用。", cut_all=True)
print('全模式:', ' '.join(seg1))
seg2 = jieba.cut("好好学学python,有用。", cut_all=False)
print("精确模式(也是默认模式):", ' '.join(seg2))
seg3 = jieba.cut_for_search("好好学学python,有用。")
print("搜索引擎模式:", ' '.join(seg3))
print("\n") seg_list1 = jieba.lcut("好好学学python,有用。", cut_all=True)
print(seg_list1)
seg_list2 = jieba.lcut("好好学学python,有用。", cut_all=False)
print(seg_list2)
seg_list_search = jieba.lcut_for_search("好好学学python,有用。")
print(seg_list_search)

输出:

全模式: 好好 好好学 好学 学学 python  有用
精确模式(也是默认模式): 好好 学学 python , 有用 。
搜索引擎模式: 好好 学学 python , 有用 。 ['好好', '好好学', '好学', '学学', 'python', '', '有用', '', '']
['好好', '学学', 'python', ',', '有用', '。']
['好好', '学学', 'python', ',', '有用', '。']

特别地:
jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语,或者用jieba.lcut 以及 jieba.lcut_for_search 直接返回 list

2、词性标注

import jieba.posseg as pseg

words = pseg.cut("好好学习,天天向上。")
for word, flag in words:
print('%s %s' % (word, flag))

输出:

好好学习 n
, x
天天向上 l
。 x

3、关键词抽取

基于 TF-IDF 算法的关键词抽取
语法:
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
sentence 为待提取的文本
topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
withWeight 为是否一并返回关键词权重值,默认值为 False
allowPOS 仅包括指定词性的词,默认值为空,即不筛选

import jieba.analyse

keyword = jieba.analyse.extract_tags('流云在天边,行囊在眼前,有一条通往太阳的路无边又无沿。')
print(keyword) keywords = jieba.analyse.extract_tags('流云在天边,行囊在眼前,有一条通往太阳的路无边又无沿。',
topK=5, withWeight=True)
print(keywords)

输出:

['流云', '行囊', '天边', '无边', '通往', '太阳', '眼前', '一条']
[('流云', 1.33032263925), ('行囊', 1.20652280124125), ('天边', 1.1546548197325), ('无边', 1.02799048121375), ('通往', 0.90122942182)]

基于 TextRank 算法的关键词抽取
语法:
jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=(‘ns’, ‘n’, ‘vn’, ‘v’)) 直接使用,接口相同,注意默认过滤词性。
论文:
Mihalcea R, Tarau P. TextRank: Bringing Order into Texts[J]. Emnlp, 2004:404-411.
基本思想:
将待抽取关键词的文本进行分词
以固定窗口大小(默认为5,通过span属性调整),词之间的共现关系,构建图
计算图中节点的PageRank,注意是无向带权图

import jieba.analyse

keyword = jieba.analyse.textrank('流云在天边,行囊在眼前,有一条通往太阳的路无边又无沿。')
print(keyword) keywords = jieba.analyse.textrank('流云在天边,行囊在眼前,有一条通往太阳的路无边又无沿。',
topK=30, withWeight=True)
print(keywords)

输出:

['行囊', '流云']
[('行囊', 1.0), ('流云', 0.9961264494011037)]

jieba_fast

使用cpython重写了jieba分词库中计算DAG和HMM中的vitrebi函数,速度得到大幅提升。
https://github.com/deepcs233/jieba_fast


python 中文分词工具的更多相关文章

  1. PyNLPIR python中文分词工具

    官网:https://pynlpir.readthedocs.io/en/latest/  github:https://github.com/tsroten/pynlpir          NLP ...

  2. python中文分词工具——结巴分词

    传送门: http://www.iteye.com/news/26184-jieba

  3. 中文分词工具探析(二):Jieba

    1. 前言 Jieba是由fxsjy大神开源的一款中文分词工具,一款属于工业界的分词工具--模型易用简单.代码清晰可读,推荐有志学习NLP或Python的读一下源码.与采用分词模型Bigram + H ...

  4. NLP(十三)中文分词工具的使用尝试

      本文将对三种中文分词工具进行使用尝试,这三种工具分别为哈工大的LTP,结巴分词以及北大的pkuseg.   首先我们先准备好环境,即需要安装三个模块:pyltp, jieba, pkuseg以及L ...

  5. 基于开源中文分词工具pkuseg-python,我用张小龙的3万字演讲做了测试

    做过搜索的同学都知道,分词的好坏直接决定了搜索的质量,在英文中分词比中文要简单,因为英文是一个个单词通过空格来划分每个词的,而中文都一个个句子,单独一个汉字没有任何意义,必须联系前后文字才能正确表达它 ...

  6. 中文分词工具简介与安装教程(jieba、nlpir、hanlp、pkuseg、foolnltk、snownlp、thulac)

    2.1 jieba 2.1.1 jieba简介 Jieba中文含义结巴,jieba库是目前做的最好的python分词组件.首先它的安装十分便捷,只需要使用pip安装:其次,它不需要另外下载其它的数据包 ...

  7. 中文分词工具——jieba

    汉字是智慧和想象力的宝库. --索尼公司创始人井深大 简介 在英语中,单词就是"词"的表达,一个句子是由空格来分隔的,而在汉语中,词以字为基本单位,但是一篇文章的表达是以词来划分的 ...

  8. 中文分词工具探析(一):ICTCLAS (NLPIR)

    1. 前言 ICTCLAS是张华平在2000年推出的中文分词系统,于2009年更名为NLPIR.ICTCLAS是中文分词界元老级工具了,作者开放出了free版本的源代码(1.0整理版本在此). 作者在 ...

  9. 开源中文分词工具探析(三):Ansj

    Ansj是由孙健(ansjsun)开源的一个中文分词器,为ICTLAS的Java版本,也采用了Bigram + HMM分词模型(可参考我之前写的文章):在Bigram分词的基础上,识别未登录词,以提高 ...

  10. 开源中文分词工具探析(四):THULAC

    THULAC是一款相当不错的中文分词工具,准确率高.分词速度蛮快的:并且在工程上做了很多优化,比如:用DAT存储训练特征(压缩训练模型),加入了标点符号的特征(提高分词准确率)等. 1. 前言 THU ...

随机推荐

  1. 使用TLS安全的访问Minio服务

    官方文档地址:http://docs.minio.org.cn/docs/master/how-to-secure-access-to-minio-server-with-tls 查看这篇文章的操作步 ...

  2. k8s中的ingress使用上层负载均衡进行设置访问

    注意:这种情况下需要有个前提条件,也就是ingress-nginx-controller安装后的service是NodePort或者hostNetwork模式,而不能是ClusterIP,因为负载均衡 ...

  3. Elasticsearch:Pinyin 分词器

    Elastic的Medcl提供了一种搜索Pinyin搜索的方法.拼音搜索在很多的应用场景中都有被用到.比如在百度搜索中,我们使用拼音就可以出现汉字: 对于我们中国人来说,拼音搜索也是非常直接的.那么在 ...

  4. KVM命令参数

    # virt-install --help usage: virt-install --name NAME --memory MB STORAGE INSTALL [options] 从指定安装源创建 ...

  5. Deployment控制器(pod)更新策略

    最小就绪时间: 配置时,用户可以使用Deplpoyment控制器的spec.minReadySeconds属性来控制应用升级的速度.新旧更替过程中,新创建的Pod对象一旦成功响应就绪探测即被视作可用, ...

  6. Jenkins和Gitlab CI/CD自动更新k8s中pod使用的镜像说明

    Jenkins 使用Jenkins的话,完成的工作主要有如下步骤: 1.从Gogs或Gitlab仓库上拉取代码 2.使用Maven编译代码,打包成jar文件 3.根据jar文件使用相对应的Docker ...

  7. 记录一次Bitbucket鉴权的坑

    目录 发生了什么 什么原因 如何解决 总结 发生了什么 今天首次在Fedora上使用git,因为没有小王八(TortoiseGit)帮助,其过程异常焦灼-- 反正经过一系列折腾,我在本地新建了一个项目 ...

  8. CPS攻击案例(一)——基于脉冲宽度调制PWM的无人机攻击

    ​  本文系原创,转载请说明出处 Please Subscribe Wechat Official Account:信安科研人,获取更多的原创安全资讯 原论文链接:sec22-dayanikli.pd ...

  9. uoj220【NOI2016】网格

    刚了几个小时啊,这tm要是noi我怕不是直接滚粗了.我判答案为1的情况试了几种做法,最后终于想到了一个靠谱的做法,然后细节巨多,调了好久,刚拿到97分时代码有6.2KB了,后来发现有些东西好像没啥用就 ...

  10. JUC(4)Callable和常用的辅助类

    1.Callable 1.可以有返回值 2.可以抛出异常 3.方法不同.run()/call() future Task 细节: 1.有缓存 2.结果可能需要等待,会阻塞 2.常用的辅助类 2.1 C ...