NME

Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору daa2013 1. с помощью djvutoy извлекаем информацию о шейпах - вкладка File Info -> выбираем djvu-файл -> указываем диапазон 563 to 563 -> отмечаем чекбокс Export shapes -> жмем Export (рядом с Export shapes) 2. далее в тоталкомандере выбрал образовавшуюся папку 1200_Dict, нажал "быстрый просмотр" - в просмотре появились миниатюры шейпов.. это можно сделать и в других программах, позволяющих просматривать миниатюры картинок.. просмотрев миниатюры, я нашел нужную картинку - это 0563_0290.tif, где 0563 - это номер страницы, а 290 - это номер шейпа.. но, учитывая, что на этой странице получилось 3500+ шейпов, просмотр и выискивание нужного символа глазками удовольствия не принес.. поэтому предлагаю второй, более быстрый способ: -ищем приблизительное местоположение нужного шейпа, для чего подводим курсор в WinDjView Extended 3.1 или DjView от djvulibre к левому нижнему углу шейпа и в статусбаре видим координаты.. очень точно целиться не нужно, т.к. дальше мы зададим нужное нам отклонение от искомой точки.. у меня получились такие координаты - 1537 х 1359.. -открываем и копируем весь текст из 0563.txt -вставляем в книгу MS Excel (ну, или кто чем пользуется - опенофис или другие аналоги, работающие с формулами) -справа от колонки Bottom вбиваем формулу =ЕСЛИ(И(ABS(B5-1537)<20;ABS(C5-1359)<20);"!!!!!!!!!!!!";"") где B5 - это ячейка из колонки Left, C5 - ячейка из колонки Bottom, 20 - это допуск на отклонение от точки расположения шейпа (может быть увеличен при необходимости), 1537 и 1359 - определенные мной приблизительные координаты.. команды ЕСЛИ, И, ABS - экселевские, в других прогах они могут быть другими (IF, AND и т.п.), но смысл понятен - абсолютное значение разности между значениями в столбцах Left и Bottom и приблизительными координатами шейпа не должно превышать какой-то определенной величины.. -распространяем эту формулу на весь столбец и легко находим нужный номер шейпа в первой колонке строки с !!!!!!!!!!!!, и это, как и в первом случае - 290.. думаю, что любители скриптов с легкостью могут написать скриптик, который ищет нужный номер шейпа в текстовом файле, но мне удобнее в экселе это сделать, т.к. я не занимаюсь этим напостоянку.. 3. далее определяем, что за словарь используется на этой странице и на какие страницы он распространяется.. в информации о странице видим файл dict0736.iff.. название словаря обычно совпадает с названием последней страницы блока страниц, использующих данный словарь.. перейдя в информацию о документе мы увидим, что используется один словарь на всю книгу.. в качестве информации - нумерация шейпов на странице организована следующим образом: сначала идут шейпы из общего словаря символов (от 1 до N), а затем идут шейпы из чанка Sjbz (от N+1 и до конца).. если номер искомого шейпа попал в диапазон 1...N - он есть в общем словаре, если нет - то он есть только на этой странице.. к сожалению, я не знаю общедоступных программ, позволяющих определить N - количество шейпов в словаре, но можно обойтись и без этого.. 4. снова заходим в djvutoy, меняем диапазон на 1..736, снимаем чекбокс с Export shapes (для скорости), жмем экспорт.. диапазон можно и меньше поставить в надежде, что первый шейп встретится в этом уменьшенном диапазоне страниц.. если словарь распространяется не на всю книгу, то нужно указывать только диапазон страниц, на который распространяется словарь.. например, если бы кроме dict0736.iff были бы словари dict0250.iff и dict0500.iff, то понятно, что книга сделана со словарями на 250 страниц и искать нам нужно начиная с 501й страницы.. 5. далее в тотале включаю поиск -> с текстом "290" -> чекбокс "только слова целиком" -> файлы на панель -> сортировка по имени -> видим в начале файлы 0002.txt, 0012.txt и т.д.. 6. начинаем по порядку - открываем файлы и ищем по поиску 290 в первом столбце.. на 2й странице 290 не в 1м столбце, а вот на 12й этот шейп встречается один раз.. если совпадений много, то можно скопировать весь текст в эксель-книгу, применить фильтр к колонке ShapeNo и увидеть, сколько раз этот шейп встречается на данной странице и координаты этих мест.. а если набросать скриптик, то поиск еще сильней упростится.. итак, убеждаемся, что страница 12 использует тот же словарь dict0736.iff, подводим курсор в просмотрщике к указанной рядом с 290 координате и видим, что это искомый нами шейп.. значит, шейп №290 находится в общем словаре - если бы графика не совпала, то общий словарь был бы менее 290 символов и искомый шейп был бы только на 563й странице.. 7. открываем исходный графический файл и смотрим, с этой ли страницы был взят "щербатый" шейп.. если нет, то поиск подобным образом можно продолжить на других страницах.. в качестве эксперимента засек время на поиск другого шейпа по данной методике (на странице 300, 4я строка сверху, слово "вливается", буква "т") в итоге поиск символа занял порядка 6 минут - им оказался шейп на 33й странице с координатами 1224х3298.. в процессе поиска пришел к следующему: - нет смысла устанавливать чекбокс Export shapes в п.1 - это только замедляет процесс.. он нужен, только если что-то пошло не так, например, не найден нужный шейп в книге.. - 2 скрипта с поиском номера шейпа по приблизительным координатам и, особенно, с поиском координат по номеру шейпа значительно сократят время поиска.. - искать шейп на странице по координате вставки удобно с помощью WinDjView Extended: на нужной странице в верхнем правом углу делаем выделение области рамкой -> ПКМ -> Отметить выделение -> в ячейки X1 и Y1 вбиваем найденные координаты -> ОК.. создается аннотация, левый нижний угол которой совпадает с координатой вставки искомого шейпа.. далее кликаем ПКМ на аннотации и удаляем её.. в общем, возможность для поиска "щербатых" шейпов есть, но имхо это всё баловство и не очень рациональное использование свободного времени.. таких символов в книге будет сотни, а м.б. и тысячи.. если сделать экспорт шейпов в графические файлы и просмотреть их (как в п.1), то можно офигеть от количества "кривых" символов, которые "надо бы исправить".. возможно, проще распознать книгу и сделать "идеальный" электронный документ, чем исправлять каждый растровый символ.. или еще проще забить и не заниматься "перфекционным вылизыванием" графики, ведь при чтении книги на эти моменты внимание практически не обращается.. с другой стороны, кто как хочет, так и ... тратит свое ценное (бесценное) свободное время))) |