python - 如何查找和删除具有低和高 idf 值的单词?
问题描述
我正在根据它们的 idf 值查找过滤词。我在列表中有 36k 个词,并且列表中有 24k 个词的 idf 值。现在,我如何将每个词映射到它们的 idf 值,以便过滤变得容易.
我已经存储了数据框中的所有唯一词(36k),并且我有 24k 的 idf 值
a=list(project_data['final_input_text'].str.split(' ', expand=True).stack().unique())
我希望在字典或数据框中映射到它们的 idf 值的单词
解决方案
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 值的单词
推荐阅读
- reactjs - 带有参数的 Axios PUT 数据
- laravel - Laravel 数组分页
- linux - 当字符串从标准输出读取时杀死一个进程,同时仍然显示标准输出
- leaflet - folium.features.GeoJson 和 folium.GeoJson 之间的区别
- c++ - 分段错误:11。急需解决代码(链表)
- matlab - 如果 MATLAB Rb2020 中的行和列维度不一致,如何取消嵌套具有嵌套数据和文本内容的元胞数组?
- python - Keras 期望 embedding_13_input 有 2 个维度,但是得到了形状为 (20, 7, 12) 的数组
- matlab - 归一化直方图的值总和不等于 1
- c# - C# 等价于 Java 等待
- python - 在 pandas 列中,如何找到特定值出现的最大连续行数?