Форум » KooBAudio 2.0 » Как найти однокоренные слова » Ответить

Как найти однокоренные слова

MoppoH: Хочу отредактировать словарь, который достался от другой программы там много однокоренных слов, и вот хотел узнать есть ли какое нибудь рег выражение чтобы программа сама нашла слова где есть общий корень.

Ответов - 2

Cminant: Нет, фильтр по рег.выражениям здесь вряд-ли поможет... Собственно, идея поиска однокоренных слов в словарях не нова, я уже пытался как-то приспособить форму "словарного анализа" для этой задачи. Т.е. загрузить в список все "простые" (из одного слова) правила из текущего словаря, и подсчитать для каждого кол-во совпадений по фильтрам "родственных слов"... Но как-то сходу все не заработало как рассчитывалось, а потом я эту идею позабросил. Возможно, в следующей версии попробую-таки довести до ума...

odinokiyklaus: Всем привет. Решил проблему поиска однокоренных слов. Началось всё с того, что с сайта 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 за её разработку и дальнейшее сопровождение. Благодаря этой программе у меня появилось прикольное хобби по написанию словарей и все такое.



полная версия страницы