Term Frequency em um arquivo PDF

1

Eu preciso desenvolver um mecanismo de pesquisa com base na frequência de termos do documento, eu tenho um conjunto de dados de 17000 documentos PDF, existe uma maneira eu posso contar todas as palavras e suas ocorrências em um determinado documento?

Exemplo: você gostaria de ter respostas para?

Saída: Would = 1 você = 1 como = 1 to = 2 respostas = 1

    
por Prithvi514 23.10.2012 / 22:23

1 resposta

3

O problema geral de get text from a PDF é mais complicado do que parece. Uma vez que você tenha resolvido esse problema para sua satisfação, o problema se resume a determinar o termo frequência em um monte de arquivos de texto. Você deve ser capaz de implementar isso diretamente, ou então obter alguns conselhos sobre o stackoverflow.

Para obter texto de um PDF, você precisa considerar a maneira como os dados são estruturados em um PDF.

"Texto" pode ser qualquer um dos seguintes itens em um PDF:

  • Caracteres renderizados como imagens
  • Caracteres de texto individuais com elementos de espaçamento entre eles (o que pode dificultar a distinção entre "palavras", porque como você define quanto espaço deve haver entre as palavras para torná-lo uma palavra separada?)
  • Spans de texto comum
  • Conteúdo dinâmico (HTML, links, campos de formulário, vídeos, etc.)

Se todos os seus PDFs de origem aderirem a uma estrutura semelhante ou forem criados usando o mesmo programa, será fácil criar um programa para analisar com precisão a estrutura e extrair o texto de modo semiconfiável. No entanto ... se os seus PDFs são de diferentes autores e terceiros cuja produção de documentos você não tem controle, pode ser um pouco mais complicado.

As seguintes técnicas podem se aplicar à extração de texto do PDF:

  • Usando a tecnologia OCR (Optical Character Recognition, reconhecimento ótico de caracteres) para visualizar o PDF final renderizado e extrair o texto do que o programa OCR "vê".
  • Uso de ferramentas que entendem a arquitetura de baixo nível do documento PDF para analisar os elementos lógicos e determinar quais deles constituem texto (esse método, por si só, não conseguirá extrair texto de imagens, mas pode funcionar bem para documentos simples onde todo o texto é armazenado como texto simples ou texto de formatação leve).
  • Usando ferramentas proprietárias ou de código aberto que podem fazer uma combinação das duas técnicas acima.

Portanto, sua abordagem deve ser algo assim:

  • Determine se há alguma semelhança entre os PDFs de entrada, como a presença consistente (ou ausência) de texto renderizado em imagens, para definir o escopo de suas necessidades, em termos de quais técnicas de extração você precisa usar. Se você precisa trabalhar com o caso geral de qualquer entrada PDF, então você deve planejar o pior e assumir que será o texto em imagens, e que você irá precisar fazer o OCR.
  • Com base nos seus requisitos destilados, determine se há software existente (proprietário ou de código aberto ou de outra forma, dependendo de sua preferência), o que implementa a (s) técnica (s) necessária (s).
  • Do software disponível, determine qual é o mais fácil de integrar ao ambiente de programação / arquitetura que você está usando para o seu mecanismo de pesquisa (é em C? Java? .NET? E assim por diante).
  • Descobrir se você precisa fazer algum tipo de análise "à mão" personalizada ou digitalizar sobre a funcionalidade da biblioteca. Você pode fazer isso selecionando aleatoriamente um pequeno lote de PDFs (digamos, 25) fora de sua pilha; execute o algoritmo "PDF para texto" neles; e verificar manualmente se a saída extraída é precisa. Caso contrário, talvez seja necessário personalizar as bibliotecas que implementam as técnicas ou criar as suas próprias.
  • Uma vez que você tenha a funcionalidade PDF to text funcionando de forma satisfatória, seu problema resume-se à indexação do termo frequency em texto simples. Existem muitas técnicas para isso, de Mapear / Reduzir (veja Hadoop) para bancos de dados, até simplesmente armazenar um mapa hash na memória. A técnica que você usa dependerá da escala do seu programa; quanto hardware você pode jogar nele (um desktop? um cluster? um grande servidor? um mainframe?); e com que frequência você tem que executar o trabalho (constantemente? todas as noites? uma vez por ano?).
por 23.10.2012 / 22:40

Tags