中文分词中的战斗机

英文分词的第三方库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算法。

参考文献

时间: 2024-10-25 14:42:46

中文分词中的战斗机的相关文章

隐含马尔可夫模型HMM的中文分词器 入门-1

<pre name="code" class="sql">http://sighan.cs.uchicago.edu/bakeoff2005/ http://www.52nlp.cn/中文分词入门之资源 中文分词入门之资源 作为中文信息处理的"桥头堡",中文分词在国内的关注度似乎远远超过了自然语言处理的其他研究领域.在中文分词中,资源的重要性又不言而喻,最大匹配法等需要一个好的词表,而基于字标注的中文分词方法又需要人工加工好的分词语料

隐马尔可夫模型(HMM)中文分词

1. 马尔可夫模型 如果一个系统有n个有限状态$S=\{s_{1} , s_{2} ,\dots s_{n}\}$,随着时间推移,该系统将从某一状态转移到另一状态,$Q=\{q_{1},q_{2},\dots q_{n}\}$位一个随机变量序列,该序列中的变量取值为状态集S中的某个状态,其中$q_{t}$表示系统在时间t的状态.那么:系统在时间t处于状态$s_{j}$的概率取决于其在时间1,2, $\dots$  t-1的状态,该概率为: $$P(q_{t} = s_{j} | q_{t-1}

中文分词资源

在学习nlp自然语言处理的过程中,免不了要使用中文分词资源作为分词依据或前期调研.所以想研究中文分词,第一步需要解决的就是资源问题. 作为中文信息处理的壁垒,中文分词在国内的关注度似乎远远超过了自然语言处理的其他研究领域.在中文分词中,资源的重要性又不言而喻,最大匹配法(正向.逆向)等需要一个好的词表,而基于字标注的中文分词方法又需要人工加工好的分词语料库,这里大概总结出入门级别的资源文件出处. 在学习过程中“LDC上免费的中文信息处理资源”,其中包括一个有频率统计的词表,共计4.5W+条,就可

漫话中文分词

出处:http://www.matrix67.com/blog/archives/4212 漫话中文自动分词和语义识别(上):中文分词算法 记得第一次了解中文分词算法是在 Google 黑板报 上看到的,当初看到那个算法时我彻底被震撼住了,想不到一个看似不可能完成的任务竟然有如此神奇巧妙的算法.最近在詹卫东老师的<中文信息处理导论>课上再次学到中文分词算法,才知道这并不是中文分词算法研究的全部,前前后后还有很多故事可讲.在没有建立统计语言模型时,人们还在语言学的角度对自动分词进行研究,期间诞生

中文分词入门之字标注法4

http://www.52nlp.cn/%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8D%E5%85%A5%E9%97%A8%E4%B9%8B%E5%AD%97%E6%A0%87%E6%B3%A8%E6%B3%954 上一节主要介绍的是利用最大熵工具包来做字标注中文分词,这一节我们直奔主题,借用条件随机场工具“CRF++: Yet Another CRF toolkit”来完成字标注中文分词的全过程. 关于条件随机场(CRF)的背景知识,推荐参考阅读一些经典的文献:<条件

转:从头开始编写基于隐含马尔可夫模型HMM的中文分词器

http://blog.csdn.net/guixunlong/article/details/8925990 从头开始编写基于隐含马尔可夫模型HMM的中文分词器之一 - 资源篇 首先感谢52nlp的系列博文(http://www.52nlp.cn/),提供了自然语言处理的系列学习文章,让我学习到了如何实现一个基于隐含马尔可夫模型HMM的中文分词器. 在编写一个中文分词器前,第一步是需要找到一些基础的词典库等资源,用以训练模型参数,并进行后续的结果评测,这里直接转述52nlp介绍的"中文分词入门

中文分词算法综述

英文文本词与词之间以空格分隔,方便计算机识别,但是中文以字为单位,句子所有字连起来才能表达一个完整的意思.如英文"I am writing a blog",英文词与词之间有空格进行隔开,而对应的中文"我在写博客",所有的词连在一起,计算机能很容易的识别"blog"是一个单词,而很难知道"博"."客"是一个词,因此对中文文本序列进行切分的过程称为"分词".中文分词算法是自然语言处理的基础,

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

隐马尔可夫模型(Hidden Markov Model,HMM)是用来描述一个含有隐含未知参数的马尔可夫过程. 本文阅读了2篇blog,理解其中的意思,附上自己的代码,共同学习. 一.理解隐马尔科夫 1.1 举例理解 来源:< http://www.cnblogs.com/skyme/p/4651331.html > 假设我手里有三个不同的骰子.第一个骰子是我们平常见的骰子(称这个骰子为D6),6个面,每个面(1,2,3,4,5,6)出现的概率是1/6.第二个骰子是个四面体(称这个骰子为D4)

Sphinx中文分词在discuz 中的应用

Sphinx中文分词在discuz 中的应用. Sphinx-for-chinese是一款专注于中文搜索的全文检索软件,在sphinx的基础上添加了中文处理模块并优化了中文搜索效果.相比而言,以某某论坛几千万数据环境来看,比Coreseek封装的sphinx中文分词+mmseg3组合要好一点 1.准备环境 cd /var/tmp/ wget http://www.sphinx-search.com/downloads/sphinx-for-chinese-2.2.1-dev-r4311.tar.