Tengo un proyecto de clasificación de documentos donde obtengo contenido del sitio y luego asigno una de las numerosas etiquetas al sitio web de acuerdo con el contenido.
Descubrí que tf-idf podría ser muy útil para esto. Sin embargo, no estaba seguro de cuándo exactamente usarlo.
Asumiendo que un sitio web que se ocupa de un tema específico hace mención repetida de él, este fue mi proceso actual:
- Recupere el contenido del sitio, analice el texto sin formato
- Normalizar y detener el contenido
- Tokenizar en unigramas (tal vez bigrams también)
- Recupere un recuento de cada unigrama para el documento dado, filtrando palabras de baja longitud y baja ocurrencia
- Entrene a un clasificador como NaiveBayes en el conjunto resultante
Mi pregunta es la siguiente: ¿Dónde encajaría tf-idf aquí ? ¿Antes de normalizar / detener? ¿Después de normalizar pero antes de tokenizar? ¿Después de tokenizar?
Cualquier idea sería muy apreciada.
Editar:
Tras una inspección más cercana, creo que me he encontrado con un malentendido sobre cómo opera TF-IDF. En el paso 4 anterior que describo, ¿tendría que ingresar la totalidad de mis datos en TF-IDF de una vez? Si, por ejemplo, mis datos son los siguientes:
[({tokenized_content_site1}, category_string_site1),
({tokenized_content_site2}, category_string_site2),
...
({tokenized_content_siten}, category_string_siten)}]
Aquí, la estructura más externa es una lista, que contiene tuplas, que contiene un diccionario (o hashmap) y una cadena.
¿Tendría que introducir la totalidad de esos datos en la calculadora TF-IDF de una vez para lograr el efecto deseado? Específicamente, he estado mirando el scikit-learn TfidfVectorizer para hacer esto, pero no estoy seguro de su uso, ya que los ejemplos son bastante escasos.
fuente
({tokenized content}, category)
. Como tengo el conjunto de sitios web de capacitación en una base de datos y ya categorizado, no es un problema. Las etiquetas que el clasificador podrá aplicar solo serán aquellas que haya visto en el conjunto de entrenamiento anotado, ¿correcto?