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

レマタイザーを使用すると、パフォーマンスが 20 分の 1 に低下します。どんな助けでも大歓迎です。

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 に答える