|
Начальная форма слова
|
|||
---|---|---|---|
#18+
Задача: привести слово русского языка к начальной форме. Я так понимаю, без словаря здесь не обойтись, в общем случае. Словарь нужен оффлайн. беглый поиск результатов не дал. т.е нужна минимальная структура таблицы: любая форманачальная формавеснавеснавеснувесна веснойвеснавёснывесна...бегатьбегатьбегубегатьбежалбегатьбегибегать... Если у кого есть, поделитесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 16:15 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
Эта типовая задача называется "stemming" - погугли просто готовые реализации для русского языка. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 17:43 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
fkthat, спасибо за расширение кругозора термином "stemming", но, видимо, я гуглить не умею. где скачать словарь так и не нашёл ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 18:20 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
Стемминг не содержит словарей. Это - больше алгоритм чем данные. По крайней мере для русского языка. Украинско-польские стеммеры содержат в сорцах некоторые справочники. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 18:24 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
mayton, ну не знаю, как без словарей обойтись к примеру, встречаем в тексте слово "шей" каким алгоритмом можно дойти до двух начальных слов: 1.шить 2.шея ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 18:33 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
_avz, Вообщем правельно думаете. Но все же погуглите что б не изобретать велосипед ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 19:06 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
uProger, гуглил, полезного не нагуглил. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 19:10 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
_avz uProger, гуглил, полезного не нагуглил. Можешь здесь, например, покопаться: https://snowballstem.org/ Или поковырять как это сделано в Lucene: https://lucene.apache.org/ ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 21:30 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
fkthat Эта типовая задача называется "stemming" Проблема стеммеров в том, что они не приводят к словарной форме (лемме), а выделяют псевдооснову, от которой нужно стоить лемму по правилам. Для всех словоформ вроде «весной», «весне» и т.п. стеммер выдаст «весн», для «бегут», «беги» — «бег» (а лемма-то будет «бежать», а не «бегать», как ТС считает). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 23:31 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
Вспомнил: hunspell умеет лемматизировать (качество давно не проверял), русских словарей для него довольно много. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2021, 00:15 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
Ы2 а лемма-то будет «бежать», а не «бегать», как ТС считает. Кстати, почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2021, 08:56 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
Ы2 Проблема стеммеров в том, что они не приводят к словарной форме (лемме), а выделяют псевдооснову, от которой нужно стоить лемму по правилам. Для всех словоформ вроде «весной», «весне» и т.п. стеммер выдаст «весн», для «бегут», «беги» — «бег» Вот и я считаю: для моей задачи стемминг - как из пушки по воробьям. Намного же проще тупо забить все слова в справочник и не заморачиваться программировать нечёткие правила словообразования. Лежит в базе, удобно и быстро SQL-ем обрабатывать. Неужели ни у кого подобной таблички в базе нет? Она ж и до миллиона не догонит ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2021, 09:05 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
_avz, похоже, для большинства случаев такая табличка просто не нужна, вот и нет ее. Но если очень надо, генерируется тем же hunspell. Только словарь берите с леммами, а не спевдоосновами, посмотрите, напр., на github у PostgresPro. А за миллион такое выходит очень легко: по 12 форм на каждое существительное, прилагательное, числительное и причастие, по 11 форм на каждый глагол (по 22 с учетом видовых пар), и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2021, 11:14 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
Ы2, спасибо, попробую разобраться ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2021, 11:20 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
_avz Ы2 Проблема стеммеров в том, что они не приводят к словарной форме (лемме), а выделяют псевдооснову, от которой нужно стоить лемму по правилам. Для всех словоформ вроде «весной», «весне» и т.п. стеммер выдаст «весн», для «бегут», «беги» — «бег» Вот и я считаю: для моей задачи стемминг - как из пушки по воробьям. Намного же проще тупо забить все слова в справочник и не заморачиваться программировать нечёткие правила словообразования. Лежит в базе, удобно и быстро SQL-ем обрабатывать. Неужели ни у кого подобной таблички в базе нет? Она ж и до миллиона не догонит Может быть стемминг тебе и не подходит. По крайней мере стеммер действительно выделяет основу слова а не имя существительное в родительном. Откуда взять такую табличку - ХЗ. Не знаю. Но учитывая комбинаторную сложность самой постановки, я-бы сказал что тебе придется самому ее делать. На основе опять-же имен существительных , глаголов и прочего. Которые тоже надо где-то найти. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2021, 15:24 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
mayton, В общем, как я понял, решение только такое: ставится Postgres PRO (пока не разобрался, можно ли поставить его бесплатно) на него расширение hunspell а в нём уже есть функции, чтоб сгенерировать нужную табличку (а можно и без неё обойтись, используя функции расширения) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2021, 15:59 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
Судя по сорцам, hunspel написан на C++ ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2021, 16:16 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
_avz mayton, В общем, как я понял, решение только такое: ставится Postgres PRO (пока не разобрался, можно ли поставить его бесплатно) на него расширение hunspell а в нём уже есть функции, чтоб сгенерировать нужную табличку (а можно и без неё обойтись, используя функции расширения) Ставить PostgresPro не обязательно, у них нужно взять только словарь . У hunspell есть консольный интерфейс, есть libhunspell. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2021, 16:25 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
Мдя. Начальная форма слова. И основа. Наверное разные штуки. Код: 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.
Out: Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 02:08 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
mayton Мдя. Начальная форма слова. И основа. Наверное разные штуки. Я не великий специалист в этом, но возможно ли взять готовый словарь (основы слов), построить по нему отношение "основа" -> "стем основы", а потом исходное слово искать по этому отношению в обратном порядке "слово" -> "стем слова" -> "основа"? Это по всякому будет на порядки компактнее, чем для каждой мыслимой формы слова (а их для одной основы может быть по нескольку десятков) хранить отдельную запись с её основой. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 02:30 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
mayton Так говорила в июле 1805 года известная Анна Павловна Шерер, фрейлина и приближенная императрицы Марии Феодоровны, встречая важного и чиновного князя Василия, первого приехавшего на ее вечер. Анна Павловна кашляла несколько дней, у нее был грипп, как она говорила (грипп был тогда новое слово, употреблявшееся только редкими). В записочках, разосланных утром с красным лакеем, было написано без различия во всех: Out: так говор в июл 1805 год известн ан павловн шерер фрейлин и приближен императриц мар феодоровн встреч важн и чиновного княз васил перв приеха на е вечер ан павловн кашляла нескольк дне у не был грипп как он говор грипп был тогд новое слов употребля тольк редк в записочк разосла утр с красн лаке был написа без различ во всех Основы, конечно же, совсем не то что надо, но даже они не все были выделены адекватно ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 07:06 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
fkthat mayton Мдя. Начальная форма слова. И основа. Наверное разные штуки. Я не великий специалист в этом, но возможно ли взять готовый словарь (основы слов), построить по нему отношение "основа" -> "стем основы", а потом исходное слово искать по этому отношению в обратном порядке "слово" -> "стем слова" -> "основа"? Это по всякому будет на порядки компактнее, чем для каждой мыслимой формы слова (а их для одной основы может быть по нескольку десятков) хранить отдельную запись с её основой. увы возьмём исходное слово "душили" стем = "душ" по нему находим 3 основы "душ", "душа", "душить" какую брать? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 07:14 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
mayton, почему плохо, я уже написал тут 22408420 . Стемминг придуман для решения инженерной задачи проверки орфографии и полнотекстового поиска, причем в ситуации, когда пропуск нескольких документов так же некритичен, как и включение в поисковую выдачу пары лишних. С лингвистической точки зрения стемминг плох практически для всех языков, даже для английского; для венгерского или тюркских — еще более-менее. fkthat…возможно ли взять готовый словарь (основы слов), построить по нему отношение "основа" -> "стем основы", а потом исходное слово искать по этому отношению в обратном порядке "слово" -> "стем слова" -> "основа"? Можно. Словарь для hunspell от PostgresPro делает все это за исключением выбора правильной леммы (словарной формы) в случае таких форм, как «души» (мн. ч. от «душа» или повел. накл. от «душить»?). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 09:21 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
_avz, эта проблема называется «синтаксическая омонимия», без контекста не решается. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 09:23 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
Ы2 _avz, эта проблема называется «синтаксическая омонимия», без контекста не решается. это понятно. Я имел в виду то, что в случае 22408739 однозначное решение есть, но по стему (метод, предложенный в 22408723 ) не находится ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 09:30 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
Я там в тесте ещё одну ошибку допускаю из за которой последнее слово в строке неверно стеммингуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 10:28 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
Ы2, Да я согласен. Не подходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 10:29 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
В общем, худо-бедно на постгресе заработало как сконфигурировал: 1. скачал словарь https://github.com/postgrespro/hunspell_dicts/tree/master/hunspell_ru_ru 2. скопировал в папку pg SHAREDIR\tsearch_data 3. создал словарь Код: sql 1. 2. 3. 4. 5. 6.
4. создал конфигурацию полнотекстового поиска: Код: sql 1. 2.
5.запрос Код: sql 1.
выдаёт {душа,душить} т.е., или про "душ" словарь не в курсе, или... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 12:04 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
Ы2 Словарь для hunspell от PostgresPro делает все это за исключением выбора правильной леммы (словарной формы) в случае таких форм, как «души» (мн. ч. от «душа» или повел. накл. от «душить»?). Ну это задача совершенно другого уровня сложности, т.к. между "души -> душа" и "души -> душить" без анализа контекста выбрать невозможно. Только выдать все возможные варианты. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 12:16 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
хватает и других косяков: Код: sql 1.
{пей} - хотя должно быть 'пить' шей-{шей,шея} беги-{беги,бег} хотя гляди-{глядеть}, верно и, судя по всему, ещё много чего вскроется по ходу тестирования :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 12:16 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
_avz, ты выкопал себе могилу Ну будешь ближайшие пол-года заниматься морфологией русского языка. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 12:32 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
mayton _avz, ты выкопал себе могилу Ну будешь ближайшие пол-года заниматься морфологией русского языка. Возможно, автору следовало бы начать с рассказа для чего ему все это нужно. Но на скуле это не принято. :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 12:34 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
fkthat, для сравнения двух текстов выдать слова, которые есть в одном, но отсутствуют в другом ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 12:36 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
_avz выдать слова, которые есть в одном, но отсутствуют в другом Так а зачем для этого именно лематизация? Мне кажется что и стемминга должно хватить. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 12:38 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
_avz fkthat, для сравнения двух текстов выдать слова, которые есть в одном, но отсутствуют в другом Господин выше правильно по тексту сказал. Что для анализа слов ЯЗЫКа нам нужно больше контекста. А так получается Код: sql 1.
и вот ищи где тут глагол и существительное в падежах. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 12:39 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
fkthat Так а зачем для этого именно лематизация? Мне кажется что и стемминга должно хватить. 'душили' выдаст стем 'душ' а лемма выдаёт 'душить' всё же лучше mayton А так получается Код: sql 1.
и вот ищи где тут глагол и существительное в падежах. здесь уже приходится смириться с нестопроцентным качеством анализа, в семантику я точно не полезу ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 12:46 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
в машин-лёрнинге наверное решали такие задачи? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 14:51 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
_avz fkthat Так а зачем для этого именно лематизация? Мне кажется что и стемминга должно хватить. 'душили' выдаст стем 'душ' а лемма выдаёт 'душить' всё же лучше mayton А так получается Код: sql 1.
и вот ищи где тут глагол и существительное в падежах. здесь уже приходится смириться с нестопроцентным качеством анализа, в семантику я точно не полезу Если тебе нужен критерий "близости" двух документов то может быть не надо вообще раскладывать на национальные языки. Считай расстояние Дамерау Левенштейна между всеми словами. Есть стандартная функция в apache.commons. Если расстояние допустим меньше 1 или 2 то считай одним словом. Тогда осталось посчитать просто % таких слов в двух документах. Метрика грубая. Неязыковая. Но достаточная чтобы просто группировать документы в кучки. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 14:57 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
Roman Mejtes в машин-лёрнинге наверное решали такие задачи? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 15:04 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
mayton Если тебе нужен критерий "близости" двух документов то может быть не надо вообще раскладывать на национальные языки. Считай расстояние Дамерау Левенштейна между всеми словами. Есть стандартная функция в apache.commons. Если расстояние допустим меньше 1 или 2 то считай одним словом. Тогда осталось посчитать просто % таких слов в двух документах. Метрика грубая. Неязыковая. Но достаточная чтобы просто группировать документы в кучки. В моём случае результат устроил. Уже в разы лучше, чем когда я сравнивал тупо по словам. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 15:06 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
_avz mayton Если тебе нужен критерий "близости" двух документов то может быть не надо вообще раскладывать на национальные языки. Считай расстояние Дамерау Левенштейна между всеми словами. Есть стандартная функция в apache.commons. Если расстояние допустим меньше 1 или 2 то считай одним словом. Тогда осталось посчитать просто % таких слов в двух документах. Метрика грубая. Неязыковая. Но достаточная чтобы просто группировать документы в кучки. В моём случае результат устроил. Уже в разы лучше, чем когда я сравнивал тупо по словам. То есть так хотелось чуда, а его нету Поставьте себе SQL Server какой-нибудь в минимальной версии у него есть fts* функции, которые выдают найденные слова указанного языка. Эту же фигню можете использовать для сравнения двух текстов. Но помните - ваша задача не решается за пару дней и с уровнем знаний "хеллоу ворлд". Кина не будет, расслабьтесь :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2021, 15:42 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
моя задача решилась, так-то :) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2021, 07:58 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
Забил в базу 100500 слов? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2021, 19:17 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
mayton, Хватило той последовательности шагов, что я изложил выше. Можно сказать, это решение вопроса. Очень простое. Неидеальное, но достаточное. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 07:32 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
В чём неидеальность - список слов, который выдаётся в результате сравнения текстов, чуть больше, чем должен. Например, слово "пей" будет считаться отличным от слова "пил", и будет включено, хотя, по идее, это одно и то же слово. Но основная масса словоформ отфильтровывается. Меня устраивает: в таких нечётких задачах ожидать чего-то большего - странно. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 07:45 |
|
Начальная форма слова
|
|||
---|---|---|---|
#18+
Понятно, от анализатора невозможно ожидать и понимания, что, например, слово "душа" в тексте 2 использовано в ином смысле, чем в тексте 1, и должно быть включено в список. Выскажу предположение, что даже с универсальным ИИ такие вещи не решаемы на 100% (Когда даже ЕИ может ошибиться :) Контекст может скрываться сколь угодно далеко за уровнем самого текста. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 07:57 |
|
|
start [/forum/topic.php?all=1&fid=16&tid=1339604]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
others: | 265ms |
total: | 403ms |
0 / 0 |