分词工具包了解及使用实验报告

实验目的:

了解分词包并进行使用

实验要求:

调查现有的分词工具包,并选择两种使用进行分词效果的比较

实验工具:

Python3.6.5;thulac;jieba;wordcloud

实验内容及过程:

现有的分词工具包有很多,在此主要选择了中文分词工具包进行调查。即便如此,常见的开源中文分词工具包也有很多,以下列出了在Bakeoff国际中文处理比赛中比较优秀的分词工具包:

perminusminus   

Stanford 汉语分词工具(Bakeoff-2两项第一)

哈工大语言云(LTP -cloud)

ICTCLAS——(Bakeoff -1两项第一)

Ansj(ICTCLAS的java实现)

庖丁解牛分词

盘古分词    

IKAnalyzer

imdict-chinese-analyzer

mmseg4j

FudanNLP(复旦大学)

Jcseg

SCWS

Friso

HTTPCWS

libmmseg

OpenCLAS

CRF++ (Bakeoff-3四项第一)

除此之外,还有很优秀的jieba、SnowNLP、thulac(清华大学自然语言处理与社会人文计算实验室)等分词工具包。我选取了4种进行详细了解。

Thulac:

THULAC是由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。功能简单,处理速度快,但仅支持处理UTF8编码中文文本;提供Java、c++、Python版本,具有以下特点:

Thulac利用的是该实验室集成的目前世界上规模最大的人工分词和词性标注中文语料库(约含5800万字)训练而成,模型标注能力强大。

thulac的分词准确率高。该工具包在标准数据集Chinese Treebank(CTB5)上分词的F1值可达97.3%,词性标注的F1值可达到92.9%,与该数据集上最好方法效果相当。

它处理速度较快。同时进行分词和词性标注速度为300KB/s,每秒可处理约15万字。只进行分词速度可达到1.3MB/s。

编译和安装简单,在Python环境下,调用API接口就可以方便使用。

jieba:

jieba 基于Python的中文分词工具,使用简单,功能强大

支持三种分词模式:

精确模式,试图将句子最精确地切开,适合文本分析;

全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;

搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。 支持繁体分词

并且支持自定义词典 

算法:

基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)

采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合

对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法 

主要功能:

jieba.cut;jieba.cut_for_search;jieba.Tokenizer(dictionary=DEFAULT_DICT)(新建自定义分词器,可用于同时使用不同词典);词性标注;载入词典;调整词典;基于 TF-IDF 算法的关键词抽取;并行分词。

哈工大语言云(LTP -cloud):

语言云(语言技术平台云 LTP-Cloud)是由哈工大社会计算与信息检索研究中心研发的云端自然语言处理服务平台。 后端依托于语言技术平台,语言云为用户提供了包括分词、词性标注、依存句法分析、命名实体识别、语义角色标注在内的丰富高效的自然语言处理服务。

作为基于云端的服务,语言云具有如下一些优势:

免安装:用户只需要下载语言云客户端源代码,编译执行后即可获得分析结果,无需调用静态库或下载模型文件。

省硬件:语言云客户端几乎可以运行于任何硬件配置的计算机上,用户不需要购买高性能的机器,即可快捷的获得分析结果。

跨平台:语言云客户端几乎可以运行于任何操作系统之上,无论是Windows、Linux各个发行版或者Mac OS。

跨编程语言:语言云已经提供了包括C++,Java,C#,Python,Ruby在内的客户端

IKAnalyzer

IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IKAnalyzer3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。

语言和平台: 基于java 语言开发,最初它是以开源项目Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IKAnalyzer 3.0 则发展为面向 Java 的公用分词组件,独立于 Lucene 项目,同时提供了对 Lucene 的默认优化实现。

算法:采用了特有的“正向迭代最细粒度切分算法” 。采用了多子处理器分析模式,支持:英文字母( IP 地址、Email、URL )、数字(日期、常用中文数量词、罗马数字、科学计数法),中文词汇(姓名、地名处理)等分词处理。优化的词典存储,更小的内存占用。支持用户词典扩展定义。针对 Lucene 全文检索优化的查询分析器 IKQueryParser ;采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高 Lucene 检索的命中率。

