如何将 tf-idf 应用于文本行

How to apply tf-idf to rows of text

我有几行简介(文本格式),我想使用 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 是否作为常用词(the、and 等)都有分数大于 0.

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

Goal Output table

如果您使用 TfidfVectorizer,则不需要标点符号删除器。它会自动处理标点符号,默认情况下 token_pattern param:

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})