6

我试图找到一种更快的方法来使用 NLTK Word Net Lemmatizer对列表(命名为text )中的单词进行词形还原。显然这是我整个程序中最耗时的步骤(使用 cProfiler 找到相同的步骤)。

以下是我试图优化速度的一段代码 -

def lemmed(text):
    l = len(text)
    i = 0
    wnl = WordNetLemmatizer()
    while (i<l):
        text[i] = wnl.lemmatize(text[i])
        i = i + 1
    return text

使用 lemmatizer 将我的性能降低了 20 倍。任何帮助,将不胜感激。

4

1 回答 1

8

如果您有几个内核可用,请尝试使用该multiprocessing库:

from nltk import WordNetLemmatizer
from multiprocessing import Pool

def lemmed(text, cores=6): # tweak cores as needed
    with Pool(processes=cores) as pool:
        wnl = WordNetLemmatizer()
        result = pool.map(wnl.lemmatize, text)
    return result


sample_text = ['tests', 'friends', 'hello'] * (10 ** 6)

lemmed_text = lemmed(sample_text)

assert len(sample_text) == len(lemmed_text) == (10 ** 6) * 3

print(lemmed_text[:3])
# => ['test', 'friend', 'hello']
于 2016-06-24T19:11:05.883 回答