powered by simpleCommunicator - 2.0.31     © 2024 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Начальная форма слова
25 сообщений из 47, страница 1 из 2
Начальная форма слова
    #40119262
Фотография _avz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача: привести слово русского языка к начальной форме.
Я так понимаю, без словаря здесь не обойтись, в общем случае.
Словарь нужен оффлайн.
беглый поиск результатов не дал.
т.е нужна минимальная структура таблицы:

любая форманачальная формавеснавеснавеснувесна веснойвеснавёснывесна...бегатьбегатьбегубегатьбежалбегатьбегибегать...
Если у кого есть, поделитесь.
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119276
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эта типовая задача называется "stemming" - погугли просто готовые реализации для русского языка.
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119286
Фотография _avz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

спасибо за расширение кругозора термином "stemming", но, видимо, я гуглить не умею.
где скачать словарь так и не нашёл
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119288
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стемминг не содержит словарей.

Это - больше алгоритм чем данные. По крайней мере для русского языка.

Украинско-польские стеммеры содержат в сорцах некоторые справочники.
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119289
Фотография _avz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

ну не знаю, как без словарей обойтись
к примеру, встречаем в тексте слово "шей"
каким алгоритмом можно дойти до двух начальных слов:
1.шить
2.шея
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119296
uProger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_avz,

Вообщем правельно думаете. Но все же погуглите что б не изобретать велосипед
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119298
Фотография _avz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uProger,

гуглил, полезного не нагуглил.
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119328
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_avz
uProger,

гуглил, полезного не нагуглил.


Можешь здесь, например, покопаться: https://snowballstem.org/
Или поковырять как это сделано в Lucene: https://lucene.apache.org/
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119361
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Эта типовая задача называется "stemming"

Проблема стеммеров в том, что они не приводят к словарной форме (лемме), а выделяют псевдооснову, от которой нужно стоить лемму по правилам.
Для всех словоформ вроде «весной», «весне» и т.п. стеммер выдаст «весн», для «бегут», «беги» — «бег» (а лемма-то будет «бежать», а не «бегать», как ТС считает).
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119372
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вспомнил: hunspell умеет лемматизировать (качество давно не проверял), русских словарей для него довольно много.
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119382
Фотография _avz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ы2
а лемма-то будет «бежать», а не «бегать», как ТС считает.

Кстати, почему?
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119383
Фотография _avz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ы2
Проблема стеммеров в том, что они не приводят к словарной форме (лемме), а выделяют псевдооснову, от которой нужно стоить лемму по правилам.
Для всех словоформ вроде «весной», «весне» и т.п. стеммер выдаст «весн», для «бегут», «беги» — «бег»

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

Неужели ни у кого подобной таблички в базе нет?
Она ж и до миллиона не догонит
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119394
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_avz, похоже, для большинства случаев такая табличка просто не нужна, вот и нет ее. Но если очень надо, генерируется тем же hunspell. Только словарь берите с леммами, а не спевдоосновами, посмотрите, напр., на github у PostgresPro.
А за миллион такое выходит очень легко: по 12 форм на каждое существительное, прилагательное, числительное и причастие, по 11 форм на каждый глагол (по 22 с учетом видовых пар), и т.д.
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119396
Фотография _avz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ы2,

спасибо, попробую разобраться
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119420
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_avz
Ы2
Проблема стеммеров в том, что они не приводят к словарной форме (лемме), а выделяют псевдооснову, от которой нужно стоить лемму по правилам.
Для всех словоформ вроде «весной», «весне» и т.п. стеммер выдаст «весн», для «бегут», «беги» — «бег»

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

Неужели ни у кого подобной таблички в базе нет?
Она ж и до миллиона не догонит

Может быть стемминг тебе и не подходит. По крайней мере стеммер действительно выделяет основу слова
а не имя существительное в родительном.

Откуда взять такую табличку - ХЗ. Не знаю. Но учитывая комбинаторную сложность самой постановки,
я-бы сказал что тебе придется самому ее делать. На основе опять-же имен существительных , глаголов
и прочего. Которые тоже надо где-то найти.
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119428
Фотография _avz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
В общем, как я понял, решение только такое:
ставится Postgres PRO (пока не разобрался, можно ли поставить его бесплатно)
на него расширение hunspell
а в нём уже есть функции, чтоб сгенерировать нужную табличку
(а можно и без неё обойтись, используя функции расширения)
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119429
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по сорцам, hunspel написан на C++
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119430
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_avz
mayton,
В общем, как я понял, решение только такое:
ставится Postgres PRO (пока не разобрался, можно ли поставить его бесплатно)
на него расширение hunspell
а в нём уже есть функции, чтоб сгенерировать нужную табличку
(а можно и без неё обойтись, используя функции расширения)

