понедельник, 18 октября 2010 г.

Anki. Читаем текст без словаря

Хочу сразу огорчить, волшебного вмешательства высших сил через TCP/IP не будет :).

А произойдет вот что.
  1. Возьмем текст который хотим прочитать без словаря
  2. Сохраним его в файл
  3. Приведем его к виду, когда в каждой строчке будет по одному слову, и удалим все знаки препинания и цыфры
  4. сохраним его дважды, и в одном файле удалим все слова которые незнаем, оставив лишь те которые знаем и предлоги. типа "a" "to" и прочие ништяки
  5. скачаем волшебный скрипт, который сделает нам из этих 2х файлов (слова из текста и слова которые мы знаем) деку, с произношением переводом и картинками
  6. Симпортируем результат в Anki.
  7. Ну а тут уже все зависит от вас, как долго вы эту деку будете мусолить в anki =)
также скрипт будет полезен тем кто хочет например скачать произношения из консоли с сайта, скачать перевод с консоли или скачать и трансформировать несколько изображений с гугла и собрать гифку.
Внизу данной статьй есть видео, как это все в конечном итоге будет выглядеть.

Ну чтож. начнем.
  1. Установим необходимые пакеты (curl, imagemagick)
    $ sudo apt-get install curl imagemagick
    
  2. создадим папку в которой будем работать и проследуем в нее
    $ mkdir ankideck&&cd ankideck
    
  3. выкачаем скрипты (один который работает с поисковиком гугл по картинкам и 2й основной который и создаст деку)
    $ wget https://sites.google.com/site/nicloaynidvoray/filelist/google_collector && wget https://sites.google.com/site/nicloaynidvoray/filelist/deckgen
    
    и дадим им права на выполнение
    $ chmod a+x deckgen&& chmod a+x google_collector 
    
  4. Выберем текст, я же возьму слова из предыдущей статьи про phrasal verbs c данного сайта
    • Обычным копипастом (чтоб не мучатся с тегами ) копируем это в новый файл и сохраняем в папку которую создали например с именем src
    • получилось что то типа этого (показывает несколько первых строчек)
      $ head src     
      Phrasal Verbs - Ordered List by Verbs
      
       
      
      Phrasal Verb
      
      Meaning
      
      Examples
      
      
    • ничего страшного что есть куча пустых строчек и т.п., это все уберется далее
  5. Если хотите составить список слов которые вы знаете вручную, то формат прост (новая строка отдельное слово), я же покажу как взять текущие слова вывести список уникальных и убрать все лишнее
    • выводим список слов в файл known.words
      $ cat src|tr '1234567890!@#$%^&*()-=+_?/}{[]—£"' ' '|sed 's|  *| |g;s| |\n|g'|sed "s|^'||g;s|'$||g; s|^.$||g"|tr "[:upper:]" "[:lower:]"|sort|uniq >known.words
      
    • посмотрим сколько тут слов
      $ cat known.words|wc -l                                                                                                                
      2271
      
      мда... не утешительно.. всю ноч придется учить.. как бы не полярную :)
      ну да ладно..
    • открываем файл known.words в любом редакторе и удаляем от туда все незнакомые слова
      у меня получилось около 10 слов.
  6. Вобщем то все. Вот что у нас лежит в папке: 2 скрипта и 2 файла
    ls
    deckgen  google_collector  known.words    src
    
    все что нужно, запускаем
    $ ./deckgen -i src -k known.words
    
    
    
    и идем пить, чай, потом смотрим что все это будет не быстро :) и идем спать. :)
  7. После импорта гегенируется файл anki_deck в папке result вот его то и нужно указать когда нажмете на import в anki. и Все бы хорошо.. но линки на медиаресурсы не совсем правильные инужно нажать на
    tools->advanced->Check Media Database и жимкнуть на Tag Cards

К сожалению деку всю выложить не получится, получилась около 500 метров, пока нет идей как ее можно пошарить.

А выглядит это все вот так:

4 комментария:

ant комментирует...

Спасибо за интересный скрипт!
Нельзя ли что-то сделать с переводом. Кажется он теперь не работает. У меня в файлах (папка translate) что-то вроде:
table border="0" style="margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0"
То есть нет перевода.
Еще проблема, в том, что с фликра картинки не скачиваются, а только текст лицензии :(. Их очень много, к сожалению.
Кроме того, интересно насчет других языков. Ваш скрипт в-принципе, практически универсален для создания словарей для любых других языков. Не могли ли вы подсказать, что нужно поменять в скрипте, для того чтобы получать перевод и звук для испанского, например?
Спасибо!

ant комментирует...

Еще вопрос: Нельзя ли как-то искать картинки + звук по предложениям, не по-словам. Т.е., например, набор предложений перечисленных через точку с запятой или каждое с новой строки.

Unknown комментирует...

Гуглы - фанаты по поводу поменять чтонибудь в протоколе, плюс всегда надо работать с таймаутами. По поводу картинок, гугл кеширует их у себя, поэтому можно выкачивать с кеша (хз как, но developer tools в хромиум поможет понять, плюс можно нагуглить).

про языки, там в функции generateText видно обращение к hl=en sl=en tl=ru думаю нужно менять там. Про звук - все зависит от сайта, в скрипте выкачивае с сайта www.answers.com - не знаю работает или нет сейчас.


Вобщем все это надо переписывать, но мне это на текущий момент вовсе не интересно.

ant комментирует...

Ясно, благодарю за объяснение :).
Звук есть, то есть он скачивается без проблем. Мешают только картинки (точнее их отсутствие) с фликра и подобных. Я попытаюсь это исправить, но думаю что не справлюсь. К сожалению я не умею писать скрипты, поэтому буду радоваться тому, что работает :).

Спасибо за скрипт!