Você precisa primeiro de alguma maneira mapear os 1000 arquivos com os 300 arquivos, em ordem.
No caso mais simples, você dirá "CIDOC Ontology 2.0 (1) .pdf", "CIDOC Ontology 2.0 (2) .pdf" e "CIDOC Ontology 2.0 (3) .pdf", por um lado, e " CIDOC ontology.pdf "por outro.
Agora, as melhores abordagens que posso imaginar são:
-
Usando
pdftk
oupdf2json
, extraia o número de páginas do grupo 1000 e veja se a soma corresponde ao grupo 300:12, 9, 10 vs. 31 = OK 12, 9, 10 vs 22 = BAD (and you might suspect section 2 is missing)
Este método é bastante básico e não reconhece três seções que estão fora de ordem.
-
Usando
pdf2ps
eps2ascii
, crie versões em texto de todos os arquivos. Dependendo do processo de PDF, eles podem estar quase ilegíveis, mas pouco importa: com um pouco de sorte, a ferramenta usada para aglutinar os arquivos não terá alterado as métricas de texto e o agrupamento. Se for assim, então a concatenação dos três arquivos será muito, muito parecida com o quarto arquivo (e se não, você o marcará como uma anomalia). Então, essas heurísticas devem funcionar:- a soma das saídas de "wc" dos três arquivos será igual (ou muito próxima) da saída do quarto arquivo.
- cat'ting os três arquivos de texto, ou o quarto arquivo, através de
cat file1 file2 file3 | sed -e "s # \ s # \ n # g" | ordenar
deve produzir listas de palavras quase idênticas (a saída de
diff -Bbawd
deve ser não mais do que três ou quatro linhas; idealmente, nenhuma). Se você omitir o estágio| sort
, as seções fora de ordem deverão ser reconhecíveis: se a verificação classificada corresponder e a não classificada não, você estará enfrentando uma situação fora da ordem.
A parte sed
dividirá as palavras, o que pode ajudar mesmo que a ferramenta de coalescer altere o texto de alguma forma. Uma mudança no kerning, com as palavras se dividindo diferentemente dentro do PDF ("homeostase" tendo se tornado "ho meos tas is" de "home osta sis"), tornará isso insuficiente; mas não é tão provável.
A dificuldade que vejo é combinar os arquivos raw com o final. Tendo uma amostra de cada um, eu provavelmente poderia preparar um script para executar a comparação.