【问题标题】:Python NLTK: How to tag sentences with the simplified set of part-of-speech tags?Python NLTK:如何使用简化的词性标签集标记句子?
【发布时间】:2026-02-14 01:20:04
【问题描述】:

PythonNLTK book第5章给出了这个在句子中标注单词的例子:

>>> text = nltk.word_tokenize("And now for something completely different")
>>> nltk.pos_tag(text)
[('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'), ('completely', 'RB'), ('different', 'JJ')]

nltk.pos_tag 调用默认标记器,它使用一整套标记。本章后面会介绍simplified set of tags

如何使用这组简化的词性标签来标记句子?

我也正确理解了标记器,即我可以按照我的要求更改标记器使用的标记集,还是应该将它返回的标记映射到简化集,或者我应该创建一个新的标记器一个新的、简单标记的语料库?

【问题讨论】:

    标签: python tagging nltk


    【解决方案1】:

    已更新,以防万一有人遇到同样的问题。 NLTK 已升级为“通用”标签集,来源 here。标记文本后,使用 map_tag 简化标记。

    import nltk
    from nltk.tag import pos_tag, map_tag
    
    text = nltk.word_tokenize("And now for something completely different")
    posTagged = pos_tag(text)
    simplifiedTags = [(word, map_tag('en-ptb', 'universal', tag)) for word, tag in posTagged]
    print(simplifiedTags)
    # [('And', u'CONJ'), ('now', u'ADV'), ('for', u'ADP'), ('something', u'NOUN'), ('completely', u'ADV'), ('different', u'ADJ')]
    

    【讨论】:

      【解决方案2】:

      为了简化默认标记器的标记,您可以使用nltk.tag.simplify.simplify_wsj_tag,如下所示:

      >>> import nltk
      >>> from nltk.tag.simplify import simplify_wsj_tag
      >>> tagged_sent = nltk.pos_tag(tokens)
      >>> simplified = [(word, simplify_wsj_tag(tag)) for word, tag in tagged_sent]
      

      【讨论】:

      【解决方案3】:

      您可以在 pos_tag 方法中简单地将 tagset 属性设置为 'universal'。

      In [39]: from nltk import word_tokenize, pos_tag
      ...: 
      ...: text = word_tokenize("Here is a simple way of doing this")
      ...: tags = pos_tag(text, tagset='universal')
      ...: print(tags)
      ...: 
      [('Here', 'ADV'), ('is', 'VERB'), ('a', 'DET'), ('simple', 'ADJ'), ('way', 'NOUN'), ('of', 'ADP'), ('doing', 'VERB'), ('this', 'DET')]
      

      【讨论】:

      • 用户必须先:>>> import nltk>>> nltk.download('universal_tagset')