Discutimos uma introdução à recuperação de informação no post Star Wars e a Introdução à Recuperação de Informação, mostrando como calcular um score baseado na frequência de um termo em um documento - score de termo frequência. No post de hoje, entenderemos a métrica IDF (Inverse Document Frequency) para podermos construir nosso motor de busca baseado na estatística de TF-IDF.
O IDF mede a importância de um termo relacionado a um conjunto de documentos. Imagine que você possua um documento com 100 palavras e que a palavra Python apareça 5 vezes. O score TF para a palavra Python neste é 5/100 = 0.05. Agora, vamos supor que você tenha 1000 documentos e que a palavra Python apareça em 100 deles. O IDF é calculado como o log(1000/100) = 1. Assim, podemos calcular o TF-IDF como TF-IDF = TF*IDF.
Nosso motor de busca baseia-se exatamente neste cálculo. Em nosso exemplo, temos um diretório contendo alguns arquivos do tipo texto (poderiam ser milhares deles, o que justificaria um mecanismo de busca para facilitar qualquer consulta) com as sinopses de cada filme da primeira trilogia da séria Star Wars. Queremos encontrar qual é o arquivo (filme) mais relevante quando procuramos pelos termos "Luke" e "Imperio".
O código lista todos os documentos txt existentes em um diretório. Em seguida, faz a leitura de cada um e cria um dicionário relacionando o nome do arquivo com seu respectivo conteúdo. Por fim, fazemos os cálculos para o TF, IDF e o TF-IDF.
Como vemos na figura abaixo, separamos cada etapa do calculo do score e mostramos na tela.
Como resultado final, temos que o documento mais relevante para a busca "Imperio" e "Luke" é o documento relacionado ao StarWars6. Como prova real, temos o seguinte conteúdo para este documento:
"Luke Skywalker voltou ao seu planeta natal, Tatooine, na tentativa de salvar seu amigo Han Solo das garras de Jabba, o Hutt. Luke ainda nao sabe que o Imperio Galactico iniciou secretamente a construcao de uma nova estacao espacial belica, mais poderosa que a primeira e temida Estrela da Morte. Quando estiver pronta, esta arma definitiva certamente significara o fim do pequeno grupo de rebeldes que luta para devolver a liberdade a galaxia..."
O arquivo searchDocuments.py está disponível em nosso Git.
Um abraço e até o próximo post!
0 comentários:
Postar um comentário