判断一个词是名词还是名词

2024-04-29 12:06:50 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个输入词,我想确定它是不是一个名词(在歧义的情况下,例如cook可以是一个名词或一个动词,该词必须被识别为一个名词)。

实际上,我使用斯坦福解析器中的POS标记器(我给它一个单词作为输入,只从结果中提取POS标记)。结果很好,但需要很长时间。

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


Tags: 标记pos解析器情况动词单词cook名词
3条回答

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

我不能代表Python包装器,但是如果您使用StanfordPOS tagger而不是解析器,它应该快得多。有Stanford CoreNLP的包装器,其中包括标记符:https://pypi.python.org/pypi/corenlp-python;或者,看起来nltk也有Stanford标记符模块http://www.nltk.org/_modules/nltk/tag/stanford.html

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

如果您只想检查一个单词是否可以用作名词,最快的方法可能是构建一个包含所有名词的集合,然后检查该单词是否属于该集合。

对于所有名词的列表,可以使用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

相关问题 更多 >