Скрипт для создания частотного словаря

John Stejnbeck Travels with Charley in search of america

Некоторые вещи приводят в замешательство если посмотреть на них в ретоспективе. Пять лет в школе я учил английский язык. Затем ещё 5 лет в институте. Итого 10 лет изучения английского языка не дали никаких видимых результатов. Можно это списать на полное отсутствие заинтересованности, так как большинство из нас живших за железным занавесом не видели перспективы применить свои знания английского на практике. Однако занавес упал и вместе с этим появилась возможность ездить в другие страны и потребность продолжить изучать английский язык. В 90-х годах моя американская знакомая Тереза, подарила мне аудио книжку издательства PENGUIN BOOKS. По-английски я читал в основном техническую литературу по микроэлектронике и программированию, но слабо понимал беглую речь и совершенно не мог связать двух слов в устной беседе. Мне понравилась возможность иметь текст перед глазами и слышать, как произносятся слова.

Это было коробочное подарочное издание, где находилась в мягком переплёте книжка, и к ней шесть компакт аудиокассет. Загоревшись я начал читать её и слушать кассеты. Но кассетный аудиоплеер плохо приспособлен к тому чтобы переслушивать те моменты которые плохо расслышал. Очень неудобно пользоваться перемоткой. И я оцифровал кассеты и стал слушать с компьютера. Постепенно моя цель углубить свои познания английского языка отошла на второй план и это привело к тому, что спустя годы и даже десятиления, к своему сожалению я до сих пор не прочёл эту 277-ми страничную книгу. Но каждый раз когда я рылся в книжном шкафу она попадалась на глаза и у меня возникало услойчивое желание прочесть её. И вот вечерами я снова стал её читать. С трудом добравшись до 20-х страниц я уверился в том, что мне совершенно необходим частотный словарь. Возможно это очередная попытка моей лени избавиться от задачи которую она не хочет выполнять. Но лень и здесь получила отпор. Как оказалось на английском языке эту книжку не так просто найти в электронном виде в свободных источниках. Поэтому мне пришлось отсканировать её и распознать. Я сделал epub книжку, а финалом этой работы стал словарь построенный bash скриптом создающим частотный словарь любого текста поданного на вход. Без изысков просто и сердито. Побил на слова привёл к малому регистру, удалил лишние символы, отсортировал и получит список уникальных слов с частотами появления.

Скрипт двухпроходный. Первым проходом он создаёт текстовый файл из epub книжки. Это нужно для того чтобы из файла вычистить лишнее. Лишнее можно отрезать в текстовом редакторе, я использую mcedit.

#!/bin/bash

  TMPFNAME="a-tmp.html"

  if [ $# -ne 1 ] ; then
    echo "Give param 1 or 2 for first and second pass."
    exit
  fi
  if [ $1 -eq 1 ] ; then
    einfo -q -p "John Steinbeck - Travels with Charley in Search of America - 1962.epub" | iconv -f UTF-8 -t ASCII//TRANSLIT > "${TMPFNAME}"
    RESULT=`lynx -dump "${TMPFNAME}"`
    echo "${RESULT}" > "${TMPFNAME%.*}.txt"
    rm "${TMPFNAME}"
    read -p 'Type Y if you want to edit tmpfile: ' -n 1 -r </dev/tty
    echo
    if [[ ${REPLY} =~ ^[Yy]$ ]] ; then
      mcedit "${TMPFNAME%.*}.txt"
      echo "Run script again with parameter 2"
    else
      echo "Edit file \"${TMPFNAME%.*}.txt\" and run script again with parameter 2"
    fi
  else
    TMPFNAME="a-tmp.html"
    cat "${TMPFNAME%.*}.txt" | sed -e 's/[ \t]\+/ /g' | tr -d '",.!?(){}[]\\/:;' | tr '[:upper:]' '[:lower:]' | sed -e 's/--/ /g' | tr ' ' '\n' | sed -e '/^ *$/d' | sed -e 's/^'\''//g;s/'\''$//g' | sed -e '/^[0-9]\+$/d' | sed -e '/^[ ]*$/d' | sort | uniq -c > frequency-dict.txt
    cat frequency-dict.txt | sort -k1,2 -nr > frequency-dict-sorted.txt
    read -p 'Type Y if you really want to delete tmpfile: ' -n 1 -r </dev/tty
    echo
    [[ ${REPLY} =~ ^[Yy]$ ]] && rm "${TMPFNAME%.*}.txt"
  fi

Для того чтобы скрипт отработал должны быть установлены

# yum install ebook-tools lynx

Как выяснилось, в книжке Джона Стейнбека “Travels with Charley in Search of America” 74652 слова. Из них уникальных — 9007 и примерно половина слов (4753) встречается только один раз. Теперь осталось выбросить из словаря те слова значение которых я знаю и построить словарь неизвестных мне слов. Моя лень подсказывает мне написать очередной скрипт. Грузим слово из моего частотного словаря и находим для него перевод в онлайн словарях. Если предположить что я знаю хотя бы половину слов и учить по 40 слов в день то потребуется примерно полгода чтобы освоить Стейнбека в подлиннике. А может как в том мультике: лучше полгода потерять зато потом за вечер прочитать?