如何将tfidf应用于文本行

2024-07-07 00:25:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一行行的简介(文本格式),我想使用tf idf来定义每个单词的权重。代码如下:

def remove_punctuations(text):
    for punctuation in string.punctuation:
        text = text.replace(punctuation, '')
    return text
df["punc_blurb"] = df["blurb"].apply(remove_punctuations)

df = pd.DataFrame(df["punc_blurb"])

vectoriser = TfidfVectorizer()
df["blurb_Vect"] = list(vectoriser.fit_transform(df["punc_blurb"]).toarray())

df_vectoriser = pd.DataFrame(x.toarray(),
columns = vectoriser.get_feature_names())
print(df_vectoriser)

我得到的只是一个庞大的数字列表,我甚至不确定它给我的是TF还是TF-IDF,因为这些常用词(和等)的分数都超过了0

目标是查看下面显示的tf idf列中的权重,我不确定我是否以最有效的方式进行此操作:

Goal Output table


Tags: textdataframedftfremovepd权重punctuation
1条回答
网友
1楼 · 发布于 2024-07-07 00:25:29

如果使用TfidfVectorizer,则不需要标点删除程序。它将根据默认的token_pattern参数自动处理标点:

from sklearn.feature_extraction.text import TfidfVectorizer

df = pd.DataFrame({"blurb":["this is a sentence", "this is, well, another one"]})
vectorizer = TfidfVectorizer(token_pattern='(?u)\\b\\w\\w+\\b')
df["tf_idf"] = list(vectorizer.fit_transform(df["blurb"].values.astype("U")).toarray())
vocab = sorted(vectorizer.vocabulary_.keys())
df["tf_idf_dic"] = df["tf_idf"].apply(lambda x: {k:v for k,v in dict(zip(vocab,x)).items() if v!=0})

相关问题 更多 >