没有银弹。但这里有一些建议:
使用更好的停用词词汇。如果您仍然有“to”和“at”之类的词,那么您要么没有删除停用词,要么使用了糟糕的词汇。尝试使用来自的西班牙语停用词nltk:
from nltk.corpus import stopwords
stopwords.words('spanish')
使用max_df < 1. 这将截断出现在超过该百分比数量的文档中的单词。
TF-IDF惩罚常用词(遍历所有文档)的部分是TF-IDF的IDF部分,意思是逆文档变换。有几个函数可以用作您的IDF 函数。通常,使用 IDF=。您可以尝试更具惩罚性的 IDF 功能。sklearn 似乎不允许指定它,但您可以使用或轻松实现自己的 TF-IDF 矢量化。它需要不超过五行代码。log#documents#documents where word appearsnltkgensim
我会按此顺序尝试这些建议中的每一个,并在它足够好时停止。听起来使用更好的停用词词汇对您来说已经足够了。
编辑:我忘了提,但是如果你有需要的话,当然你可以在停用词列表中添加更多无趣的词。
您可能还想首先评估 TF-IDF 对您的计数的影响。我认为这会起作用:
m = TfidfVectorizer().fit(docs)
c = [m.transform([word]) for word in m.vocabulary_]
for i in np.argsort(c)[::-1][:20]:
print(m.vocabulary_[i], c[i])
您可能需要调整代码。尝试在禁用和启用 IDF 以及其他调整的情况下使用。