IKAnalyzer基于lucene2.0版本API开发,实现了以词典分词为基础的正反向全切分算法,是LuceneAnalyzer接口的实现。该算法适合与互联网用户的搜索习惯和企业知识库检索,用户可以用句子中涵盖的中文词汇搜索,如用"人民"搜索含"人民币"的文章,这是大部分用户的搜索思维;不适合用于知识挖掘和网络爬虫技术,全切分法容易造成知识歧义,因为在语义学上"人民"和"人民币"是完全搭不上关系的。



我选用了Thulac和jieba来试用:

先用thulac和jieba进行了简单的分词处理,并进行对比:

代码和结果如下:


用在“在北京大学生活区喝进口红酒”作比较

发现thulac将红和酒分了出来,而jieba没有。之后又使用了一个更为复杂的语料尝试:

用较为复杂的语料进行比较

比较之后发现thulac并不像文档里吹的那么准确啊,jieba的分词效果似乎要更好些。

然后我着重使用了jieba分词工具包。

发现jieba的新词识别功能很nice:

新词识别

原本没有“杭研”、“蓝瘦香菇”,但是也被Viterbi算法识别出来了。

尝试了一下搜索引擎模式:

搜索引擎模式

词性标注:


词性标注

同时尝试了添加自定义词典功能,发现分词准确性明显上升。


自定义词典前
自定义词典后

并行分词和关键词提取未进行尝试。


此外尝试了

NLP IR的分词功能,情感分析等功能,很简单就不贴图了,看起来很有趣。

使用wordcloud生成词云,直接使用 pip install wordcloud 就可以安装成功了,但是在网上搜教程时发现有些人在安装时,总是报错。这时要注意可能是下载的文件与python的版本不一样,要查询到正确的版本,方法:在shell中输入import pip; print(pip.pep425tags.get_supported());注意库的依赖。

然后就可以用Wordcloud来生成词云了:

for line in fin.readlines():

line = line.strip('\n')

text += ' '.join(jieba.cut(line))

text += ' '

fout = open('text.txt','wb')

pickle.dump(text,fout)

fout.close()

fr=open('text.txt','rb')

text=pickle.load(fr)

print("加载成功")

backgroud_Image=plt.imread('alice.jpg')

print('加载图片成功!')

'''设置词云样式'''

wc=WordCloud(

background_color='white',

mask=backgroud_Image,

font_path='C:\Windows\Fonts\STZHONGS.TTF', #若是有中文的话,这句代码必须添加,不然会出现方框,不出现汉字

max_words=2000,

stopwords=STOPWORDS,

max_font_size=150,

random_state=30

)

wc.generate_from_text(text)

print('开始加载文本')

img_colors=ImageColorGenerator(backgroud_Image)

wc.recolor(color_func=img_colors)

plt.imshow(wc)

plt.axis('off')

plt.show()

print('display success!')


实验总结:

jieba分词真的挺好用的,而且其针对的搜索引擎模式可以很好地服务于爬虫。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 常用概念: 自然语言处理(NLP) 数据挖掘 推荐算法 用户画像 知识图谱 信息检索 文本分类 常用技术: 词级别...
    御风之星阅读 9,148评论 1 25
  • 转自 进击的Coder 公众号 原理 中文分词,即 Chinese Word Segmentation,即将一个汉...
    Epiphron阅读 11,542评论 2 56
  • 1)ICTCLAS 最早的中文开源分词项目之一,由中科院计算所的张华平、刘群所开发,采用C/C++编写,算法基于《...
    MobotStone阅读 5,678评论 1 15
  • 第一部分 我们为何有情绪? 在大量的书籍之中,情绪是被当做怪兽来处理的,需要时刻控制。这一点我时常感觉奇怪,既然情...
    Aero小白阅读 1,018评论 9 2
  • 1. 我倒是很小就知道“银行”的,因为妈妈是食品公司的会计,每天都要和银行打交道。 小时候,也曾闹过笑话,以为只要...
    文晓玲阅读 261评论 10 7