首页 > 解决方案 > 如何查找和删除具有低和高 idf 值的单词?

问题描述

我正在根据它们的 idf 值查找过滤词。我在列表中有 36k 个词,并且列表中有 24k 个词的 idf 值。现在,我如何将每个词映射到它们的 idf 值,以便过滤变得容易.

我已经存储了数据框中的所有唯一词(36k),并且我有 24k 的 idf 值

a=list(project_data['final_input_text'].str.split(' ', expand=True).stack().unique())

我希望在字典或数据框中映射到它们的 idf 值的单词

标签: pythontfidfvectorizer

解决方案


from sklearn.feature_extraction.text import TfidfVectorizer 
vectorizer = TfidfVectorizer() 
train_tf = vectorizer.fit(train['final_input_text'].values) 
idf_scores = train_tf.idf_

根据较低的阈值 = 8 和较高的阈值 = 11 过滤索引

filtered_indices = np.argwhere(((idf_scores> 8) & (idf_scores<11.55) ))
filtered_indices = [idx[0] for idx in filtered_indices]

#list of vocabulary from the vectorizer
vocabulary = train_tf.get_feature_names()

#preparing a set with filtered vocabulary
filtered_voc = {vocabulary[i] for i in filtered_indices}

从文章中删除单词(不在过滤后的 voc 中)

filtered_text_list = []
for text in train['final_input_text'].values:
  text_word_list = [word for word in text.split() if word in filtered_voc]
  filtered_text_list.append(' '.join(text_word_list))

现在,filtered_text_list 将不包含任何具有低(<8)和高(>11)idf 值的单词


推荐阅读