删除词汇表TF-IDF中单个出现的单词

时间:2017-08-22 05:32:57

标签: python scikit-learn tf-idf

我试图删除词汇中出现的单词以减少词汇量。我正在使用sklearn TfidfVectorizer(),然后在我的数据框上使用fit_transform函数。

tfidf = TfidfVectorizer()  
tfs = tfidf.fit_transform(df['original_post'].values.astype('U')) 

我首先想到的是tfidf矢量化器中的预处理器字段,或者在机器学习之前使用预处理包。

任何有关进一步实施的提示或链接?

2 个答案:

答案 0 :(得分:6)

您正在寻找public void changeLocale(String lang) { if (lang.equalsIgnoreCase("")) return; Locale myLocale = new Locale(lang);//Set Selected Locale Locale.setDefault(myLocale);//set new locale as default Configuration config = new Configuration();//get Configuration config.locale = myLocale;//set config locale as selected locale getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());//Update the config } param(最低频率),来自scikit-learn TfidfVectorizer的文档:

  

min_df:浮在范围[0.0,1.0]或int,默认= 1

     

构建词汇表时,忽略文档频率严格低于给定阈值的术语。这个值也是   在文献中称为截止。如果是float,则参数表示a   文件比例,整数绝对数。这个参数是   如果词汇不是无则忽略。

min_df

你也可以删除常用词:

# remove words occuring less than 5 times
tfidf = TfidfVectorizer(min_df=5)

你也可以删除这样的停用词:

# remove words occuring in more than half the documents
tfidf = TfidfVectorizer(max_df=0.5)

答案 1 :(得分:1)

ShmulikA的答案很可能效果很好,但会根据文档的频率删除单词。因此,如果特定单词仅在1个文档中出现200次,它将被删除。 tfidf矢量化器不能完全提供您想要的。您必须:

  1. 将矢量化器适合您的语料库。从vectorizer提取完整词汇表
  2. 将单词作为新词典中的键。
  3. 计算每个单词出现的次数:

    for every document in corpus: for word in document: vocabulary[word] += 1

现在,找出是否有值= 1,从字典中删除这些条目。将密钥放入列表中,并将该列表作为参数传递给tfidf矢量化器。
这将需要很多循环,也许只需要使用min_df即可,在实际中效果很好。