【问题标题】:How to find uncapitalised proper nouns with NLTK?如何使用 NLTK 查找未大写的专有名词?
【发布时间】:2020-07-24 07:54:06
【问题描述】:

我正在尝试制作一个“修复错误的大写”程序,并且我正在尝试使用 NLTK 的 pos 标记器在 python 中找到专有名词。问题在于,对于大小写错误/缺失的文本,它似乎效果不佳。

这是我目前的代码:

import nltk

text = "This is My text. Unicorns are very Nice, I think. how do you do? are you okay! testing capitalisation. my nice Friend is called bob he lives in america."

tokenized_words = nltk.word_tokenize(text)
pos_tagged_text = nltk.pos_tag(tokenized_words)
print(pos_tagged_text)

输出是:

[('This', 'DT'), ('is', 'VBZ'), ('My', 'PRP$'), ('text', 'NN'), ('.', '.'), ('Unicorns', 'NNS'), ('are', 'VBP'), ('very', 'RB'), ('Nice', 'NNP'), (',', ','), ('I', 'PRP'), ('think', 'VBP'), ('.', '.'), ('how', 'WRB'), ('do', 'VB'), ('you', 'PRP'), ('do', 'VB'), ('?', '.'), ('are', 'VBP'), ('you', 'PRP'), ('okay', 'JJ'), ('!', '.'), ('testing', 'VBG'), ('capitalisation', 'NN'), ('.', '.'), ('my', 'PRP$'), ('nice', 'JJ'), ('Friend', 'NNP'), ('is', 'VBZ'), ('called', 'VBN'), ('bob', 'NN'), ('he', 'PRP'), ('lives', 'VBZ'), ('in', 'IN'), ('america', 'NN'), ('.', '.')]

如您所见,有很多错误。 “Nice”会被标记为专有名词,“Friend”也是如此,而“bob”和“america”则不会。

无论大小写如何,我如何找到专有名词?

【问题讨论】:

  • 是的,这就是nltk 的问题。我建议你使用standford parsernltk 更好
  • @SaiSreenivas 学习是否需要很多时间/学习是否复杂?

标签: python nltk pos-tagger


【解决方案1】:

我推荐使用 python 库 spaCy,他们的模型在词性标注方面具有很高的准确性。如果原始文本的大小写不可靠,我建议将整个文本小写以减少误报。

import spacy

nlp = spacy.load('en_core_web_lg')

text = "This is My text. Unicorns are very Nice, I think. how do you do? are you okay! testing capitalisation. my nice Friend is called bob he lives in america."
doc = nlp(text.lower())
print([tok for tok in doc if tok.pos_=='PROPN'])  # extract all proper nouns

输出:

[bob, america]

【讨论】:

    猜你喜欢
    • 2013-07-14
    • 2016-03-30
    • 2016-03-31
    • 1970-01-01
    • 2020-03-30
    • 2016-04-26
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    相关资源
    最近更新 更多