在TfidfVectorizer

时间:2019-08-05 13:48:12

标签: python nltk stop-words tfidfvectorizer

我正在尝试在TfidfVectorizer中删除法语和英语中的停用词。到目前为止,我仅设法从英语中删除了停用词。当我尝试输入stop_words的法语时,出现一条错误消息,提示它不是内置的。

实际上,我收到以下错误消息:

ValueError: not a built-in stop list: french

我有一个文本文件,其中包含700行法语和英语混合的文本。

我正在使用Python进行这700行的集群项目。但是,我的集群出现问题:我的集群中充满了法语停用词,这使集群的效率大打折扣。

我的问题如下:

是否可以添加法语停用词或手动更新内置的英语停用词列表,以便摆脱这些不必要的词?

以下是包含我的停用词代码的TfidfVectorizer代码:

tfidf_vectorizer = TfidfVectorizer(max_df=0.8, max_features=200000,
                             min_df=0.2, stop_words='english',
                             use_idf=True, tokenizer=tokenize_and_stem, 
ngram_range=(1,3))

删除这些法语停用词将使我拥有代表我的文档中重复出现的单词的簇。

对于这个问题的相关性有任何疑问,我上周曾问过一个类似的问题。但是,它不相似,因为它不使用TfidfVectorizer。

任何帮助将不胜感激。谢谢。

3 个答案:

答案 0 :(得分:1)

您可以使用NLTKSpacy(两个非常流行的Python NLP库)中的停用词包。由于achultz已经添加了使用stop-words库的代码段,因此我将展示如何使用NLTK或Spacy。

NLTK:

from nltk.corpus import stopwords

final_stopwords_list = stopwords.words('english') + stopwords.words('french')
tfidf_vectorizer = TfidfVectorizer(max_df=0.8, max_features=200000, min_df=0.2, stop_words=final_stopwords_list, use_idf=True, tokenizer=tokenize_and_stem, ngram_range(1,3))

NLTK将总共为您提供334个停用词。

Spacy:

from spacy.lang.fr.stop_words import STOP_WORDS as fr_stop
from spacy.lang.en.stop_words import STOP_WORDS as en_stop

final_stopwords_list = list(fr_stop) + list(en_stop)
tfidf_vectorizer = TfidfVectorizer(max_df=0.8, max_features=200000, min_df=0.2, stop_words=final_stopwords_list, use_idf=True, tokenizer=tokenize_and_stem, ngram_range(1,3))

Spacy总共为您提供890个停用词。

答案 1 :(得分:0)

根据我的经验,解决此问题的最简单方法是在预处理阶段手动删除停用词(同时从其他位置获取最常用的法语短语列表)。

此外,应该方便地检查在您的文本/模型中,英语和法语中最经常出现的停用词(仅根据它们的出现次数或idf)并将它们添加到在预处理阶段中排除的停用词中。

如果您希望使用tfidfvectorizer内置方法删除单词,则可以考虑列出要包含法语和英语的停用词,并将其传递为

stopwords=[a,he,she,le,...]
tfidf_vectorizer = TfidfVectorizer(max_df=0.8, max_features=200000,
                             min_df=0.2, stop_words=stopwords,analyzer=’word’,
                             use_idf=True, tokenizer=tokenize_and_stem) 

重要的是,引自documentation

  

“英语”是当前唯一受支持的字符串值

因此,现在您必须手动添加一些停用词列表,您可以在网络上的任何位置找到这些停用词,然后根据您的主题进行调整,例如: stopwords

答案 2 :(得分:0)

Igor Sharm指出了手动执行操作的方法,但是也许您也可以安装stop-words package。然后,由于TfidfVectorizer允许将列表作为stop_words参数,

from stop_words import get_stop_words

my_stop_word_list = get_stop_words('english') + get_stop_words('french')

tfidf_vectorizer = TfidfVectorizer(max_df=0.8, max_features=200000,
                             min_df=0.2, stop_words=my_stop_word_list,
                             use_idf=True, tokenizer=tokenize_and_stem, 
ngram_range=(1,3))

如果您只想包含一些单词,还可以根据需要阅读和解析french.txt file in the github project