Поиск в сканированных словарях - Версия для печати +- Aluarium (http://aluarium.net/forum) +-- Форум: Наука и техника (/forum-46.html) +--- Форум: Компьютеры (/forum-50.html) +--- Тема: Поиск в сканированных словарях (/thread-107.html) |
Поиск в сканированных словарях - Quasus - 12-08-2012 15:42 Сразу ограничение: Windows. Цель прекрасна. Есть отсканированный словарь. Мы хотим задавать слова, и чтобы словарь сам открывался на нужной странице. В таком случае словарь становится не менее удобным, чем электронный. Теоретически для поиска страницы нужно сделать индекс: например, выписать последнее слово на странице. Если иметь такой список, то для любого заданного слова можно рутинно вычислить страницу, на которой оно должно находиться. Делать индекс — занятие долгое и нудное, и компьютеру его не порчишь. Конечно, можно и нужно искать способы рационализации этой работы. Тем не менее, вопрос создания индексов мы рассматривать не будем. В принципе, практическая реализация поиска слова, если индекс имеется, не слишком сложна. Я хочу предложить одно из возможных решений. По сути это некий способ работать со словарями и индексами средствами языка Python. Во главу угла ставится универсальность и гибкость. В качестве приложений предлагаются конкретные решения с удобным минималистичным интерфейсом. Для непосредственного применения умение программировать не требуется. Через некоторое время ожидается английская документация. Пока постараемся обойтись примерами и вопросами/ответами. В программировании я дилетант, и это вообще мой первый опыт ООП. Поэтому сильно не пинайте. А замечаниям и советам буду очень благодарен. RE: Поиск в сканированных словарях - Quasus - 12-08-2012 15:44 Излагаю в расчёте на людей, не знакомых с Python’ом. Требования: Windows 1. Установить Python 3.* (http://www.python.org/getit/)ю 2. Установить SumatraPDF (http://blog.kowalczyk.info/software/sumatrapdf/download-free-pdf-viewer.html) 3. Распаковать прилагающийся архив туда где Python сможет его найти (например, в C:\Python 3.*\). Python 3 — потому что мы нацелены в будущее. SumatraPDF — симпатичный лёгкий просмотрщик, удобный для наших целей. Кроме прочего, удобно, что нн открывает и PDF, и DJVU (и ещё несколько форматов). Кстати, в SumatraPDF нажатие клавиш j и k эквивалентно стрелкам вниз и вверх — попробуйте, очень удобно. И можно работать. Предположим, у нас есть словарь и индекс к нему. Предположим, что индекс имеет простейшую мыслимую структуру: текстовый файл, строки которого являются списком последних слов (то есть статей) на каждой странице. Нам нужно написать для этого словаря модуль на Python. Модуль — это текстовый файл с расширением .py в кодировке utf-8. В качестве примера рассмотрим модуль cceld.py, позволяющий работать с Copious and Critical English-Latin Dictionary. Код: from lookup import SDic, SimpleIndex Пояснения. Первой строчкой мы загружаем самодельные классы для работы со словарями (SDic) и индексами (SimpleIndex). Эту строчку трогать не надо. Затем мы создаём индекс index на основе текстового файла ccld.txt, который лежит в той же папке, где и скрипт. Наверно, ваш файл будет называться по-другому. Конечно, файл с индексом может лежать где угодно, и тогда нужно указывать полный путь. Аргумент firstpage важен: он указывает страницу PDF-файла, на которой располагается первое слово из индекса. Затем мы создаём словарь dic, указывая полный путь к файлу словаря. Аргумент index = index означает, что в качестве индекса передаётся созданный выше index. (Если бы мы назвали его ind, было бы index = ind.) Обратите внимание: в полном имени файла используются слэши, а не бэкслэши, и не нужны никакие дополнительные кавычки кроме ' в начале и конце. Имеет смысл использовать стандартное имя переменной для словарей в подобных модулях (например, dic). Это делает более удобным использование модулей в других скриптах. На этом модульная часть закончилась. Словарь готов для использования Python-ом. Этот модуль можно использовать и как скрипт, то есть запускать двойным щелчком. За это отвечает написанное ниже строки # simple console interface. Параллельно отметим, что решётка служит в Python-е знаком комментария. Интерфейс такой: появляется консоль и предлагает писать слова. Вы вводите слово, нажимаете Enter, и — о чудо! — открывается словарь на нужной странице. После этого можно вводить другое слово, и ad infinitum. Если просто нажать Enter (ввод пустой строки), консоль закрывается. Реализацию этого «простого консольного интерфейса» мы разбирать не будем: её достаточно просто копипастить. Ну, конечно, изменяя строчку, которой словарь представляется. Надо отметить, что в Python-е очень важны отступы. Отступы всегда кратны четырём пробелам. RE: Поиск в сканированных словарях - Quasus - 12-08-2012 15:51 Я ещё напишу пару примеров. Если кто-то станет пробовать — пишите, что получается, а что нет, и задавайте вопросы. RE: Поиск в сканированных словарях - I. G. - 12-08-2012 15:55 (12-08-2012 15:44)Quasus писал(а): Излагаю в расчёте на людей, не знакомых с Python’ом.Жив ли после этого Python? RE: Поиск в сканированных словарях - Quasus - 12-08-2012 15:58 Знаете ли вы? Python не любит Python. RE: Поиск в сканированных словарях - I. G. - 12-08-2012 16:06 Error: Not Found The requested URL /software/sumatrapdf/download-free-pdf-viewer.html) was not found on this server. RE: Поиск в сканированных словарях - Quasus - 12-08-2012 16:10 Исправил. RE: Поиск в сканированных словарях - Quasus - 12-08-2012 16:12 Сейчас тестовый словарик сделаю. RE: Поиск в сканированных словарях - Quasus - 12-08-2012 16:30 Вот. Лучше один раз увидеть. RE: Поиск в сканированных словарях - Quasus - 12-08-2012 18:07 Приведу пример скрипта, реализующего удобный консольный интерфейс к нескольким словарям. Предположим, мы написали для некоторых словарей модули old.py, gaffiot.py, forcellini.py, cceld.py и noel.py, и эти файлы лежат в одной папке. Предполагается, что словарь в каждом модуле назван dic. В той же папке можно создать файл latindics.py со следующим содержанием: Код: import old, gaffiot, forcellini, cceld, noel Интерфейс следующий. При запуске появляется краткая справка, и за ней промпт o> предлагающий посмотреть слово в оксфордском словаре. Можно набрать слово и посмотреть. Чтобы переключить словарь, достаточно перед очередным вводимым словом поставить символ нужного словаря: например, чтобы посмотреть у Форчеллини слово feles, достаточно набрать o> f feles после чего промпт примет вид f> Команды вида /o, /f и т. п. позволяют посмотреть последнее введённое слово в соответствующем словаре. Кроме того, есть команды /help и /exit; также можно выйти, введя пустую строку. Думаю, не составит труда модифицировать этот скрипт для своих словарей. |