0

我有一個下面的數據幀df,這是我從sframe的Python:如何計算TF-IDF的大型數據集

URI           name   text 
0 <http://dbpedia.org/resource/Digby_M...  Digby Morrell digby morrell born 10 october 1979 i... 
1 <http://dbpedia.org/resource/Alfred_...  Alfred J. Lewy alfred j lewy aka sandy lewy graduat... 
2 <http://dbpedia.org/resource/Harpdog...  Harpdog Brown harpdog brown is a singer and harmon... 
3 <http://dbpedia.org/resource/Franz_R... Franz Rottensteiner franz rottensteiner born in waidmann... 
4 <http://dbpedia.org/resource/G-Enka>     G-Enka henry krvits born 30 december 1974 i... 

我已經做了轉換的以下內容:

from textblob import TextBlob as tb 

import math 

def tf(word, blob): 
    return blob.words.count(word)/len(blob.words) 

def n_containing(word, bloblist): 
    return sum(1 for blob in bloblist if word in blob.words) 

def idf(word, bloblist): 
    return math.log(len(bloblist)/(1 + n_containing(word, bloblist))) 

def tfidf(word, blob, bloblist): 
    return tf(word, blob) * idf(word, bloblist) 

bloblist = [] 

for i in range(0, df.shape[0]): 
    bloblist.append(tb(df.iloc[i,2])) 

for i, blob in enumerate(bloblist): 
    print("Top words in document {}".format(i + 1)) 
    scores = {word: tfidf(word, blob, bloblist) for word in blob.words} 
    sorted_words = sorted(scores.items(), key=lambda x: x[1], reverse=True) 
    for word, score in sorted_words[:3]: 
     print("\tWord: {}, TF-IDF: {}".format(word, round(score, 5))) 

但這需要很多時間,因爲有59000文件。

有沒有更好的方法來做到這一點?

回答

1
  • 我很困惑這個問題。但我使用Spark在互聯網上找到了一些解決方案。在這裏,你可以看看:

    https://www.linkedin.com/pulse/understanding-tf-idf-first-principle-computation-apache-asimadi

  • 在另一方面我想theese方法,我沒有得到不好的結果。也許你想嘗試:

    • 我有一個單詞列表。此列表包含單詞,它是計數。
    • 我找到了這個單詞的平均數。
    • 我選擇了平均值的下限和上限。
      (例如下限=平均值/ 2和上限=平均值* 5)
    • 然後我創建了一個帶有上限和下限的新單詞列表。
  • 隨着theese我得到theese結果:
    正常化字矢量長度之前:11880
    平均數:19下界:9的上限:95
    正常化字矢量長度之後:1595

  • 餘弦相似性結果也更好。

相關問題