繁体   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