Ставить PostgresPro не обязательно, у них нужно взять только словарь . У hunspell есть консольный интерфейс, есть libhunspell.
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119531
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мдя. Начальная форма слова. И основа. Наверное разные штуки.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.tartarus.snowball.SnowballProgram;
import org.tartarus.snowball.ext.RussianStemmer;

import java.util.Arrays;


    public static final String SRC = """
              Так говорила в июле 1805 года известная Анна Павловна Шерер, фрейлина и
              приближенная  императрицы  Марии  Феодоровны,  встречая важного и  чиновного
              князя  Василия,  первого  приехавшего  на  ее вечер. Анна  Павловна  кашляла
              несколько  дней, у  нее был грипп, как она говорила (грипп  был тогда  новое
              слово, употреблявшееся только  редкими).  В записочках, разосланных  утром с
              красным лакеем, было написано без различия во всех:
              """;

    @Test
    public void test() {
        String[] split = SRC.split(" ");
        SnowballProgram snowballProgram = new RussianStemmer();
        Arrays.stream(split).forEach(item -> {
            snowballProgram.setCurrent(StringUtils.strip(item.toLowerCase(), ",\n.():"));
            snowballProgram.stem();
            System.out.print(snowballProgram.getCurrent());
            System.out.print(" ");
        });
    }



Out:
Код: sql
1.
2.
3.
4.
5.
6.
так говор в июл 1805 год известн ан павловн шерер фрейлин и
приближен  императриц  мар  феодоровн  встреч важн и  чиновного
княз  васил  перв  приеха  на  е вечер ан  павловн  кашляла
нескольк  дне у  не был грипп как он говор грипп  был тогд  новое
слов употребля тольк  редк  в записочк разосла  утр с
красн лаке был написа без различ во всех 
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119534
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Мдя. Начальная форма слова. И основа. Наверное разные штуки.

Я не великий специалист в этом, но возможно ли взять готовый словарь (основы слов), построить по нему отношение "основа" -> "стем основы", а потом исходное слово искать по этому отношению в обратном порядке "слово" -> "стем слова" -> "основа"? Это по всякому будет на порядки компактнее, чем для каждой мыслимой формы слова (а их для одной основы может быть по нескольку десятков) хранить отдельную запись с её основой.
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119544
Фотография _avz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Так говорила в июле 1805 года известная Анна Павловна Шерер, фрейлина и
приближенная императрицы Марии Феодоровны, встречая важного и чиновного
князя Василия, первого приехавшего на ее вечер. Анна Павловна кашляла
несколько дней, у нее был грипп, как она говорила (грипп был тогда новое
слово, употреблявшееся только редкими). В записочках, разосланных утром с
красным лакеем, было написано без различия во всех:

Out:
так говор в июл 1805 год известн ан павловн шерер фрейлин и
приближен императриц мар феодоровн встреч важн и чиновного
княз васил перв приеха на е вечер ан павловн кашляла
нескольк дне у не был грипп как он говор грипп был тогд новое
слов употребля тольк редк в записочк разосла утр с
красн лаке был написа без различ во всех

Основы, конечно же, совсем не то что надо,
но даже они не все были выделены адекватно
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119545
Фотография _avz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
mayton
Мдя. Начальная форма слова. И основа. Наверное разные штуки.

Я не великий специалист в этом, но возможно ли взять готовый словарь (основы слов), построить по нему отношение "основа" -> "стем основы", а потом исходное слово искать по этому отношению в обратном порядке "слово" -> "стем слова" -> "основа"? Это по всякому будет на порядки компактнее, чем для каждой мыслимой формы слова (а их для одной основы может быть по нескольку десятков) хранить отдельную запись с её основой.

увы

возьмём исходное слово "душили"
стем = "душ"
по нему находим 3 основы "душ", "душа", "душить"
какую брать?
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119556
Фотография _avz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашёл онлайн реализацию: http://www.aot.ru/demo/morph.html

пример:
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119558
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, почему плохо, я уже написал тут 22408420 . Стемминг придуман для решения инженерной задачи проверки орфографии и полнотекстового поиска, причем в ситуации, когда пропуск нескольких документов так же некритичен, как и включение в поисковую выдачу пары лишних. С лингвистической точки зрения стемминг плох практически для всех языков, даже для английского; для венгерского или тюркских — еще более-менее.

fkthat…возможно ли взять готовый словарь (основы слов), построить по нему отношение "основа" -> "стем основы", а потом исходное слово искать по этому отношению в обратном порядке "слово" -> "стем слова" -> "основа"?
Можно. Словарь для hunspell от PostgresPro делает все это за исключением выбора правильной леммы (словарной формы) в случае таких форм, как «души» (мн. ч. от «душа» или повел. накл. от «душить»?).
...
Рейтинг: 0 / 0
Начальная форма слова
    #40119559
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_avz, эта проблема называется «синтаксическая омонимия», без контекста не решается.
...
Рейтинг: 0 / 0
25 сообщений из 47, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Начальная форма слова
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]