Dicrector — компонент применяющий словари с строке текста. Написан на Python.

Ответить
Аватара пользователя
Lecron
Специалист

Dicrector — компонент применяющий словари с строке текста. Написан на Python.

#1

Сообщение Lecron »

ПРЕДУПРЕЖДЕНИЕ: Это не конечная пользовательская программа, а компонент для написания таких программ. Может использоваться из других 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).

Код: Выделить всё

from dicrector import Corrector
corrector = Corrector(список_словарей)
result = corrector.execute(line)
Дополнительно есть функции поиска новых слов, согласование спряжений, преобразования римских в арабские и арабских в текст, и некоторые другие. Но это не основная функциональность, описывать не буду, смотрите в коде.

Поддерживаются словари:
Dic: Коррекция текста простыми правилами поиска и замены.
► Показать
Dicx: Коррекция текста расширенными правилами поиска и замены. dic(eXtended)
► Показать
Rex: Коррекция текста правилами на основе регулярных выражений.
► Показать
Rexw: Коррекция текста правилами на основе регулярных выражений. rex(Word)
► Показать
Omo: Коррекция текста правилами на основе морфологии и синтаксиса. Используется для снятия омографии.
► Показать
Omn: Коррекция текста правилами на основе нейросетей. Используется для снятия омографии, когда невозможно разрешить на основе правил грамматики.
► Показать
Как вы заметили, для словарей указывается область применения. Суть в том, что программа разбивает строку на предложения, а предложения на слова. Процедура не быстрая. Если после замены слова, понадобился текст предложения, оно будет собрано из слов. Соответственно строка собрана из предложений. Если после сборки вам понадобится опять перейти на более низкую область видимости, текст вновь будет разбит на составляющие. И вновь собран, при переходе на более высокую. Поэтому словари стоит располагать в порядке убывания и последующего увеличения области видимости — строка, предложение, слово, предложение, строка.

Установка компонента: "pip install . " находясь в папке пакета или "pip install path/to/package" из любого другого места.

Планы на будущее: выкладывать на GitHub или PyPi не планирую. К проекту охладел. Но если поступит идея несущая существенное улучшение качества или скорости обработки, с удовольствием рассмотрю. Также постараюсь исправлять ошибки. Мелкий фич-реквест не предлагать.

Лицензия: Делайте что хотите. Но надеюсь на указание авторства.
dicrector.zip
(70.31 КБ) 88 скачиваний
dicrector_with_demo.7z
(71.93 МБ) 114 скачиваний

Аватара пользователя
Lecron
Специалист

Dicrector — компонент применяющий словари с строке текста. Написан на Python.

#2

Сообщение Lecron »

Небольшие исправления и рефакторинг.
dicrector.zip
(84.6 КБ) 54 скачивания

Аватара пользователя
юрабойко
Обыватель

Dicrector — компонент применяющий словари с строке текста. Написан на Python.

#3

Сообщение юрабойко »

Никто не может помочь как в тексте автоматически расставить коммы после каждого слова или через одно, кроме коротких - не более 3 или 5 букв? Я мог бы это сделать вручную, но говорилка и ее аналоги мне нужны чтобы глаза отдохнули.

Если я буду редактирую текст вручную, это займет в лучшем случае в несколько раз меньше времени чем если я его читаю, а это меня не устраивает.

Ни в одной обычной програме для редакта текстов такой опции, ставить комму после каждого слова отдельно с помощью автозамены отдельно - тоже куча работы, в текстре обчно как минимум около тысчи разных слов наберется.

Аватара пользователя
Lecron
Специалист

Dicrector — компонент применяющий словари с строке текста. Написан на Python.

#4

Сообщение Lecron »

юрабойко писал(а):
26 фев 2021 10:12
Никто не может помочь как в тексте автоматически расставить коммы после каждого слова или через одно, кроме коротких - не более 3 или 5 букв?
Если комма, это запятая, то во-первых так и пишите, а во-вторых любая из программ на форуме, поддерживающая rex словари это умеет.
\b\w{5,}(?=\s)=$0,
Шаблон начинающийся с начала слова, содержащий не менее 5 букв и не заканчивающийся пробелом (чтобы не зацепить знаки препинания), заменить на шаблон+запятая. Для "через одно" — \b\w+\s\w{5,}. Может какие-то нюансы не учел, но принцип такой, регулярки для этого и созданы. Если словарь не распознается из-за второго знака равно, заменить этот блок на негативный (?![\.\!\?,:])

Аватара пользователя
tonio_k
V.I.P.

Dicrector — компонент применяющий словари с строке текста. Написан на Python.

#5

Сообщение tonio_k »

Lecron писал(а):
26 фев 2021 11:17
Если словарь не распознается из-за второго знака равно, заменить этот блок на негативный (?![\.\!\?,:])
в качестве разделителя левой части правила от правой части правила вместо знака "=" (равно) можно использовать "::" (два знака двоеточия), тогда можно смело ставить знаки "равно" где угодно.

Аватара пользователя
юрабойко
Обыватель

Dicrector — компонент применяющий словари с строке текста. Написан на Python.

#6

Сообщение юрабойко »

Что до написания запятой - русский язык мне не родной, из-за чего привык к слове комма, а запятая вспоминается мной крайне редко.Пример как это сделать лишним тоже не будет (можно ссылками) - в последний раз к редактировать словари я искал еще в конце осени 2020 года, а на практике не делал этого вообще нигде кроме как в блокноте для говорилки.

Аватара пользователя
юрабойко
Обыватель

Dicrector — компонент применяющий словари с строке текста. Написан на Python.

#7

Сообщение юрабойко »

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

Ответить

Вернуться в «Программы для обработки текста»