Python TF-IDF product



我正在尝试从我的TF_NORM矩阵和IDF向量创建TF-IDF。我知道他们没有相同的维度,所以我迷失了如何将两者倍增。我是否需要使用TF_NORM矩阵添加减少内容或转换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 X N的向量,也可以是N X N矩阵的对角线,否则所有零都可以根据最终的算术
  • 来工作。
  • 现在可以说,您有一些大小K的文本(不一定是用于提取词汇的原始集合)。根据词汇量,每个文本都将被象征性的频率计数 N的向量,以便整个 K尺寸的集合将成为大小 K X N的矩阵。
  • 因此,我们有K X N的TF_MATRIX,大小N X N的IDF_MATRIX或大小1 X N的IDF_VECTOR。要获取TF_IDF_MATRIX,您要么需要执行矩阵乘法:TF_MATRIX * IDF_MATRIX或元素-Wise Matrix和vector乘法TF_MATRIX * IDF_VECTOR。两者都将实现将每个i-th TF乘以i-th IDF重量的目标。
  • 您可以在其中一些步骤之间进行一些正常化,但这永远不会更改这些维度中的任何一个,只有相应位置中的数字值。

希望这会有所帮助!

最新更新