Я вычислил TF AND IDF, но как получить TF-IDF?
Из моего кода ниже:
def dot(docA,docB):
the_sum=0
for (key,value) in docA.items():
the_sum+=value*docB.get(key,0)
return the_sum
def cos_sim(docA,docB):
sim=dot(docA,docB)/(math.sqrt(dot(docA,docA)*dot(docB,docB)))
return sim
def doc_freq(doclist):
df={}
for doc in doclist:
for feat in doc.keys():
df[feat]=df.get(feat,0)+1
return df
def idf(doclist):
N=len(doclist)
return {feat:math.log(N/v) for feat,v in doc_freq(doclist).items()}
tf_med=doc_freq(bow_collections["medline"])
tf_wsj=doc_freq(bow_collections["wsj"])
idf_med=idf(bow_collections["medline"])
idf_wsj=idf(bow_collections["wsj"])
print(tf_med)
print(idf_med)
Так что мне наконец удалось зайти так далеко, хотя я не могу найти информацию о том, что мне нужно делать в плане Python, я уверен, что математика есть, но я не чувствую необходимости тратить часы на попытки понять, что это значит. Просто быстрое заверение, вот что я получаю от tf_med:
{'NUM': 37, 'early': 3, 'case': 3, 'organ': 1, 'transplantation': 1, 'section': 1,
'healthy': 1, 'ovary': 1, 'fertile': 1, 'woman': 1, 'unintentionally': 1,
'unknowingly': 1, 'subjected': 1, 'oophorectomy': 1, 'described': 4, .... , }
И вот что я получаю от idf_med:
{'NUM': 0.3011050927839216, 'early': 2.8134107167600364, 'case': 2.8134107167600364,
'organ': 3.912023005428146, 'transplantation': 3.912023005428146, 'section':
3.912023005428146, 'healthy': 3.912023005428146, 'ovary': 3.912023005428146, 'fertile':
3.912023005428146, .... , }
Хотя сейчас я не знаю, как вычислить эти два значения вместе, чтобы получить мой TF-IDF и оттуда мои средние косинусные сходства. Я понимаю, что их нужно умножить, но как же я поступлю так!
1 ответ
Вы можете использовать scikit-learn:
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.feature_extraction.text import TfidfVectorizer
text1 ='eat big yellow bananas'
text2 ='eat big yellow potatos'
tfidf_vectorizer = TfidfVectorizer()
tfidf_matrix = tfidf_vectorizer.fit_transform([text1,text2])
similarity = cosine_similarity(tfidf_matrix[0:1], tfidf_matrix)