英文分词的第三方库NLTK不错,中文分词工具也有很多(盘古分词、Yaha分词、Jieba分词等)。但是从加载自定义字典、多线程、自动匹配新词等方面来看。

大jieba确实是中文分词中的战斗机

请随意观看表演

安装

  1. 使用pip包傻瓜安装:py -3 -m pip install jieba / pip install jiba(windows下推荐第一种,可以分别安装python2和3对应jieba)
  2. pypi下载地址

分词

3种模式

  1. 精确模式:试图将句子最精确地切开,适合文本分析
  2. 全模式:把句子中所有的可以成词的词语都扫描出来(速度快)
  3. 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词

实现方式

  1. 精确模式:jieba.cut(sen)
  2. 全模式:jieba.cut(sen,cut_all=True)
  3. 搜索引擎模式:jieba.cut_for_search(sen)
import jieba
sen = "我爱深圳大学"
sen_list = jieba.cut(sen)
sen_list_all = jieba.cut(sen,cut_all=True)
sen_list_search = jieba.cut_for_search(sen)
for i in sen_list:
print(i,end=" ")
print()
for i in sen_list_all:
print(i,end=" ")
print()
for i in sen_list_search:
print(i,end=" ")
print()

结果:附截图

自定义词典

创建方式

  • 后缀:txt
  • 格式:词语( 权重 词性 )
  • 注意事项:
    1. windows下txt不能用自带的编辑器,否则会乱码。可以用VSCODE,或者其他编辑器
    2. 可以只有词语
    3. 在没有权重的情况下,只有比默认词典长的词语才可以加载进去。附截图

加载字典

jieba.load_userdict(txtFile)

调整字典

添加词:jieba.add_word(word,freq=None,tag=None)

删除词:jieba.del_word(word)

import jieba
sen = "胶州市市长江大桥"
sen_list = jieba.cut(sen)
for i in sen_list:
print(i,end=" ")
print()
胶州市 市 长江大桥
jieba.add_word('江大桥',freq=20000)
sen_list = jieba.cut(sen)
for i in sen_list:
print(i,end=" ")
print()

结果附截图

改变主字典

延迟加载

之前发现,词典不是一次性加载的,说明它采用的是延迟加载。即:当遇到应用的时候才会加载。有点类似于python高级特性中的 yield (节省内存)

效果图如下:

  • 手动加载的方法:jieba.initialize()

关键词提取

jieba.analyse.extract_tags(sentence,topK=20):返回topK个TF/IDF权重最大的词语

import jieba.analyse
sen_ana = jieba.analyse.extract_tags(sen,3)
for i in sen_ana:
print(i)
江大桥
胶州市
市长

词性标注

jieba.posseg.cut(sen):返回的每个迭代对象有两个属性-> word 词语 + flag 词性

import jieba.posseg
words = jieba.posseg.cut(sen)
for word in words:
print(word.flag," ",word.word)
ns   胶州市
n 市长
x 江大桥

词语定位

jieba.tokenize(sen,mode):mode可以设置为search,开启搜索模式

index= jieba.tokenize(sen)
for i in index:
print(i[0],"from",i[1],"to",i[2])
胶州市 from 0 to 3
市长 from 3 to 5
江大桥 from 5 to 8

内部算法

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

参考文献

