每个文档/总体中TF-IDF值最高的10个词是什么?

3
我正在尝试获取每个文档中TF-IDF得分最高的前10个单词。在我的数据框中,有一列包含了经过预处理的文本(没有标点符号、停用词等)来自于不同文档的。在这个例子中,每一行代表一个文档。

my dataframe

它有超过500行,我对每行中最重要的单词很好奇。
所以我运行了以下代码:
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
vectors = vectorizer.fit_transform(df['liststring'])
feature_names = vectorizer.get_feature_names()
dense = vectors.todense()
denselist = dense.tolist()
df2 = pd.DataFrame(denselist, columns=feature_names)

这给了我一个TF-IDF矩阵:

tf idf matrix

我的问题是,我如何收集具有最高TF-IDF值的前10个单词?在我的原始数据框(df)中创建一个包含每行前10个单词的列会很好,但也要知道哪些单词在总体上最重要。
1个回答

5

20newsgroups数据集的最小可重现示例如下:

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer

X,y = fetch_20newsgroups(return_X_y = True)
tfidf = TfidfVectorizer()
X_tfidf = tfidf.fit_transform(X).toarray()
vocab = tfidf.vocabulary_
reverse_vocab = {v:k for k,v in vocab.items()}

feature_names = tfidf.get_feature_names()
df_tfidf = pd.DataFrame(X_tfidf, columns = feature_names)

idx = X_tfidf.argsort(axis=1)

tfidf_max10 = idx[:,-10:]

df_tfidf['top10'] = [[reverse_vocab.get(item) for item in row] for row in tfidf_max10 ]

df_tfidf['top10']

0        [this, was, funky, rac3, bricklin, tellme, umd...
1        [1qvfo9innc3s, upgrade, experiences, carson, k...
2        [heard, anybody, 160, display, willis, powerbo...
3        [joe, green, csd, iastate, jgreen, amber, p900...
4        [tom, n3p, c5owcb, expected, std, launch, jona...
                               ...                        
11309    [millie, diagnosis, headache, factory, scan, j...
11310    [plus, jiggling, screen, bodin, blank, mac, wi...
11311    [weight, ended, vertical, socket, the, westes,...
11312    [central, steven, steve, collins, bolson, hcrl...
11313    [california, kjg, 2101240, willow, jh2sc281xpm...
Name: top10, Length: 11314, dtype: object

获取具有最高TfIdf值的前10个特征,请使用以下命令:
global_top10_idx = X_tfidf.max(axis=0).argsort()[-10:]
np.asarray(feature_names)[global_top10_idx]

如果有不清楚的地方,请提出问题。


太棒了,谢谢你的回答,Sergey!你还有其他处理大数据集的解决方案吗? - undefined
@LixingLiang,“large”是什么意思? - undefined
每次运行"idx = X_tfidf.argsort(axis=1)"时,我的JupyterLab都会重新启动。看来我的内存不够用。 - undefined
对于只有停用词的句子,它也会给出前10个单词,我们能避免这种情况吗?基本上,在进行argsort时,它也考虑了0值,我们能避免这种情况吗? - undefined
1
@VenkateshGandi 我建议你把这个问题发布并将我置顶。 - undefined
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接