Python 中更快的词形还原技术
Faster Lemmatization techniques in Python
我正在尝试使用 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 倍。任何帮助将不胜感激。
如果您有几个核心可用,请尝试使用 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']
我正在尝试使用 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 倍。任何帮助将不胜感激。
如果您有几个核心可用,请尝试使用 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']