擅长:python、mysql、java
<p>第一个明显的优化是1/避免在每次迭代中调用<code>stopwords.words()</code>,2/使其成为<code>set</code>(<code>set</code>查找为O(1),其中<code>list</code>查找为O(N)):</p>
<pre><code>words = set(stopwords.words("english"))
filtered = [w for w in readit if not w in words]
</code></pre>
<p>但是这不会产生预期的结果,因为<code>readit</code>是一个字符串,所以实际上您是在迭代单个字符,而不是单词。您需要先将字符串标记化,[如这里所述][1]:</p>
^{pr2}$
<p>但是现在你已经丢失了所有的csv新行,所以你不能正确地重建它。。。如果你的csv中有引用的话,你可能也会有一些问题。所以实际上,您可能希望使用<code>csv.reader</code>正确地解析源代码,并逐字段、逐行地清理数据,这当然会增加一些开销。好吧,如果你的目标是重建csv而不使用stopwords,那就是(否则你可能不太在乎)。在</p>
<p>安怀依:如果你有一个非常庞大的语料库需要清理并且需要性能,下一步就是真正的并行化:将源数据分成若干部分,将每个部分发送到一个不同的进程(每个处理器/核心一个是一个好的开始),可能分布在多台计算机上,然后收集结果。这种模式被称为“mapreduce”,它们已经是两个Python实现。在</p>