Tenho um projeto de classificação de documentos em que estou obtendo o conteúdo do site e depois atribuindo um dos vários rótulos ao site de acordo com o conteúdo.
Eu descobri que o tf-idf poderia ser muito útil para isso. No entanto, eu não tinha certeza de quando exatamente usá-lo.
Supondo que um site que se preocupe com um tópico específico faça menção repetida, esse foi o meu processo atual:
- Recuperar conteúdo do site, analisar o texto sem formatação
- Normalizar e conter o conteúdo
- Tokenize em unigramas (talvez bigrams também)
- Recupere uma contagem de cada unigrama para o documento fornecido, filtrando palavras de tamanho baixo e de ocorrência baixa
- Treine um classificador como NaiveBayes no conjunto resultante
Minha pergunta é a seguinte: Onde o tf-idf se encaixaria aqui ? Antes de normalizar / stemming? Depois de normalizar, mas antes de tokenizar? Depois de tokenizar?
Qualquer insight seria muito apreciado.
Editar:
Após uma inspeção mais minuciosa, acho que posso ter entendido mal como o TF-IDF opera. Na etapa acima de 4 que eu descrevo, eu teria que alimentar a totalidade dos meus dados em TF-IDF de uma vez? Se, por exemplo, meus dados forem os seguintes:
[({tokenized_content_site1}, category_string_site1),
({tokenized_content_site2}, category_string_site2),
...
({tokenized_content_siten}, category_string_siten)}]
Aqui, a estrutura mais externa é uma lista, contendo tuplas, contendo um dicionário (ou mapa de hash) e uma string.
Eu teria que alimentar a totalidade desses dados na calculadora TF-IDF de uma vez para alcançar o efeito desejado? Especificamente, observei o TfidfVectorizer do scikit -learn para fazer isso, mas estou um pouco inseguro quanto ao seu uso, pois os exemplos são escassos.
fonte
({tokenized content}, category)
. Como eu tenho os sites do conjunto de treinamento em um banco de dados e já categorizados, isso não é um problema. Os rótulos que o classificador poderá aplicar serão apenas os que foram vistos no conjunto de treinamento anotado, correto?