2024-04-29 12:06:50 发布
网友
给定一个输入词,我想确定它是不是一个名词(在歧义的情况下,例如cook可以是一个名词或一个动词,该词必须被识别为一个名词)。
cook
实际上,我使用斯坦福解析器中的POS标记器(我给它一个单词作为输入,只从结果中提取POS标记)。结果很好,但需要很长时间。
有没有办法(在python中,请:)比我实际做的更快地执行这个任务?
如果你检查单个单词,我会支持使用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。
POS tagger
Stanford CoreNLP
nltk
如果你把一个单词嵌入一个玩具句中,你可能会得到更好的结果。像“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
如果你检查单个单词,我会支持使用Wordnet。我还使用了免费提供的TreeTagger:http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/二进制文件运行非常快,并且支持多种语言。 如果需要纯Pythonic解决方案,请检查Brill标记器的NLTK实现:http://www.nltk.org/_modules/nltk/tag/brill.html
我不能代表Python包装器,但是如果您使用Stanford
POS tagger
而不是解析器,它应该快得多。有Stanford CoreNLP
的包装器,其中包括标记符:https://pypi.python.org/pypi/corenlp-python;或者,看起来nltk
也有Stanford标记符模块http://www.nltk.org/_modules/nltk/tag/stanford.html。如果你把一个单词嵌入一个玩具句中,你可能会得到更好的结果。像“X是一个东西”之类的东西,根据句子的不同,这也会使你倾向于或远离把单词猜成名词。
如果您只想检查一个单词是否可以用作名词,最快的方法可能是构建一个包含所有名词的集合,然后检查该单词是否属于该集合。
对于所有名词的列表,可以使用WordNet语料库(例如,可以通过NLTK访问):
相关问题 更多 >
编程相关推荐