Можно ли ускорить работу Wordmat Lemmatizer?

Я использую Lemmatizer Wordnet через NLTK на Brown Corpus (чтобы определить, используются ли в нем существительные больше в их единственной форме или их множественной форме).
т.е. from nltk.stem.wordnet import WordNetLemmatizer
l = WordnetLemmatizer()

Я заметил, что даже самые простые запросы, такие как приведенные ниже, занимают довольно много времени (по крайней мере, секунду или два).
l("cats")

Предположительно, это связано с тем, что для каждого запроса необходимо создать веб-соединение для Wordnet. Мне интересно, есть ли способ по-прежнему использовать Wordnet Lemmatizer, но он работает намного быстрее? Например, поможет ли мне вообще скачать Wordnet на мою машину? Или любые другие предложения?

Я пытаюсь выяснить, может ли Lemmatizer Wordnet ускоряться, а не пытаться использовать другой lemmatizer, потому что я нашел, что он работает лучше всего среди других, таких как Porter и Lancaster.

Ответ 1

Я использовал lemmatizer, как этот

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

На моей машине совсем не медленно. Для этого нет необходимости подключаться к сети.

Ответ 2

Он не запрашивает интернет, 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')