sklearn:TFIDF Transformer:如何获取文档中给定单词的 tf-idf 值
sklearn : TFIDF Transformer : How to get tf-idf values of given words in document
我使用 sklearn 计算文档的 TFIDF(词频逆文档频率)值,使用命令如下:
from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(documents)
from sklearn.feature_extraction.text import TfidfTransformer
tf_transformer = TfidfTransformer(use_idf=False).fit(X_train_counts)
X_train_tf = tf_transformer.transform(X_train_counts)
X_train_tf
是形状为 (2257, 35788)
的 scipy.sparse
矩阵。
如何获取特定文档中单词的 TF-IDF?更具体地说,如何在给定文档中获取具有最大 TF-IDF 值的单词?
您可以使用 sklean 中的 TfidfVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
from scipy.sparse.csr import csr_matrix #need this if you want to save tfidf_matrix
tf = TfidfVectorizer(input='filename', analyzer='word', ngram_range=(1,6),
min_df = 0, stop_words = 'english', sublinear_tf=True)
tfidf_matrix = tf.fit_transform(corpus)
上面tfidf_matix有语料库中所有文档的TF-IDF值。这是一个很大的稀疏矩阵。现在,
feature_names = tf.get_feature_names()
这为您提供了所有标记或 n-gram 或单词的列表。
对于语料库中的第一个文档,
doc = 0
feature_index = tfidf_matrix[doc,:].nonzero()[1]
tfidf_scores = zip(feature_index, [tfidf_matrix[doc, x] for x in feature_index])
打印出来,
for w, s in [(feature_names[i], s) for (i, s) in tfidf_scores]:
print w, s
这是 Python 3 中的另一个更简单的解决方案,带有 pandas 库
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
vect = TfidfVectorizer()
tfidf_matrix = vect.fit_transform(documents)
df = pd.DataFrame(tfidf_matrix.toarray(), columns = vect.get_feature_names())
print(df)
查找句子中每个单词的 tfidf 分数有助于执行下游任务,例如搜索和语义匹配。
我们可以得到字典,其中单词作为键,tfidf_score 作为值。
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(min_df=3)
tfidf.fit(list(subject_sentences.values()))
feature_names = tfidf.get_feature_names()
现在我们可以这样写转换逻辑了
def get_ifidf_for_words(text):
tfidf_matrix= tfidf.transform([text]).todense()
feature_index = tfidf_matrix[0,:].nonzero()[1]
tfidf_scores = zip([feature_names[i] for i in feature_index], [tfidf_matrix[0, x] for x in feature_index])
return dict(tfidf_scores)
例如对于输入
text = "increase post character limit"
get_ifidf_for_words(text)
输出将是
{
'character': 0.5478868741621505,
'increase': 0.5487092618866405,
'limit': 0.5329156819959756,
'post': 0.33873144956352985
}
我使用 sklearn 计算文档的 TFIDF(词频逆文档频率)值,使用命令如下:
from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(documents)
from sklearn.feature_extraction.text import TfidfTransformer
tf_transformer = TfidfTransformer(use_idf=False).fit(X_train_counts)
X_train_tf = tf_transformer.transform(X_train_counts)
X_train_tf
是形状为 (2257, 35788)
的 scipy.sparse
矩阵。
如何获取特定文档中单词的 TF-IDF?更具体地说,如何在给定文档中获取具有最大 TF-IDF 值的单词?
您可以使用 sklean 中的 TfidfVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
from scipy.sparse.csr import csr_matrix #need this if you want to save tfidf_matrix
tf = TfidfVectorizer(input='filename', analyzer='word', ngram_range=(1,6),
min_df = 0, stop_words = 'english', sublinear_tf=True)
tfidf_matrix = tf.fit_transform(corpus)
上面tfidf_matix有语料库中所有文档的TF-IDF值。这是一个很大的稀疏矩阵。现在,
feature_names = tf.get_feature_names()
这为您提供了所有标记或 n-gram 或单词的列表。 对于语料库中的第一个文档,
doc = 0
feature_index = tfidf_matrix[doc,:].nonzero()[1]
tfidf_scores = zip(feature_index, [tfidf_matrix[doc, x] for x in feature_index])
打印出来,
for w, s in [(feature_names[i], s) for (i, s) in tfidf_scores]:
print w, s
这是 Python 3 中的另一个更简单的解决方案,带有 pandas 库
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
vect = TfidfVectorizer()
tfidf_matrix = vect.fit_transform(documents)
df = pd.DataFrame(tfidf_matrix.toarray(), columns = vect.get_feature_names())
print(df)
查找句子中每个单词的 tfidf 分数有助于执行下游任务,例如搜索和语义匹配。
我们可以得到字典,其中单词作为键,tfidf_score 作为值。
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(min_df=3)
tfidf.fit(list(subject_sentences.values()))
feature_names = tfidf.get_feature_names()
现在我们可以这样写转换逻辑了
def get_ifidf_for_words(text):
tfidf_matrix= tfidf.transform([text]).todense()
feature_index = tfidf_matrix[0,:].nonzero()[1]
tfidf_scores = zip([feature_names[i] for i in feature_index], [tfidf_matrix[0, x] for x in feature_index])
return dict(tfidf_scores)
例如对于输入
text = "increase post character limit"
get_ifidf_for_words(text)
输出将是
{
'character': 0.5478868741621505,
'increase': 0.5487092618866405,
'limit': 0.5329156819959756,
'post': 0.33873144956352985
}