File size: 1,929 Bytes
c188624
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import pandas as pd
import numpy as np


# data = Conjunto de datos. Es un dataframe
# vocab = el vocabulario obtenido desde los documentos. Es una lista de cadenas.
# document_index = Nombre de la columna del dataframe en donde esta el id de los documentos
# text = Nombre de la columna del dataframe donde esta el texto de los documentos

def term_document_matrix (df, vocab, document_index, text):
    
    vocab_index = pd.DataFrame(columns=df[document_index], index=vocab).fillna(0)
    
    for word in vocab_index.index:
        for doc in df[document_index]:
            freq = df[df[document_index]==doc][text].values[0].count(word)
            vocab_index.loc[word,doc]=freq
    return vocab_index        # Devuelve un dataframe con la matriz de los documentos y sus frecuencias 



# vocab_index = Es el term document matrix que se calcula en la seccion anterior
# document_index = Serie conteniendo los ids de los documentos. 
# inv_df = Nombre de la columna que contiene la frecuencia inversa de los documentos calculada


def tf_idf_score(vocab_index, document_index, inv_df='inverse_document_frequency'):
    
    total_docx=len(document_index)
    vocab_index['document_frequency']=vocab_index.sum(axis=1)
    vocab_index['inverse_document_frequency']=np.log2(total_docx/vocab_index['document_frequency'])
    
    for word in vocab_index.index:
        
        for doc in document_index:
            
            tf_idf=np.log2(1+vocab_index.loc[word,doc]) * np.log2(vocab_index.loc[word][inv_df])
            vocab_index.loc[word]['tf_idf_'+str(doc)]=tf_idf
                           
        return vocab_index    # Devuelve un dataframe que contiene: matriz de los terminos del documento,
                              # la frecuencia de los documentos, la frecuencia inversa de los documentos,
                              # y el score tf_idf 
    
    

def generar_archivo_indexado():



    return 0