中文分词中的战斗机-jieba库的更多相关文章

  1. SCWS中文分词,向xdb词库添加新词

    SCWS是个不错的中文分词解决方案,词库也是hightman个人制作,总不免有些不尽如人意的地方.有些词语可能不会及时被收入词库中. 幸好SCWS提供了词库XDB导出导入词库的工具(phptool_f ...

  2. Hanlp在java中文分词中的使用介绍

    项目结构 该项目中,.jar和data文件夹和.properties需要从官网/github下载,data文件夹下载 项目配置 修改hanlp.properties: 1 #/Test/src/han ...

  3. 结巴(jieba)中文分词及其应用实践

    中文文本分类不像英文文本分类一样只需要将单词一个个分开就可以了,中文文本分类需要将文字组成的词语分出来构成一个个向量.所以,需要分词. 这里使用网上流行的开源分词工具结巴分词(jieba),它可以有效 ...

  4. 如何运用jieba库分词

    使用jieba库分词 一.什么是jieba库 1.jieba库概述 jieba是优秀的中文分词第三方库,中文文本需要通过分词获得单个词语. 2.jieba库的使用:(jieba库支持3种分词模式) 通 ...

  5. 运用jieba库分词

    代码: 统计出团队中文简介中词频 import jieba txt=open("C:\\Users\\Administrator\\Desktop\\介绍.txt","r ...

  6. NLP舞动之中文分词浅析(一)

    一.简介        针对现有中文分词在垂直领域应用时,存在准确率不高的问题,本文对其进行了简要分析,对中文分词面临的分词歧义及未登录词等难点进行了介绍,最后对当前中文分词实现的算法原理(基于词表. ...

  7. HMM(隐马尔科夫)用于中文分词

    隐马尔可夫模型(Hidden Markov Model,HMM)是用来描述一个含有隐含未知参数的马尔可夫过程. 本文阅读了2篇blog,理解其中的意思,附上自己的代码,共同学习. 一.理解隐马尔科夫 ...

  8. R语言中文分词包jiebaR

    R语言中文分词包jiebaR R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据 ...

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

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

随机推荐

  1. web开发与IC卡读卡器

    前段时间有个项目在客户端web下使用IC卡读卡器,试了很多种方案都觉得麻烦,最后在网上找了个现成的方案,采用了YW-605HA读卡器,厂家就不说了,免得说做广告.开发起来也挺简单. 他们将IC卡读卡器 ...

  2. java集合基础

    集合概念与作用 1现实生活中把很多事物凑在一起就是集合.java中的集合类:是一种工具,就像是容器,存储任意数量的有共同属性的对象. 2在类的内部,对数据进行组织: 简单而快速的搜索大数量的条目 有的 ...

  3. JavaScript 函数的定义-调用、注意事项

    函数定义 函数语句定义 function(a,b){ return a+b; } 表达式定义 var add = function(a,b){return a+b}; //函数表达式可以包含名称,这在 ...

  4. struts2 之 ThreadLocal 和 ActionContext

    1. ThreadLocal:该类提供了线程局部(thtead-local)变量.threadLocal是一个容器,该容器中存放的数据可以保证线程安全. 案例如: public class Threa ...

  5. Ajax 与 Comet

    Ajax技术的核心是XMLHttpRequest对象(简称XHR). XMLHttpRequest对象 在浏览器中创建XHR对象要像下面这样,使用XMLHttpRequest构造函数. var xhr ...

  6. 透视I/O多路复用

    透视I/O多路复用 我写的不是select这些函数的教学,需要了解的请自行Google或者去man,这些是帮助我理解函数的封装之下的道理. 需要回答的问题 I/O准备好了指什么?什么叫I/O已经可读/ ...

  7. FreeSWITCH 安装配置的 各种坑, 填坑

    个人安装环境: OS:CentOS6.7 64位 FreeSWITCH Ver:1.6.17 一. 编译出错 安装 之前, 最好 先安装 这几个东西(如果有, 请忽略): yasm (有nasm的话 ...

  8. 修改nagios密码和遇到的问题

    htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin 密码 密码 service httpd restart 由于本屌丢掉一个s使/ ...

  9. CSS的position/float/display

    一.position position属性取值:static(默认).relative.absolute.fixed.inherit. postision:static:始终处于文档流给予的位置.它可 ...

  10. python3.x中如何实现print不换行

    大家应该知道python中print之后是默认换行的, 那如何我们不想换行,且不想讲输出内容用一个print函数输出时,就需要改变print默认换行的属性, 方法如下: print('contents ...