Dicrector — компонент применяющий словари с строке текста. Написан на Python.
Добавлено: 20 ноя 2020 18:29
ПРЕДУПРЕЖДЕНИЕ: Это не конечная пользовательская программа, а компонент для написания таких программ. Может использоваться из других Python скриптов, а сам Python может быть вызван из множества других языков. В том числе из Lua.
Название произошло от Dictionary corrector. Первопричиной положившей первый камень в код компонента послужило медленное применение больших словарей из сотен тысяч правил в существующих программах. И даже быстрый режим некоторых программ, накладывая существенные ограничения на словари, тоже не мог похвастаться особой быстротой. Цель достигнута. 900 страниц Войны и мира (1.8Мб) словарем из 270000 правил, обрабатывается всего за 14 секунд на i5-4440 в один поток (пример есть в Demo). Однако пошли пожелания, внешние и собственные — регулярки, макросы, омографы. Что в итоге было собрано в один компонент.
Применяемые словари не группируются и правила в них не сортируются, это ответственность пользователя. Кроме одного исключения, если подряд указаны несколько словарей одного типа. Для такого списка: 1.rex, 2.dic, 3.dic, 4.rex, 5.dic — будут сгруппированы только 2 и 3 словари.
Так как некоторые словари большие и на их загрузку уходит относительно немало времени, есть возможность перезагрузить отдельные словари, если они были изменены в процессе работы компонента. Например при прослушивании новых слов. Достаточно указать целевые словари. Если они входят в некую группу, соседние будут перезагружены автоматически.
Использование компонента простое (есть в Demo).
Дополнительно есть функции поиска новых слов, согласование спряжений, преобразования римских в арабские и арабских в текст, и некоторые другие. Но это не основная функциональность, описывать не буду, смотрите в коде.
Поддерживаются словари:
Dic: Коррекция текста простыми правилами поиска и замены.
Dicx: Коррекция текста расширенными правилами поиска и замены. dic(eXtended)
Rex: Коррекция текста правилами на основе регулярных выражений.
Rexw: Коррекция текста правилами на основе регулярных выражений. rex(Word)
Omo: Коррекция текста правилами на основе морфологии и синтаксиса. Используется для снятия омографии.
Omn: Коррекция текста правилами на основе нейросетей. Используется для снятия омографии, когда невозможно разрешить на основе правил грамматики.
Как вы заметили, для словарей указывается область применения. Суть в том, что программа разбивает строку на предложения, а предложения на слова. Процедура не быстрая. Если после замены слова, понадобился текст предложения, оно будет собрано из слов. Соответственно строка собрана из предложений. Если после сборки вам понадобится опять перейти на более низкую область видимости, текст вновь будет разбит на составляющие. И вновь собран, при переходе на более высокую. Поэтому словари стоит располагать в порядке убывания и последующего увеличения области видимости — строка, предложение, слово, предложение, строка.
Установка компонента: "pip install . " находясь в папке пакета или "pip install path/to/package" из любого другого места.
Планы на будущее: выкладывать на GitHub или PyPi не планирую. К проекту охладел. Но если поступит идея несущая существенное улучшение качества или скорости обработки, с удовольствием рассмотрю. Также постараюсь исправлять ошибки. Мелкий фич-реквест не предлагать.
Лицензия: Делайте что хотите. Но надеюсь на указание авторства.
Название произошло от Dictionary corrector. Первопричиной положившей первый камень в код компонента послужило медленное применение больших словарей из сотен тысяч правил в существующих программах. И даже быстрый режим некоторых программ, накладывая существенные ограничения на словари, тоже не мог похвастаться особой быстротой. Цель достигнута. 900 страниц Войны и мира (1.8Мб) словарем из 270000 правил, обрабатывается всего за 14 секунд на i5-4440 в один поток (пример есть в Demo). Однако пошли пожелания, внешние и собственные — регулярки, макросы, омографы. Что в итоге было собрано в один компонент.
Применяемые словари не группируются и правила в них не сортируются, это ответственность пользователя. Кроме одного исключения, если подряд указаны несколько словарей одного типа. Для такого списка: 1.rex, 2.dic, 3.dic, 4.rex, 5.dic — будут сгруппированы только 2 и 3 словари.
Так как некоторые словари большие и на их загрузку уходит относительно немало времени, есть возможность перезагрузить отдельные словари, если они были изменены в процессе работы компонента. Например при прослушивании новых слов. Достаточно указать целевые словари. Если они входят в некую группу, соседние будут перезагружены автоматически.
Использование компонента простое (есть в Demo).
Код: Выделить всё
from dicrector import Corrector
corrector = Corrector(список_словарей)
result = corrector.execute(line)
Поддерживаются словари:
Dic: Коррекция текста простыми правилами поиска и замены.
► Показать
► Показать
► Показать
► Показать
► Показать
► Показать
Установка компонента: "pip install . " находясь в папке пакета или "pip install path/to/package" из любого другого места.
Планы на будущее: выкладывать на GitHub или PyPi не планирую. К проекту охладел. Но если поступит идея несущая существенное улучшение качества или скорости обработки, с удовольствием рассмотрю. Также постараюсь исправлять ошибки. Мелкий фич-реквест не предлагать.
Лицензия: Делайте что хотите. Но надеюсь на указание авторства.