Анализируйте частоту слов для определения связи между PDF-документами. Организация большой коллекции по категориям требует непосредственного знакомства с каждым документом. Осуществить это практически невозможно.

Предлагаем два основных Bourne shell-сценария, которые определяют степень подобия двух PDF-документов. С их помощью можно категоризировать PDF-документы, идентифицировать неправильно зарегистрированные документы или предложить связанный материал своим читателям. Их логика доступна для любого языка сценариев. Чтобы установить язык Bourne shell в Windows, см. раздел «Средства для разработки дополнений к программе Acrobat».

Эти сценарии используют следующие опции командной строки: pdftotext, sed (Windows-пользователи могут посетить вебстраницу http://gnuwin32.sf.net/packages/sed.htm), sort, uniq, cat и wc (Windows-пользователи могут посетить веб-страницу http://gnuwin32.sf.net/packages/textutils.htm). Эти средства доступны для большинства платформ. Вот краткое описание их функций:

  • pdftotext — Конвертирует PDF-документы в открытый текст.
  • sed — Фильтрует текст и выполняет замены.
  • sort — Сортирует строки текстовых файлов.
  • uniq — Удаляет двойные строки из сортированного файла.
  • cat — Связывает файлы.
  • wc — Выводит количество байт, слов и строк файла.

Первый сценарий, wordlist.sh, из PDF-файла создает текстовый файл, содержащий сортированный список слов, которые не менее чем дважды встречаются в этом документе. Сохраните этот сценарий на диске как wordlist.sh, а затем, в случае необходимости, примените к нему команду chmod 700:

#!/bin/sh
pdftotext $1 — | \
sed’s//\n/g’|\
sed ‘s/[ˆA-Za-z]//g’ | \
sed ‘/ˆ$/d’ | \
sed ‘y/ABCDEFGHDKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/’ | \
sort | \
uniq -d > S1.words.txt

Сначала документ в формате PDF конвертируется в текст. Затем каждое слово помещается в отдельную строку. Любые неалфавитные символы удаляются, так что you’ll, например, становится youll; удаляются все пустые строки, все символы переводятся в нижний регистр; слова сортируются, и создается список слов, которые появляются не менее чем дважды. Выходной файл имеет то же имя, что и входной, но добавляется расширение .words.txt.

Если вы вызываете wordlist.sh следующим образом:

wordlist.sh mydocl.pdf

то он создает текстовый файл mydocl.pdfwords.txt. Например, список слов для документа Brian Eno: His Music and the Vertical Color of Sound (http://www.pdfhacks.com/eno/) содержит:

anything
anyway
anywhere
apart
aperiodic
aphorisms
арollo
apparatus
apparent
apparently
appeal
appear

Второй сценарий, percent_overlap.sk, сравнивает два списка слов и сообщает, какой процент слов используется совместно. Если сравнить документ сам с собой, то его перекрытие будет равно 100 %. Процент перекрытия рассчитывается с использованием длины более короткого списка слов, поэтому, если взять фрагмен документа и сравнить его с полным документом, то сценарий также сообщит о 100%-ом перекрытии.

Для двух любых полностью несвязанных документов перекрытие может достигать 35 %, т. к. документы, написанные на одном языке, используют много одинаковых слов. Два несвязанных романа могут иметь значительное перекрытие. Два несвязанных технических документа такого перекрытия иметь не будут.

Обратите внимание на то, что в этом Bourne shell-cцeнарии мы используем символы (‘) , а не апострофы (‘). Символ обратной галочки находится на клавише с тильдой (~).

Сохраните этот сценарий на диске как percent_overlap.sh, а затем, в случае необходимости, примените к нему команду chmod 700:

#!/bin/sh
num_words_l=`cat $1 | wc -l`
num_words_2=vcat $2 | wc -l`
num_common_words=` sort $1 $2 | uniq -d | wc — l`
if [ $num_words_1 -lt $num_words_2 ]
then echo $(( 100 * $num_common_words/$num_words_1))
else echo $(( 100 * $num_common_words/$num_words_2 ))
fi

Запустите сценарий percent_overlap.sh на выполнение следующей командой, и он возвратит значение перекрытия между двумя документами как единственное число (в этом примере перекрытие равно 38 %):

$ percent_overlap.sh mydocl.pdf.words.txt mydoc2.pdf.words.txt

Если применить этот сценарий к нескольким документам, то появятся разнообразные значения взаимосвязи. Например, таблица показывает полные перекрытия между различными документами моего компьютера.

Таблица. Результаты сравнения различных документов с помощью сценария percent_overlap.sk

A

B

C

D

E

F

G

A=PDF Reference, 1.4

100

98

65

36

48

50

35

B=PDF Reference, 1.5

98

100

67

37

51

52

34

C=PostScript Reference, Third Edition

65

67

100

38

47

49

36

D=The ANSI C++ Specification

36

37

38

100

38

40

25

E=Corporate Annual Report #1

48

51

47

38

100

62

49

F=Corporate Annual Report #2

50

52

49

40

62

100

52

G=Brian Eno Book by Eric Tamm

35

34

36

25

49

52

100