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?).