TfIdf的计算
2019-10-16 本文已影响0人
云彩修建站站长
一个字的tfidf离不开他所在的doc,因为要计算这个字的在他所在doc的tf。
参考
sklearn
sklearn计算tfidf的类是sklearn.feature_extraction.text.TfidfVectorizer
其中fit(docs)的作用是从docs里面学习idf,在做transform(docs)的时候,再从docs里面获取tf做正式计算。
def sentence_vec(contents, sentence):
"""
:param contents: 需要fit的docs,doc中的句子都需要经过jieba分词
:param sentence: 需要transform的句子,jieba分词后的句子
:return:list 每个word对应的tfidf,返回的长度等于len(sentence.split())
"""
vectorizer = TfidfVectorizer(token_pattern=r"(?u)\b\w+\b").fit(contents)
vocabulary = vectorizer.vocabulary_
tfidf_handler = vectorizer.transform([sentence]) # 传入句子组成的list
tfidf_arrays = tfidf_handler.toarray()
sentence_tfidf = []
for word in sentence.split():
index = vocabulary.get(word, -1)
if index == -1:
sentence_tfidf.append(0)
else:
tfidf = tfidf_arrays[0][index]
sentence_tfidf.append(tfidf)
return sentence_tfidf