NLTK基础教程学习笔记(四)

标识化处理:
机器所要理解的最小处理单位是单词(分词)。标识化处理,是将原生字符创分割成一系列有意义的分词。标识化就是将原生字符串分割成一系列有意义的分词。标识化处理的复杂性因具体NLP应用而异,目标语言本身的复杂性本身也会带来相关的变化。在英语中,可以通过正则表达式简单的单词来选取纯单词和数字,但在中文中会成为一个复杂的任务

from nltk.tokenize import word_tokenize
from nltk.tokenize import regexp_tokenize,wordpunct_tokenize,blankline_tokenize
s="Hi Everyone! hola gr8"
print(s.split())
print(word_tokenize(s))
print(regexp_tokenize(s,pattern='\w+'))
print(regexp_tokenize(s,pattern='\d+'))
print(wordpunct_tokenize(s))
print(blankline_tokenize(s))

结果:

['Hi', 'Everyone!', 'hola', 'gr8']
['Hi', 'Everyone', '!', 'hola', 'gr8']
['Hi', 'Everyone', 'hola', 'gr8']
['8']
['Hi', 'Everyone', '!', 'hola', 'gr8']
['Hi Everyone! hola gr8']

上面用到了各种标识器(tokenizer)
Python字符串类型方法split():是一个最基本的标识器,使用空白符来执行单词的分割,split()本身也可以被配置成为一些较为复杂的标识化处理。
word_tokensize()方法是一个通用的,强大的,面向对象的可面向对象所有类型预料库的标识化处理方法。
regex_tokensize()是一个位用户需求设计的,自定义程度更高的表示器,如用可以基于正则表达式的标识器分割出相同的字符串,用/w分割出单词和数字用/d对数字进行提取
词干提取:
词干提取(stemming)是一个修枝剪叶的过程,通过一些基本的规则,可以得到所有的分词。词干提取是一种较为粗糙的过程,希望用它来取得相关的分词的各种变化,如eat这个词会有像eating,eaten,eats等变化。在某些情况下不需要区别这些,通常会用词干提取的方法将这些变化归结为相同的词根。对于简单的方法我们可以用词干提取,对于较为复杂的NLP问题,我们必须改用词形还原(lemmatization):
下面是一个词干提取的例子:

from nltk.stem import PorterStemmer
from nltk.stem.lancaster import LancasterStemmer
from nltk.stem.snowball import  SnowballStemmer
pst=PorterStemmer()
lst=LancasterStemmer()
print(lst.stem("eating"))
print(pst.stem("shopping"))

结果:

eat
shop

一个拥有基本规则的词干提取器,在像移除-s/es、-ing或-ed这里事情上都可以达到70%的精确度。Poster1和lancaStemmer有更多的规则,精确度会更加高。
当多种词干提取算法介入时,精确度和性能上会有差异。
Snowball能处理荷兰语,英语,法语,德语,意大利语,葡萄牙语,罗马尼亚语和俄语等语言。
词形还原:
词形还原(lemmatization)涵盖了词根所有的文法和变化形式,还会利用上下文语境和词性来确定相关单词的变化,并运用不同的标准化规则,根据词性来获取相关的词根。

from nltk.stem import WordNetLemmatizer
wlem=WordNetLemmatizer()
print(wlem.lemmatize("ate"))

结果

ate

WordNetLemmatizer使用了wordnet,会针对某个单词去搜索wordnet这个语义字典,还用到了变形分析,以便直切词根并搜索到特殊词形。
停用词移除:
停用词移除(Stop word removal)简单的移除预料库中在所有文档中可能出现的单词,通常是冠词和代词。

from nltk.corpus import stopwords
stoplist=stopwords.words('english')
#print(stoplist)
text="This is just a test"
out=cleanwordlist=[word for word in text.split() if word not in stoplist]
print(out)

结果:

['This', 'test']

timg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值