python自然语言处理(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangxingfan316/article/details/79771716

1词性标注

简单的理解就是对词性(POS)进行标注,但在不同的领域,词性可能是不同的,Penn Treebank pos标记库:https://blog.csdn.net/u010099495/article/details/46776617
其中程序需要安装两个依赖包

nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')

如下运行结果,我们知道WP:Wh-代词,VBP:Present 动词,PRP:人称代词,VBG:动词的动名词用法。

import nltk
from nltk import word_tokenize
s = 'what are you fucking doing ?'
nltk.pos_tag(word_tokenize(s))
#Out[11]: 
[('what', 'WP'),
 ('are', 'VBP'),
 ('you', 'PRP'),
 ('fucking', 'VBG'),
 ('doing', 'VBG'),
 ('?', '.')]

实际应用中可能会用到找出句子中所有的同词性词,比如在s中找出所有的动名词用法。

tagged = nltk.pos_tag(word_tokenize(s))
allnoun = [word for word,pos in tagged if pos in  ['VBG']]
allnoun
#Out[16]: ['fucking', 'doing']

基于brown语料库defaulttagger函数评估预测的准确率

from nltk.corpus import brown
brown_tagged_sents = brown.tagged_sents(categories='news')
default_tagger = nltk.DefaultTagger('NN')
default_tagger.evaluate(brown_tagged_sents)
#Out[23]: 0.13089484257215028

2命名实体识别(NER)

除了POS之外,找出文本中的实体项也是标签化问题之一,NER一般由实体名,地址,位置组织构成,一般利用上下文语境和其他相关特性来标签化这些命名实体,NLTK库中的NER标注主要有两种方式,一种是预先训练好的NER模型,我们只要读取测试数据的得分即可,另一种方式是建立一个机器学习基本模型。NLTK提供了ne_chunk()方法和封装了stanfordNER标注器的命名实体识别系统。
NLTK库提供的命名实体提取方法是ne_chunk(),这种方法需要先进行文本的预处理:首先进行标识化处理,再进行语句块分解和词性标注的处理顺序,之后才能进行命名实体的标注。

from nltk import ne_chunk
sent = 'Leo is studing at Stanford University in california'
ne_chunk(nltk.pos_tag(word_tokenize(sent)),binary=False)
#Out[20]: Tree('S', [Tree('GPE', [('Leo', 'NNP')]), ('is', 'VBZ'), ('studing', 'VBG'), ('at', 'IN'), Tree('ORGANIZATION', [('Stanford', 'NNP'), ('University', 'NNP')]), ('in', 'IN'), ('california', 'NN')])

如上,ne_chunking方法主要用于识别相关姓名,地点和组织。
NLTK库也封装了StanfordNER标注器,其具有更高的准确性。
需要下载stanford预料库https://nlp.stanford.edu/software/tagger.shtml#History

猜你喜欢

转载自blog.csdn.net/wangxingfan316/article/details/79771716