我有一个文本数据库,并创建了一个小计数器来从整个数据库中获取字数。最常见的词是通常的嫌疑人('是','和'等),最不常见的是各种表情符号,美元价值,拼写错误等等。我想从文本中删除单词,以便我可以仅向量化不是最常见或最不常见的值。但是,非常罕见/异常单词的列表大约有600,000个项目:
stopwords = []
for key, value in ctr.items(): #ctr is a Counter() object of words in the entire corpus of text and their counts
if value < 4:
words += 1
stopwords.append(key)
print (len(stopwords))
643392
这意味着,举一个标记一个文本的例子:
start = time.time()
[word for word in word_tokenize(stemmer.stem(dataframe.text[20])) if word not in stopwords]
end = time.time()
print (end - start)
79.92309927940369
所以,一分钟的文字就过了一分钟。大约有160,000篇文章需要清理和矢量化。
是否有某种矢量化函数用于删除禁用词?我看到处理停用词的唯一方法是迭代地解决问题。按此速度,清理此文本大约需要三个月。
一如既往地感谢您的帮助。
答案 0 :(得分:2)
Word查找在Python中不应该花那么长时间。您无需向量化删除禁用词,只需修复代码即可。您没有显示您的代码,但stopwords
可能是一个巨大的列表。将它转换为一组,你的问题应该消失。
stopwords = set(stopwords)
其次,你没有显示完整的代码,但我真的怀疑你有一个可以阻止多字符串的词干分析器。首先对字符串进行标记,然后对每个单词进行标记。