是否有可能加速Wordnet Lemmatizer?

ess*_*ess 12 nltk wordnet lemmatization

我正在通过NLTK在Brown Corpus上使用Wordnet Lemmatizer(以确定其中的名词是否以其单数形式或复数形式使用更多).
from nltk.stem.wordnet import WordNetLemmatizer
l = WordnetLemmatizer()

我注意到即使是最简单的查询,例如下面的查询也需要相当长的时间(至少一两秒钟).
l("cats")

据推测,这是因为网络连接必须要WORDNET进行每个查询?..
我不知道是否有一种方法仍然使用WORDNET Lemmatizer但它执行得更快?例如,我可以帮助将Wordnet下载到我的机器上吗?还是其他任何建议?

我想弄清楚如果WORDNET Lemmatizer可以进行得更快,而不是尝试不同的lemmatizer,因为我发现它的工作原理最好在其他像波特和兰开斯特.

bco*_*lan 25

它不查询互联网,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
Run Code Online (Sandbox Code Playgroud)

如果你不得不将成千上万的短语弄清楚,那就相当慢了.但是,如果您正在执行大量冗余查询,则可以通过缓存函数的结果来获得一些加速:

from nltk.stem import WordNetLemmatizer
from functools32 import lru_cache
wnl = WordNetLemmatizer()
lemmatize = lru_cache(maxsize=50000)(wnl.lemmatize)

lemmatize('dogs')
Run Code Online (Sandbox Code Playgroud)


cin*_*oli 3

我像这样使用了词形还原器

from nltk.stem.wordnet import WordNetLemmatizer # to download corpora: python -m    nltk.downloader all
lmtzr = WordNetLemmatizer() # create a lemmatizer object
lemma = lmtzr.lemmatize('cats')
Run Code Online (Sandbox Code Playgroud)

在我的机器上一点也不慢。无需连接到网络即可执行此操作。