确定单词是否是名词

时间:2015-01-19 21:37:00

标签: python nlp stanford-nlp

给定输入词,我想确定它是否是名词(如果含糊不清,例如cook可以是名词或动词,则该词必须被识别为名词)。

实际上我使用的是Stanford Parser的POS标签器(我给它一个单词作为输入,我只从结果中提取POS标签)。结果相当不错,但需要很长时间。

有没有办法(在python中,请:)比我实际上更快地执行这项任务?

3 个答案:

答案 0 :(得分:7)

如果您只是想检查单个单词是否可以用作名词,最快的方法可能是构建一组所有名词,然后只检查该单词的成员资格。

有关所有名词的列表,您可以使用WordNet语料库(例如可以通过NLTK访问):

>>> from nltk.corpus import wordnet as wn
>>> nouns = {x.name().split('.', 1)[0] for x in wn.all_synsets('n')}
>>> "cook" in nouns
True
>>> "and" in nouns
False

答案 1 :(得分:1)

我不能代表Python包装器,但如果你使用Stanford POS tagger而不是解析器,它应该更快。有Stanford CoreNLP的包装器,其中包含标记器:https://pypi.python.org/pypi/corenlp-python;或者,nltk看起来像斯坦福标记模块http://www.nltk.org/_modules/nltk/tag/stanford.html

如果您将单个单词嵌入玩具句子中,也可能会获得更好的结果。像“X是一个东西”之类的东西。根据句子的不同,这会使你偏向于或者远离猜词而不是名词。

答案 2 :(得分:0)

如果您检查单个单词,我会使用Wordnet。我还使用了免费提供的TreeTagger:http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/二进制文件运行速度非常快,并且支持多种语言。 如果您需要纯粹的Pythonic解决方案,请检查Brill Tagger的NLTK实现:http://www.nltk.org/_modules/nltk/tag/brill.html