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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

Ставить PostgresPro не обязательно, у них нужно взять только словарь . У hunspell есть консольный интерфейс, есть libhunspell.
...
Рейтинг: 0 / 0
13.12.2021, 02:08
    #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
13.12.2021, 02:30
    #40119534
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Начальная форма слова
mayton
Мдя. Начальная форма слова. И основа. Наверное разные штуки.

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

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

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

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

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

увы

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

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

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


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