我在 Brown Corpus 上通过 NLTK 使用 Wordnet Lemmatizer(以确定其中的名词是以单数形式还是复数形式更多地使用)。
即 from nltk.stem.wordnet import WordNetLemmatizer
l = WordnetLemmatizer()
我注意到即使是最简单的查询(例如下面的查询)也需要很长时间(至少一两秒钟)。l("cats")
大概这是因为每个查询都必须与 Wordnet 建立网络连接?..
我想知道是否有办法仍然使用 Wordnet Lemmatizer 但它的执行速度要快得多?例如,将 Wordnet 下载到我的机器上对我有帮助吗?
或者有什么其他建议?
我试图弄清楚是否可以更快地制作 Wordnet Lemmatizer,而不是尝试不同的 lemmatizer,因为我发现它在像 Porter 和 Lancaster 这样的其他人中效果最好。
最佳答案
它不查询互联网,NLTK 从您的本地机器读取 WordNet。当您运行第一个查询时,NLTK 将 WordNet 从磁盘加载到内存中:
>>> from time import time
>>> t=time(); lemmatize('dogs'); print time()-t, 'seconds'
u'dog'
3.38199806213 seconds
>>> t=time(); lemmatize('cats'); print time()-t, 'seconds'
u'cat'
0.000236034393311 seconds
如果您必须对数千个短语进行词形还原,则速度会相当慢。但是,如果您正在执行大量冗余查询,则可以通过缓存函数的结果来获得一些加速:
from nltk.stem import WordNetLemmatizer
from functools32 import lru_cache
wnl = WordNetLemmatizer()
lemmatize = lru_cache(maxsize=50000)(wnl.lemmatize)
lemmatize('dogs')
关于nltk - 是否可以加速 Wordnet Lemmatizer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16181419/