簡體   English   中英

Python TF-IDF產品

[英]Python TF-IDF product

我正在嘗試從我的TF_norm矩陣和IDF向量創建TF-IDF。 我知道它們的尺寸不一樣,所以我不知道如何將兩者相乘。 我是否需要使用TF_norm矩陣添加reduce或轉換IDF向量? 從這里完全迷路了。

#c) Normalized term frequency
count=0 
total=lexicon_dim
matrix_TF_norm=[[0 for c in range(lexicon_dim)] for r in range(4)]
for c in lexicon:
    matrix_TF_norm[0][count]=c
    matrix_TF_norm[1][count]=hamlet_tok_norm_stop_stem.count(c)/total
    matrix_TF_norm[2][count]=macbeth_tok_norm_stop_stem.count(c)/total
    matrix_TF_norm[3][count]=pinocchio_tok_norm_stop_stem.count(c)/total
    count=count+1
print(matrix_TF_norm)
#d) TF-IDF
vector_idf=[] #initialize IDF vector
for i in range(lexicon_dim): #run through loop for each token in lexicon
    df=0
    if matrix_binary[1][i]==1: #[1] = doc1
        df=df+1
    if matrix_binary[2][i]==1:
        df=df+1
    if matrix_binary[3][i]==1:
        df=df+1
    #add them together
    idf=math.log(3/df)
    vector_idf.append(idf)
print(vector_idf)

import numpy as np
vector_idf=np.diag(vector_idf)
tf_idf=np.cross(vector_idf,matrix_TF_norm)

很難遵循您的代碼,但是我可以分解尺寸和算術運算。

  • 這一切都始於固定的詞匯表,比方說大小N ,它是從一些文本集中提取的。
  • 這意味着您有N IDF權重。 它可以是大小為1 XN的向量,也可以是NXN矩陣的對角線(全為零),否則都可以工作,具體取決於最終算法
  • 現在,假設您有一些大小為K的文本集合(不必一定是用於提取詞匯表的原始集合)。 根據詞匯表,每個文本都將被標記為術語頻率計數大小為N的向量,因此整個K大小的集合將成為大小為KXN的矩陣。
  • 因此,我們有KXN的KXN ,大小為NXN或大小為1 XN idf_vector。 要獲得tf_idf_matrix,您需要執行矩陣乘法:tf_matrix * idf_matrix或逐元素矩陣和矢量乘法tf_matrix * idf_vector。 兩者都將達到將每個第i-th tf乘以i-th i-th idf權重的目標。
  • 您可以在其中一些步驟之間進行一些歸一化,但是永遠不會更改任何這些尺寸,僅更改相應位置的數值即可。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM