Tim*_*rth 3 python nlp scikit-learn
我正在尝试按关键字对文档进行聚类。我正在使用以下代码来制作tdidf-matrix:
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vectorizer = TfidfVectorizer(max_df=.8, max_features=1000,
min_df=0.07, stop_words='english',
use_idf=True, tokenizer=tokenize_and_stem,
ngram_range=(1,2))
tfidf_matrix = tfidf_vectorizer.fit_transform(documents)
Run Code Online (Sandbox Code Playgroud)
print(tfidf_matrix.shape)
返回(567, 209),这意味着有 567 个文档,每个文档都有 scikit-learn TdidfVectorizer 检测到的 209 个特征词的某种混合。
现在,我曾经terms = tfidf_vectorizer.get_feature_names()获得术语列表。跑步print(len(terms))给予209
其中许多单词对于任务来说是不必要的,并且它们会给聚类增加噪音。我手动浏览了该列表并提取了有意义的功能名称,从而生成了一个新terms列表。现在,跑步print(len(terms))可以给67
然而,运行tfidf_vectorizer.fit_transform(documents)仍然给出 的形状(567, 209),这意味着该fit_transform(documents)函数仍然使用 209 个术语的嘈杂列表,而不是手动选择的 67 个术语列表。
如何tfidf_vectorizer.fit_transform(documents)使用 67 个手动选择的术语列表来运行该函数?我在想,也许这需要我向我的机器上的 Scikit-Learn 包添加至少一项功能,对吗?
任何帮助是极大的赞赏。谢谢!
小智 5
有两种方法:
如果您已经确定了停用词列表(您称它们为“任务不必要的”),只需将它们放入 的参数中stop_words即可TfidfVectorizer在创建词袋时忽略它们。但请注意,如果您将参数设置为自定义列表,
则将不再使用预定义的英语停用词。stop_words如果您想将预定义的英语列表与其他停用词结合起来,只需添加两个列表:
from sklearn.feature_extraction.stop_words import ENGLISH_STOP_WORDS
stop_words = list(ENGLISH_STOP_WORDS) + ['your','additional', 'stopwords']
tfidf_vectorizer = TfidfVectorizer(stop_words=stop_words) # add your other params here
Run Code Online (Sandbox Code Playgroud)如果您有固定的词汇表并且只想计算这些单词(即您的terms列表),只需设置以下vocabulary参数TfidfVectorizer:
tfidf_vectorizer = TfidfVectorizer(vocabulary=terms) # add your other params here
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1196 次 |
| 最近记录: |