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 |