当前位置:   article > 正文

精通Python自然语言处理 4 :词性标注--单词识别_python 识别动词的包

python 识别动词的包

   词性标注被用于信息检索、机器翻译、NER、语言分析等

1、词性标注简介

   一个对句中的每个标识符分配词类(如名词、动词、形容词等)标记的过程。在nltk.tag包中并被TaggerIbase类所继承。

  1. >>> text1 = nltk.word_tokenize("It is a pleasnat day today")
  2. >>> nltk.pos_tag(text1)
  3. [('It', 'PRP'), ('is', 'VBZ'), ('a', 'DT'), ('pleasnat', 'JJ'), ('day', 'NN'), ('today', 'NN')]
Penn Treebank的标记列表 https://www.ling.upenn.edu/courses/Fall_2003/ling001/penn_treebank_pos.html
>>> nltk.help.upenn_tagset('VB.*')

在NLTK中,已标注的标识符呈现为一个由标识符及其标记组成的元组。

  1. >>> taggedword = nltk.tag.str2tuple('bear/NN') # 标识符及其标记组成的元组
  2. >>> taggedword
  3. ('bear', 'NN')
  4. >>> taggedtok = ('bear', 'NN') # 单词及其词性标记
  5. >>> nltk.tag.util.tuple2str(taggedtok)
  6. 'bear/NN'
    默认标识:DefaultTagger类
2、创建词性标注语料库

   一个语料库可以认为是文档的集合。一个语料库是多个语料库的集合。

  1. >>> from nltk.corpus import words
  2. >>> words.fileids()
  3. [u'en', u'en-basic']
  4. >>> len(words.words('en'))
  5. 235886
3、选择一种机器学习算法

    词性标注也被称为词义消歧或语法标注

    在训练词性分类器时,会生成一个特征集。大体组成如下:

  • 当前单词的信息
  • 上一个单词或前缀的信息
  • 下一个单词或后缀的信息

     在NLTK中,FastBrillTagger类是基于一元语法的。它使用一个包含已知单词及其词性标记信息的字典。


4、涉及n-gram的统计建模

    一元语法意味着一个独立的单词,在一元语法标注器中,单个的标识符用于查找特定的词性标记。

    可以通过在初始化标注器时提供一个句子的列表来执行UnigramTagger的训练

  1. >>> from nltk.tag import UnigramTagger
  2. >>> from nltk.corpus import treebank
  3. >>> training = treebank.tagged_sents()[:7000] # 使用前7000个句子进行训练
  4. >>> unitagger = UnigramTagger(training)
  5. >>> treebank.sents()[0]
  6. [u'Pierre', u'Vinken', u',', u'61', u'years', u'old', u',', u'will', u'join', u'the', u'board', u'as', u'a', u'nonexecutive', u'director', u'Nov.', u'29', u'.']
  7. >>> unitagger.tag(treebank.sents()[0])
  8. [(u'Pierre', u'NNP'), (u'Vinken', u'NNP'), (u',', u','), (u'61', u'CD'), (u'years', u'NNS'), (u'old', u'JJ'), (u',', u','), (u'will', u'MD'), (u'join', u'VB'), (u'the', u'DT'), (u'board', u'NN'), (u'as', u'IN'), (u'a', u'DT'), (u'nonexecutive', u'JJ'), (u'director', u'NN'), (u'Nov.', u'NNP'), (u'29', u'CD'), (u'.', u'.')]

要评估UnigramTagger,下面用于计算其准确性的代码:准确率为96%

  1. >>> testing = treebank.tagged_sents()[2000:]
  2. >>> unitagger.evaluate(testing)
  3. 0.9634419196584355 --> 96%
5、使用词性标注语料库开发分块器

    分块是一个可用于执行实体识别的过程。它用于分割和标记居中的多个标识符序列

    首先定义分块语法,包含了有关如何进行分块的规则。如下名词短语分块:

  1. >>> sent = [("A","DT"),("wise","JJ"),("small","JJ"),("girl","NN"),("of","IN"),("village","NN"),("became","VBD"),("leader","NN")]
  2. >>> grammar = "NP: {<DT>?<JJ>*<NN><IN>?<NN>*}"
  3. >>> find = nltk.RegexpParser(grammar)
  4. >>> res = find.parse(sent)
  5. >>> print(res)
  6. (S
  7. (NP A/DT wise/JJ small/JJ girl/NN of/IN village/NN)
  8. became/VBD
  9. (NP leader/NN))

生成解析树:   res.draw()


分块是语块的一部分被消除的过程,既可以使用整个语块,也可以使用语块中间的一部分并删除剩余的部分,或者也可以使用语块从开始或结尾截取的一部分并删除剩余的部分。


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/355513
推荐阅读
相关标签
  

闽ICP备14008679号