![](/img/trans.png)
[英]How to build a TFIDF Vectorizer given a corpus and compare its results using Sklearn?
[英]how to compare two text document with tfidf vectorizer?
我有兩個不同的文本,我想使用 tfidf 矢量化來比較它們。 我正在做的是:
現在我在第 2 步之后得到的向量具有不同的形狀。 但是根據概念,我們應該對兩個向量具有相同的形狀。 只有這樣才能比較向量。
我究竟做錯了什么? 請幫忙。
提前致謝。
正如 G. Anderson 已經指出的那樣,為了在這方面幫助未來的人,當我們在文檔 D1 上使用 TFIDFVectorizer 的 fit 函數時,這意味着對於 D1,構建詞袋。
transform() 函數計算詞袋中每個詞的 tfidf 頻率。
現在我們的目標是比較文檔 D2 和 D1。 這意味着我們要查看 D1 中有多少單詞與 D2 匹配。 這就是為什么我們在 D1 上執行 fit_transform(),然后只有 D2 上的 transform() 函數會應用 D1 的詞袋並計算 D2 中標記的倒數頻率。 這將給出 D1 與 D2 的相對比較。
我是那些后來的人之一:)
所以我對 TF-IDF 的理解是 IDF 是計算兩個文檔中單詞(或 Ngram)的頻率? 因此,比較每個匹配的內容,並不能真正涵蓋該詞在兩個文檔中的常見程度以剔除常用詞嗎? 有沒有辦法在沒有索引錯誤的情況下使用 Ngrams 做到這一點?
ValueError:傳遞值的形狀是 (26736, 1),索引表示 (60916, 1)
# Applying TFIDF to vectors
#instantiate tfidVectorizers()
ngram_vectorizer1 = TfidfVectorizer(ngram_range = (2,2)) #bigrams 1st vector
ngram_vectorizer2 = TfidfVectorizer(ngram_range = (2,2)) #bigrams 2nd
ngram_vectorizert = TfidfVectorizer(ngram_range = (2,2)) #bigrams total
# fit model
ngram_vector1 = ngram_vectorizer1.fit_transform(text)
ngram_vector2 = ngram_vectorizer2.fit_transform(text2)
ngram_vectort = ngram_vectorizert.fit_transform(total)
ngramfeatures1 = (ngram_vectorizer1.get_feature_names()) #save feature names
ngramfeatures2 = (ngram_vectorizer2.get_feature_names()) #save feature names
ngramfeaturest = (ngram_vectorizert.get_feature_names())
print("\n\nngramfeatures1 : \n", ngramfeatures1)
print("\n\nngramfeatures2 : \n", ngramfeatures2)
print("\n\nngram_vector1 : \n", ngram_vector1.toarray())
print("\n\nngram_vector2 : \n", ngram_vector2.toarray())
#Compute the IDF values
first_tfidf_transformer_ngram=TfidfTransformer(smooth_idf=True,use_idf=True)
second_tfidf_transformer_ngram=TfidfTransformer(smooth_idf=True,use_idf=True)
total_tfidf_transformer_ngram=TfidfTransformer(smooth_idf=True,use_idf=True)
first_tfidf_transformer_ngram.fit(ngram_vector1)
second_tfidf_transformer_ngram.fit(ngram_vector2)
total_tfidf_transformer_ngram.fit(ngram_vectort)
# print 1st idf values
ngram_first_idf = pd.DataFrame(first_tfidf_transformer_ngram.idf_, index=ngram_vectorizer1.get_feature_names(),columns=["idf_weights"])
# sort ascending
ngram_first_idf.sort_values(by=['idf_weights']) #this one should really be looking towards something from the "Total" calculations if I'm understanding it correctly? ```
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.