Всем привет.
Решил проблему поиска однокоренных слов. Началось всё с того, что с сайта http_//mytts_forum2x2_ru скачал словари с ё-фикацией, ужасно раздутые от ужасающего количества однокоренных слов в самом невообразимом наклонении.
Для поиска дублирующих слов и выражений написал регулярку.
Редактирование словарей я произвожу вручную, поэтому при работе использую очень мощный редактор Notepad++. В данном редакторе возможно отсортировать слова и выражения в алфавитном порядке (о чем я писал теме "
Вопрос: Посоветуйте, как выявить и удалить все дублирующие правила из набора разных словарей") так и так и выявить и удалить все дублирующие правила из словаря.
1. Для начала все выражения в словаре (кроме регулярных выражений) следует отсортировать по алфавиту - см. выше. Регулярки из словаря лучше вырезать и перенести в отдельный словарь. Так я сделал в словаре "слова со звездочкой" - вырезал все регулярки и оставшиеся выражения отсортировал по алфавиту.
2. Далее, вызываем команду поиск и замена (ctrl+H)
3. В строку поиск копируем правило:
(([А-ЯЁа-яё\-\$]{5,30})([аоуыэяёюие]{0,1}|[а-яё][аоуыэяёюие])[\*\=]{1,2}([А-ЯЁа-яё \<\-]{5,30})([аоуыэяёюие]{0,1}|[а-яё][аоуыэяёюие])\r\n)?(?(1)(\2([а-яё]{0,2})[\*\=]{1,2}\4([а-яё]{0,2})\r\n)+|\1)
4. В строку замена копируем правило замены
\2\*=\4\r\n
5. Нажимаем команду заменить.
После обработки списка будут выделены несколько однокоренных выражений. К примеру:
был список выражений типа:
посвечива*=посве<чива
посвечив*=посве<чив Нажав кнопку "Заменить", получается выражение вида
посвечив*=посве<чив То есть регулярка нашла общую часть выражения
посвечив и обрезало всё выражение по нему.
Данная регулярка за счёт выражения ([аоуыэяёюие]{0,1}|[а-яё][аоуыэяёюие]) не производит замены, если перед знаком *= стоит какая-либо гласная буква. Поясню, к примеру если будет произведена замена
белоглав*=белогла<в
белоглаз*=белогла<з на выражение
белогла*=белогла< то такое выражение (белогла*=белогла<) не информативно, и лично мне бы было непонятно о чем бы шла речь в таком выражении.
После первого прохода по словарю, выражение можно запустить еще насколько раз до тех пор, пока все однокоренные слова не закончатся.
В любом случае, данная регулярка всего лишь инструмент, и не следует ей слепо доверять (хотя я проверял её неоднократно на своих словарях, и со своей задачей она справляется на УРА). Буду рад. елси кому то помог в работе с этой Замечательной программой. Огромное Спасибо
Cminant за её разработку и дальнейшее сопровождение.
Благодаря этой программе у меня появилось прикольное хобби по написанию словарей и все такое.