天然语言处置惩罚(三)文本处置惩罚之分词专题

分享
源代码 2024-9-9 02:44:07 76 0 来自 中国
前次我们了解了文本处置惩罚的流程,已经了解了文本处置惩罚的大要表面。“光说不练假把式!”本日,我们就来现实演练一下文本处置惩罚。
1.png                                         分词(Tokenize)
分词就是将句子拆分成一个个具故意义的“小部件”。仿佛就是传送带上的一个个小物品。
                                        比方“Hello,everyone!”这个句子,颠末NLTK分词(还不了解NLTK的可以参考下小叮当深度学习:天然语言处置惩罚(一)布朗语料库),这个句子便以词为单元存储在了列表中(包罗标点符号)。
                                        在使用NLTK实行分词之前,我们须要先安装“punkt”部件。“punkt”包罗了许多预练习好的分词模型。假如没有安装“punkt”,我们在使用时体系将会报错,提示我们举行安装。
                                        我们实行“import nltk ”、“nltk.download('punkt')”安装“punkt”部件。等候运行完毕,即可。
5.png                                         详细代码如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'IT小叮当'
date: 2018 / 10 / 18
import nltk
nltk.download('punkt')
在确认“punkt”已安装之后,我们便可以快乐地使用NLTK举行分词了。可以看到,“Hello ,eveyone!”的分词结果为一个列表,句子中的每个词和标点符号都是列表的一个元素。
6.png                                         详细代码如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'IT小叮当'
date: 2018 / 10 / 18
import nltk
sentence = 'hello, everyone!'
tokens = nltk.word_tokenize(sentence)
print("分词后:")
print(tokens)
看到这儿,小搭档们大概就有疑问了。英文单词之间自带空格,当然就可以直接分词了,那我泱泱中原华五千年文明传承下来的汉语又该怎么举行分词呢?
                                        且不说沈腾的“红鲤鱼绿鲤鱼与驴”,光是断句就很不容易,一不鉴戒就大概明确成别的意思了。
                                                                                比方:”汽水不假如汁好喝。”别说盘算机了,有的小门生瞥见也会懵,到底该怎么断句?是“不如”还是“假如”?
                                        “我家门前的小河很惆怅”是河很不好渡过,还是拟人修辞?如许的例子不可胜数~
那么,盘算机该怎样应对中文分词呢?
我们以“本日/天气/不错/!"为例,来举行阐明。对于英文“what a nice weather today!”盘算机直接根据英文空格便可直接分词。
                                        对于中文,盘算机分词一样平常有两大类方法:(1)启发式(Heuristic);(2)深度学习、呆板学习、统计方法等,比方HMM(隐式马尔可夫)、CRF(条件随机场)等。

启发式(Heuristic):

简朴来说,就是你拿着一本当代汉语辞书,来对照你要处置惩罚的文本。对于”本日天气不错!",你将要判断“本日”、“本日天”、“本日天气”、“本日天气不”、“本日天气不错”等是否在字典里,假如在字典里就举行分词,比方“本日”在字典里,这句话就被分成“本日/天气不错”。之后,以同样的方法判断“天气不错”。末了便可以得到精确的分词“本日/天气/不错”。
                                       
深度学习:

另一种中文分词的方法就是深度学习,比方斯坦福大学的CoreNLP原生就支持中文分词。
                                        简朴来说,我们可以发现,中英文分词的重要区别就是“维度差别”。在天然语言处置惩罚角度来看,我们的每个汉字对应的就是英文里的每个字母。比方“word”和“千言万语”,在分词时,一个英文单词字母就相当于我们的一个汉字:w--千,o--言,r--万,d--语。
14.png                                         下面,我们就来看看常用的中文分词工具--Jieba
在python里jieba非常好用,我们直接import就行,当然假如你没安装jieba的话,可以参考下小叮当python:借用清华更新源,让你的pip飞起来!快速安装jieba(pip install jieba)
在jieba里我们直接使用cut即可分词。
15.png                                         jieba分词还可以根据需求设定分词的模式,比方“小明在塞上清华大学”,我们可以有“全模式”、“正确模式”、“搜刮引擎模式”。
(1)全模式:jieba分词将根据最大的组词大概性来举行分词。我们设定“cut_all=True”,可以看到“小明在塞上清华大学”在全模式下的分词结果为:
“小/明/在/塞上/上清/清华/清华大学/华大/大学”
在这里大概的组词方式“塞上”、“上清”、“清华”、“华大”、“大学”全部都被摆列出来。
(2)正确模式:默认情况(不设置“cut_all”)下就是正确模式(cut_all=False)。正确模式,将按最符合汉语风俗的断句来举行分词,通常是最正确的。比方“小明在塞上清华大学”在正确模式下的分词结果为:
“小明/在/塞上/清华大学”
(3)搜刮引擎模式:将摆列出一句话在搜刮引擎里的全部可搜关键字。比方"小明硕士结业于塞上小清华,后在波士顿大学深造"通过搜刮引擎模式后的分词结果为:
“小明/硕士/结业/于/塞上/小/清华/,/后/在/波士/大学/波士顿/波士顿大学/深造”
详细代码如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'IT小叮当'
date: 2018 / 10 / 30
import jieba
sentence1=jieba.cut("小明在塞上清华大学",cut_all=True)
sentence2=jieba.cut("小明在塞上清华大学",cut_all=False)
sentence3=jieba.cut("小明在塞上清华大学")
sentence4=jieba.cut_for_search("小明硕士结业于塞上小清华,后在波士顿大学深造")
print("全模式:")
print("/".join(sentence1))
print("---------------")
print("正确模式:")
print("/".join(sentence2))
print("---------------")
print("默认情况:")
print("/".join(sentence3))
print("---------------")
print("搜刮引擎模式:")
print("/".join(sentence4))
别的,由于Jieba分词的Viterbi算法,它还可以举行一些新词的辨认。比方,“小明来到了网易杭研大厦”,“杭研”是一栋大厦的名字,属于新词,但是jieba仍旧可以或许精确的分别为“小明/来到/了/网易/杭研/大厦”
                                       
交际网络上的文天职词

在交际网络上,一些七零八落、不合语法、不合正常逻辑的语法有许多:好比@或人,表情符号,URL , #话题符号等。
                                        我们以黄教主和baby某年的推特互动为例举行分析。
18.png                                         某年,黄教主在推特上艾特了baby,说道“RT @angelababy: love you baby! http://ah.love #168.com”
                                        假如我们对这句话直接分词,将会得到大量的含有特殊符号的“噪声”信息。
20.png                                         代码如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'IT小叮当'
date: 2018 / 10 / 31
from nltk.tokenize import word_tokenize
tweet = 'RT @angelababy: love you baby! http://ah.love #168cm'
print(word_tokenize(tweet))
为了去除这些噪声信息,高度还原句子本身所要表达的意思,我们可以使用正则化的方法来实现。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-12-4 16:33, Processed in 0.192978 second(s), 36 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表