웹에서 tf-idf와 코사인 유사성을 계산하는 파이썬 튜토리얼을 발견했습니다. 나는 그것으로 놀고 그것을 조금 바꾸려고 노력하고있다.TF-IDF가 파이썬이고 원하는 결과가 없습니다.
문제는 이상한 결과가 거의없고 의미가 거의 없습니다.
예를 들어 3 개의 문서를 사용하고 있습니다. [doc1,doc2,doc3]
doc1과 doc2는 유사하며 doc3은 완전히 다릅니다.
결과 위치 :
가[[ 0.00000000e+00 2.20351188e-01 9.04357868e-01]
[ 2.20351188e-01 -2.22044605e-16 8.82546765e-01]
[ 9.04357868e-01 8.82546765e-01 -2.22044605e-16]]
먼저, 주 대각선의 수는 그 후 1 0이 아닌되어야한다고 생각 DOC1 및 doc2 대한 유사성 점수는 약 0.22와 DOC1 함께 doc3 약 0.90. 나는 그 반대의 결과를 기대했다. 제 코드를 확인해 주시고 제가 그 결과가 왜 있는지 이해할 수 있도록 도와 주시겠습니까?
Doc1, doc2 및 doc3은 토큰 화 된 텍스트입니다. 당신은 그런 sklearn 같은 다른 패키지를 시도 할 경우
articles = [doc1,doc2,doc3]
corpus = []
for article in articles:
for word in article:
corpus.append(word)
def freq(word, article):
return article.count(word)
def wordCount(article):
return len(article)
def numDocsContaining(word,articles):
count = 0
for article in articles:
if word in article:
count += 1
return count
def tf(word, article):
return (freq(word,article)/float(wordCount(article)))
def idf(word, articles):
return math.log(len(articles)/(1 + numDocsContaining(word,articles)))
def tfidf(word, document, documentList):
return (tf(word,document) * idf(word,documentList))
feature_vectors=[]
for article in articles:
vec=[]
for word in corpus:
if word in article:
vec.append(tfidf(word, article, corpus))
else:
vec.append(0)
feature_vectors.append(vec)
n=len(articles)
mat = numpy.empty((n, n))
for i in xrange(0,n):
for j in xrange(0,n):
mat[i][j] = nltk.cluster.util.cosine_distance(feature_vectors[i],feature_vectors[j])
print mat
이미이 라이브러리를 사용해 보았습니다. 문제는 텍스트를 준비하기 위해 자체 기능을 사용하고 싶다는 것이 었습니다 (스톱 어스 및 형태소 분석 제거) – Tasos