Создать собственный список слов

Я хочу создать пользовательский список (научных) слов для таких целей, как проверка орфографии и OCR, основанная на моей коллекции научных статей в формате pdf. Используя pdftotext я могу легко создать текстовый файл, содержащий нужные слова для моего научного поля. Однако файл будет загрязнен

  • слова, которые не являются специфическими для науки (и которые также содержатся в общем словаре)
  • слова, которые являются результатом неправильного преобразования, например, формул (включая слова, которые включают специальные символы и т. д.),

Я хочу избавиться от более позднего, потребовав, чтобы отдельные слова имели минимальную длину, не содержат специальных символов и появляются несколько раз в списке. Во-вторых, я хочу избавиться от первого, сравнив его со вторым списком слов. Мои вопросы:

Это звучит как хороший план для вас? Существуют ли существующие инструменты для этой задачи? Как бы вы это сделали?

2 Solutions collect form web for “Создать собственный список слов”

Чтобы выбрать слова не менее 4 символов, найденные не менее 5 раз и не найденные в / usr / share / dict / words в файлах PDF в текущем каталоге.

  find . -name '*.pdf' -exec pdftotext {} - \; | tr -cs '[:alpha:]' '[\n*]' | tr '[:upper:]' '[:lower:]' | grep -E '.{4}' | sort | uniq -c | awk '$1 > 4 {print $2}' | comm -23 - <(tr '[:upper:]' '[:lower:]' < /usr/share/dict/words|sort -u) 

Вам нужна оболочка с поддержкой замещения процесса ( ksh , zsh или bash ).

Если вы все равно будете использовать perl , вы также можете сделать все это в perl :

 find . -name '*.pdf' -exec pdftotext {} - \; | perl '-Mopen ":locale"' -nle ' s/^\S+//;s/\S+$//;y/ \t/ /s; next unless length > 40; $w{lc$_}++ for /[[:alpha:]]{4,}/g; END{open W,"</usr/share/dict/words"; while(<W>){chomp;delete $w{lc$_}}; print for grep {$w{$_}>4} keys %w}' 

Звучит как очень типичный план. Для этого я использовал бы скрипты shell. Вы не имеете дело с чрезмерно большим количеством текста, поэтому производительность должна быть адекватной, а скрипты оболочки легко писать и повторно запускать. Мой первый разрез был бы таким скриптом:

 pdf2text files | tr -cs '[A-Za-z]' '\n' | tr '[AZ]' '[az]' | awk '{ if (length > 6) {print $1;}}' | fgrep -v -f /usr/share/groff/current/eign | sort | uniq -c | awk '{print $2, $1}' | sort -nr +1 -2 | head -20 

Это даст вам 20 наиболее часто встречающихся слов, длина которых больше 6.

Вы можете добавить шаги, выполнить шаги, настроить параметры, чтобы узнать, что вы получаете.

fgrep является единственным нечетным и требует установки GNU troff . Файл / usr / share / groff / current / eign – это что-то вроде 100 наивысших частотных слов на английском языке. Флаг «-v» передает только те слова, которые не отображаются в файле «eign», поэтому он использует «eign» в качестве стоп-листа. Если вам не нравится, что GNU troff как обычные слова, вы можете сделать свой собственный и использовать этот файл на шаге fgrep .

Interesting Posts

Ошибка Sed, заменяющая частичную строку переменной

Как я могу запустить setfacl -m group: group2: rwx / dev / video0 / dev / snd / * при входе в систему?

Pulse Audio – не может видеть и контролировать линию в регуляторе громкости

Как прочитать пароль пользователя и реализовать его в последующих командах?

сохранение ssh удаленного исполняемого командного выхода для переменной блокируется. соединение не заканчивается?

Проблема при загрузке: «Загрузка пользовательских модулей »

Live Linux и FAT32

Почему многозначительно игнорируют мои подстановочные знаки?

неблокирующая / многопоточная кошка

Индивидуальный формат писем Bugzilla

протоколирование и отладка виртуальных машин qemu

Zorin / Windows 7 Dual Boot на новом жестком диске, без GRUB!

Как получить coredump с нехваткой дискового пространства на RedHat Linux

sudo не позволяет мне запускать cp

Как перезагрузить сервер с зашифрованным разделом LUKS

Linux и Unix - лучшая ОС в мире.