2017-11-27 16 views
0

TF_norm 행렬과 IDF 벡터에서 TF-IDF를 만들려고합니다. 나는 그들이 같은 차원을 가지고 있지 않다는 것을 알고 있습니다. 그래서 나는 어떻게이 둘을 번식시킬 수 있는지에 대해 분실합니다. TF_norm 행렬에 축소 문자를 추가하거나 IDF 벡터를 변환해야합니까? 여기에서 완전히 잃어 버렸습니다.Python TF-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) 

답변

1

코드를 따라갈 수없는 종류이지만 크기 및 산술 연산을 세분화 할 수 있습니다.

  • 모두 고정 된 어휘로 시작되며, 일부 텍스트 모음에서 추출한 크기는 N입니다.
  • 이것은 IDF 가중치가 N임을 의미합니다. 이것은 크기가 1 X N 인 벡터이거나 N X N 행렬의 대각선이 될 수 있습니다. 그렇지 않으면 모두 0이됩니다. 둘 다 최종 산술에 따라 작동 할 수 있습니다.
  • 이제는 크기가 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 또는 요소 와이즈 행렬 및 벡터 곱셈 tf_matrix * idf_vector. 둘 다 i-th tf에 i-th IDF 가중치를 곱하는 목표를 달성 할 것입니다.
  • 이러한 단계 중 일부에서 일부 정규화를 수행 할 수 있지만 해당 차원의 숫자 만 변경하지는 않습니다.

희망이 있습니다.