是否有任何第三方工具可用于在python中执行词干

时间:2012-12-10 19:39:59

标签: python nltk stemming

我正在使用Python NLTK库来执行大型语料库。我正在做以下

text = [porter.stem(token) for token in text.split()] 
text = ' '.join(text)

“text”表示我文件的一行。我的文件中有数百万行,这个过程耗费了大量时间。我只是想问有没有更好的方法来做这个操作?

1 个答案:

答案 0 :(得分:1)

多少是“数百万”,多长时间是“大量的时间”? Porter词干不是一个复杂的算法,应该相当快。我怀疑你的I / O有限而不是其他任何东西。仍然......你可能会有一些改进。

如果顺序不重要且您不需要每个词干的每个副本,您可能会发现使用词典和/或设置存储词干更简单(并且更具内存效率)。这样可以避免需要限制已经看过的单词,这样可以提高性能,并且只需将每个词干存储一次。

例如:

seenwords = set()
seenstems = set()

for line in input_file:
    line = line.lower().split()
    seenstems.union(porter.stem(token) for token in line if token not in seenwords)
    seenwords.union(line)

如果它们在同一条线上,这可能不止一次阻止词语,但对于后续行,它们不再需要被阻止。您也可以逐个处理单词,这样可以避免在同一行中多次使用它们,但使用生成器表达式而不是for循环有一些速度优势。