2024-05-28 22:40:52 发布
网友
我正在使用pythonltk库对大型语料库执行词干分析。我正在做下面的工作
text = [porter.stem(token) for token in text.split()] text = ' '.join(text)
“文本”代表我文件的一行。我的文件中有数百万行,这个过程需要大量的时间。我只想问有没有更好的方法来做这个手术?在
多少是“百万”,多长是“巨大的时间”?波特词干分析不是一个复杂的算法,应该相当快。我怀疑你是I/O受限,而不是别的什么。不过。。。也许你可以弥补一些改进。在
如果顺序不重要,并且您不需要每个词干的副本,那么您可能会发现使用字典和/或set来存储词干更简单(而且更节省内存)。这将使您避免需要词干您已经看到,这将提高性能,并且每个词干只存储一次。在
例如:
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循环有一些速度优势。在
for
多少是“百万”,多长是“巨大的时间”?波特词干分析不是一个复杂的算法,应该相当快。我怀疑你是I/O受限,而不是别的什么。不过。。。也许你可以弥补一些改进。在
如果顺序不重要,并且您不需要每个词干的副本,那么您可能会发现使用字典和/或set来存储词干更简单(而且更节省内存)。这将使您避免需要词干您已经看到,这将提高性能,并且每个词干只存储一次。在
例如:
如果单词在同一行上,这可以多次进行词干转换,但是对于后续的行,就不需要再对它们进行词干了。您也可以逐个处理单词,这样可以避免在同一行中多次使用词干,但是使用生成器表达式而不是
for
循环有一些速度优势。在相关问题 更多 >
编程相关推荐