以下是一个使用Python和sklearn库中的TfidfVectorizer类来实现TF-IDF(Term Frequency-Inverse Document Frequency)的简单示例。TfidfVectorizer是一个将原始文本转换为TF-IDF特征向量的转换器。
python复制代码
# 导入必要的库 | |
from sklearn.feature_extraction.text import TfidfVectorizer | |
from sklearn.datasets import fetch_20newsgroups | |
# 加载数据集(这里我们使用20 Newsgroups数据集作为示例) | |
categories = ['alt.atheism', 'talk.religion.misc', 'comp.graphics', 'sci.med'] | |
newsgroups_train = fetch_20newsgroups(subset='train', categories=categories, shuffle=True, random_state=42) | |
# 准备要转换的文本数据 | |
documents = newsgroups_train.data | |
# 初始化TfidfVectorizer | |
# 这里我们设置了一些参数,如min_df(忽略在所有文档中出现次数少于该值的单词),max_df(忽略在所有文档中出现次数多于该值的单词)等 | |
vectorizer = TfidfVectorizer(min_df=2, max_df=0.95, ngram_range=(1, 2), stop_words='english') | |
# 使用TfidfVectorizer将文本数据转换为TF-IDF特征矩阵 | |
X = vectorizer.fit_transform(documents) | |
# 查看一些词汇的TF-IDF权重 | |
# 首先获取词汇表(即所有唯一词汇的列表) | |
vocabulary = vectorizer.get_feature_names_out() | |
# 打印部分词汇的TF-IDF权重 | |
for word in ['god', 'atheism', 'graphics', 'medicine']: | |
if word in vocabulary: | |
idx = vocabulary.index(word) | |
print(f"{word}: {X[0, idx]}") # 注意:这里我们仅打印了第一个文档的TF-IDF值,你可能想要打印其他文档的 | |
else: | |
print(f"{word} not in vocabulary.") | |
# 如果你想要将TF-IDF特征矩阵转换回原始的文档-词汇形式(仅用于演示,通常不需要这样做) | |
# 你可以使用vectorizer.inverse_transform方法,但请注意它返回的是稀疏表示 | |
# transformed_docs = vectorizer.inverse_transform(X[:5]) # 例如,仅转换前5个文档 | |
# print(transformed_docs) |
注意:
fetch_20newsgroups函数用于从scikit-learn库中加载20 Newsgroups数据集,这是一个常用于文本分类的标准数据集。- 在实际应用中,你可能需要调整
TfidfVectorizer的参数以适应你的特定任务和数据集。 X[0, idx]表示第一个文档中词汇word的TF-IDF值。由于X是一个稀疏矩阵,所以你可以直接通过索引访问其元素。inverse_transform方法通常用于调试或可视化目的,因为它返回的表示可能不如原始文本那么直观或有用。在实际应用中,你通常不会需要将TF-IDF特征矩阵转换回原始的文档-词汇形式。
840

被折叠的 条评论
为什么被折叠?



