是否有可能加速Wordnet Lemmatizer?

时间:2013-04-24 00:30:59

标签: nltk wordnet lemmatization

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

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

可能这是因为每个查询都必须与Wordnet建立网络连接? 我想知道是否还有一种方法可以使用Wordnet Lemmatizer,但它的运行速度要快得多吗?例如,我可以帮助将Wordnet下载到我的机器上吗? 还是其他任何建议?

我正在试图弄清楚Wordnet Lemmatizer是否可以制作得更快,而不是尝试使用不同的变形器,因为我发现它在Porter和Lancaster等其他工作中效果最好。

2 个答案:

答案 0 :(得分:23)

它不会查询互联网,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')

答案 1 :(得分:2)

我已经使用了像这样的词形变换器

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

我的机器上一点也不慢。没有必要连接到网络来执行此操作。