"Книги - это корабли мысли, странствующие по волнам времени и
  бережно несущие свой драгоценный груз от поколения к поколению"

(Фрэнсис Бэкон)


Маркировка неправильно распознанных символов

После сканирования книги мы получаем множество файлов (по одному на каждую страницу) с изображениями страниц как правило в формате .tiff, .png или .jpg.

Эти картинки нужно перевести в коды символов, а еще лучше сохранить форматирование, которое возможно в таких программах как MS Word или LibreOffice. Для этого используются специальные программы распознавания текста, такие как FineReader, CuneiForm и др. Вроде бы никаких проблем, везде и всюду предлагают программы АВТОМАТИЧЕСКОГО распознавания текстов. Но это не совсем так, точнее совсем не так. Вот одна из проблем связанных с распознаванием текста.

Если исходный текст полностью на английском или, например, грузинском языке, то проблем в общем-то не возникает. Но как правило мы имеем дело со смешанным текстом - чаще всего англо-русским. И тут начинаются серьезные проблемы. Дело в том что многие символы русского и латинского алфавита, такие как А, О, Р имеют одинаковое начертание. И нет возможности определить на каком языке это написано. Программа распознавания текста определеяет язык текста по первому символу, который отличается от текущего языка. Например:

 
"Надпись Send coopиентирована вертикально"
 

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

 
"Надпись Send coopиентирована вертикально"
 

слово "соориентирована" написано неправильно. Синим цветом показаны латинские символы.

Как следствие, неправильно распознанные слова являются неизвестными для программ проверки орфографии и средств поиска. А если текст выкладывается в интернет, то такие слова неправильно обрабатываются поисковыми системами. Всякие ссылки на то, что нужно пользоваться "правильными программами", не работают. Например, на каком языке написано слово МАМА? Русский? Английский?

Для того, чтобы как-то выйти из этого положения, был написан макрос для программы MS Word. Его задача простая - заменить у латинских символов цвет с черного на синий. Это позволяет впоследствии при ручном редактировании текста определить правильный или неправильный символ в данном контексте. Текст этого макроса приведен ниже:

001 Sub Check_Lang()
002 '
003 ' Check_Lang Макрос
004 ' Макрос записан 18.06.2010 
005 '
006 Dim ChkX As Variant
007 Dim ChN
008 ChkX = Array("q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "a", "s", "d", "f", "g", "h", "j", "k", "l", "z", "x", "c", "v", "b", "n", "m")
009 
010 For Each ChN In ChkX   ' Просматривает каждый элемент.
011     Selection.Find.ClearFormatting
012     Selection.Find.Replacement.ClearFormatting
013     With Selection.Find
014         .Text = ChN
015         .Replacement.Text = ""
016         .Replacement.Font.ColorIndex = wdBlue
017         .Forward = True
018         .Wrap = wdFindContinue
019         .Format = True
020         .MatchCase = False
021         .MatchWholeWord = False
022         .MatchWildcards = False
023         .MatchSoundsLike = False
024         .MatchAllWordForms = False
025     End With
026     Selection.Find.Execute Replace:=wdReplaceAll
027 Next
028 
029 End Sub

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

В строке 001 объявляется название макроса, строки 002-005 содержат комментарии.

Строки 006-007 объявляют используемые переменные. В строке 008 определяется массив обзразцов текста (в данном случае символы латинского алфавита), для которых будет изменяться цвет. Это могут также быть комбинации символов, которые ошибочно распознаются программой распознавания текста. Этот массив записывается в переменную ChkX.

В строке 010 начинает цикл, который перебирает каждый элемент массива и ищет этот элемент в тексте, после нахождения изменяет его форматирование.

Строки 011-012 очищают форматирование для найденного элемента и элемента, который будет заменен.

Строки 014-024 определяют параметры замены. В строке 016 указывается цвет, которым будет окрашен найденный образец, в данном случае wdBlue (Синий). При желании его можно заменить на любой другой.

И, наконец, в строке 026 записана команда выполняющая поиск и замену форматирования с указанными параметрами. А в строке 027 указание на повторение вышеописанных действий если еще есть элементы в массиве. Строка 029 завершает определение макроса.

Постоянно хранить этот макрос в файле смысла нет, так как он выполняется только один раз. Проще открыть текст в Word и выполнить следующие действия:

- на верхней панели (блише к правому краю) найти и нажать на вкладку "Разработка"

- слева будет кнопка "Макрос" - нажать на нее

- в открывшемся окне будет поле для нового макроса, а под ним список существующих в документе макросов (как правило пустой), справа набор кнопок - "создать", "выполнить", "удалить"

- в верхнем поле ввести любое имя нового макроса латинскими буквами, например, xyz, и нажать кнопку "создать"

- появится новое окно с заготовкой нового макроса. Заменить весь существующий текст вышеприведенным макросом и закрыть окно

- опять нажать кнопку "Макрос", в открывшемся окне в списке макросов появится макрос "Check_Lang", выделить его мышкой и нажать кнопку "выполнить". В результате все латинские символы изменят цвет на синий.

- после этого можно нажать кнопку "удалить" и макрос "Check_Lang" будет удален.

 


 
Перейти в конец страницы Перейти в начало страницы