-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Обработка дореформенной орфографии мантикорой #7
Comments
Пока не знаю. В мантикоре можно подключать таблицы символов, но как это работает на практике не знаю. Основной момент в том, что у пользователя нет клавиатуры с дореформенным алфавитом и такой поисковый запрос он набрать не сможет. Т.е. даже если эти символы нормально «затокенезируются» (я даже не знаю, как это выразить сейчас обычными словами, пока пусть так будет), то можно ли будет их найти обычным запросом? Будем искать способ. |
С клавиатуры теоретически набрать можно, но в принципе существует сценарий CTRL+C → CTRL+V, а также не будем исключать какие-то будущие варианты, например, расширения для браузеров или сервиса для операционных систем: человек читает что-то, выделил слово, ПКМ, меню → «концептуальный поиск svodd». Также есть вот такой сервис slavenica и существуют раскладки для клавиатуры с дореволюционными символами, они есть для андроида и виндовс точно, скорее всего и для остальных систем тоже найдутся. Там же на славенице есть и словарь (вторая вкладка, ссылку сделать нельзя), наверное есть и другие подобные сервисы, в том числе более официальные. Но нас в первую очередь интересуют механизмы мантикоры, наверное.
Сложный вопрос. Я пока не понимаю в достаточной мере, что именно делает мантикора во время токенизации символов. Например — откуда она вообще берёт набор символов? Что будет если мы подадим ей данные в другой раскладке, где таблица символов просто другая? |
charset_table
Яндекс перевод: Charset_table - это основная рабочая лошадка процесса токенизации Manticore, процесса извлечения ключевых слов из текста документа или текста запроса. Он управляет тем, какие символы принимаются как допустимые, а какие нет, и как принятые символы должны быть преобразованы (например, следует ли удалять регистр или нет). Вы можете думать о charset_table как о большой таблице или массиве, который имеет отображение для каждого из более чем 100 тысяч символов в Unicode. По умолчанию каждый символ соответствует 0, что означает, что он не встречается в ключевых словах и должен рассматриваться как разделитель. После упоминания в таблице символ сопоставляется с каким-либо другим символом (чаще всего либо с самим собой, либо со строчной буквой) и рассматривается как допустимая часть ключевого слова. Формат ожидаемого значения представляет собой список отображений, разделенных запятыми. Два простейших сопоставления просто объявляют символ допустимым и сопоставляют один символ с другим одиночным символом соответственно. Но указание всей таблицы в такой форме привело бы к раздутым и едва поддающимся управлению спецификациям. Таким образом, существует несколько синтаксических сокращений, которые позволяют вам сопоставлять диапазоны символов одновременно. Полный список выглядит следующим образом: Сопоставление A->a - Single char объявляет исходный символ 'A' разрешенным для использования в ключевых словах и сопоставляет его с целевым символом 'a' (но не объявляет 'a' разрешенным). A..Z->a..z - Отображение диапазона, объявляет все символы в исходном диапазоне разрешенными и сопоставляет их с диапазоном назначения. Не объявляет диапазон назначения разрешенным. Также проверяется длина диапазона (длины должны быть равны). a - Отображение случайного символа, объявляет символ разрешенным и сопоставляет его самому себе. Эквивалентно отображению a->a single char. a..z - Отображение случайного диапазона, объявляет все символы в диапазоне разрешенными и сопоставляет их самим себе. Эквивалентно отображению диапазона a..z->a..z. A..Z/2 - Карта полигона в шахматном порядке. Сопоставляет каждую пару символов со вторым символом. Более формально, объявляет нечетные символы в диапазоне разрешенными и сопоставляет их с четными; также объявляет четные символы разрешенными и сопоставляет их самим себе. Например, A..Z/2 эквивалентно A->B, B->B, C->D, D->D, ..., Y->Z, Z->Z. Этот ярлык сопоставления полезен для ряда блоков Unicode, где прописные и строчные буквы идут в таком чередующемся порядке вместо непрерывных фрагментов. Управляющие символы с кодами от 0 до 32 всегда рассматриваются как разделители. Символы с кодами от 33 до 127, то есть 7-разрядные символы ASCII, могут использоваться в отображениях как есть. Чтобы избежать проблем с кодировкой файла конфигурации, 8-разрядные символы ASCII и символы Unicode должны быть указаны в форме U+xxx, где xxx - шестнадцатеричный кодовый номер. Эта форма также может быть использована для 7-битных символов ASCII для кодирования специальных символов: например, используйте U+2E для кодирования точки, U+2C для кодирования запятой. Минимально допустимый код символа в юникоде - U+0021. Вы можете переопределить отображение символов, указав его снова с помощью другого отображения. Например, встроенный массив non_cjk включает символы Ä и ä и сопоставляет их оба с символом ascii a, что может не работать в некоторых случаях (например, для немецкого языка). В этом случае вы можете переопределить символы таким образом: charset_table = non_cjk,U+00E4,U+00C4 charset_table = non_cjk,U+00E4,U+00C4->U+00E4 ignore_charsignore_chars = U+AD Полезно в случаях, когда некоторые символы, такие как знак мягкого переноса (U+00AD), следует не просто рассматривать как разделители, а полностью игнорировать. Например, если '-' просто отсутствует в charset_table, текст "abcdef" будет проиндексирован как ключевые слова "abc" и "def". Напротив, если '-' добавлено в список ignore_chars, тот же текст будет проиндексирован как одно ключевое слово "abcdef". Синтаксис такой же, как и для charset_table, но разрешено только объявлять символы и не разрешено их сопоставлять. Кроме того, игнорируемые символы не должны присутствовать в charset_table. Я так понимаю, что можно хоть каждый символ сопоставить с любым другим символом по тому же принципу, как мы делаем в концептуальном словаре. Как это технически подключать надо будет погуглить примеры, пока не знаю. Но еще же есть морфология, в общем вопрос понятен, изучаем по мере возмодностей. |
Появился вопрос. Сейчас обработано уже несколько тысяч книг из библиотеки, многие из которых, судя по всему, никогда раньше не распознавались. Весомая часть этих книг издана более ста лет назад, соответственно русский язык в них дореформенный, вот типичный пример распознанного текста:
Беглый поиск по мантикоре ответа на вопрос не дал. Если вкрапления i в теории ещё можно как-то зарегулировать на основе украинского языка, то ѣ сомнительно.
В теории пути могут быть такими.
Дополнительной проблемой будет то, что даже с заменой символов многие слова далеки от текущих словарных форм:
Для таких случаев, видимо, потребуется составлять словарь. Возможно такой словарь для мантикоры уже существует? Мне пока что не удалось найти.
The text was updated successfully, but these errors were encountered: