我需要在葡萄牙语字符串上执行词干.为此,我使用nltk.word_tokenize()函数对字符串进行标记,然后单独生成每个单词.之后,我重建了字符串.它工作正常,但表现不佳.我怎样才能让它更快?字符串长度约为200万字.
tokenAux=""
tokens = nltk.word_tokenize(portugueseString)
for token in tokens:
tokenAux = token
tokenAux = stemmer.stem(token)
textAux = textAux + " "+ tokenAux
print(textAux)
抱歉英文不好,谢谢!
解决方法:
string是不可变的,因此,如果字符串很长,每次更新字符串都不是好习惯. link here解释了连接字符串和显示性能分析的各种方法.而且,因为迭代只进行一次,所以最好选择生成器表达而不是列表理解.有关详细信息,您可以查看discussion here .在这种情况下,使用带有join的生成器表达式可能会有所帮助:
使用my_text作为长字符串:len(my_text) – > 444399
使用timeit进行比较:
%%timeit
tokenAux=""
textAux=""
tokens = nltk.word_tokenize(my_text)
for token in tokens:
tokenAux = token
tokenAux = stemmer.stem(token)
textAux = textAux + " "+ tokenAux
结果:
1 loop, best of 3: 6.23 s per loop
使用带有join的generator表达式:
%%timeit
' '.join(stemmer.stem(token) for token in nltk.word_tokenize(my_text))
结果:
1 loop, best of 3: 2.93 s per loop