powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с fts
23 сообщений из 23, страница 1 из 1
Проблема с fts
    #35380332
Quessir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставил snowball для русской морфологии.

При запросе на, например, "человека" находит все склонения, а если "человек" - то не находит.

PostgreSQL 8.3(.3). Как вылечить?
...
Рейтинг: 0 / 0
Проблема с fts
    #35380613
Oleg Bartunov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QuessirПоставил snowball для русской морфологии.

При запросе на, например, "человека" находит все склонения, а если "человек" - то не находит.

PostgreSQL 8.3(.3). Как вылечить?

Куда "поставил" ? Он в 8.3 по-умолчанию стоит.
Проверь:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
=# select * from ts_debug('russian','человека человек');
 alias |    description    |  token   |  dictionaries  |  dictionary  |  lexemes
-------+-------------------+----------+----------------+--------------+-----------
 word  | Word, all letters | человека | {russian_stem} | russian_stem | {человек}
 blank | Space symbols     |          | {}             |              |
 word  | Word, all letters | человек  | {russian_stem} | russian_stem | {человек}



А вообще, надо бы привести больше информации.
...
Рейтинг: 0 / 0
Проблема с fts
    #35381548
Quessir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставил имелось ввиду применил. :))

С "человек"-ом не совсем удачный пример получился, прошу прощения.

Вот пример с не совсем русским словом.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
postgres=# select * from ts_debug('pg','Бекмамбетов Бекмамбетовым');
 alias |    description    |     token     |  dictionaries  |  dictionary  |    lexemes    
-------+-------------------+---------------+----------------+--------------+---------------
 word  | Word, all letters | Бекмамбетов   | {russian_stem} | russian_stem | {бекмамбет}
 blank | Space symbols     |               | {}             |              | 
 word  | Word, all letters | Бекмамбетовым | {russian_stem} | russian_stem | {бекмамбетов}
( 3  rows)

И обычный

Код: plaintext
1.
2.
3.
4.
5.
6.
postgres=# select * from ts_debug('pg','красный красноватый');
 alias |    description    |    token    |  dictionaries  |  dictionary  |   lexemes   
-------+-------------------+-------------+----------------+--------------+-------------
 word  | Word, all letters | красный     | {russian_stem} | russian_stem | {красн}
 blank | Space symbols     |             | {}             |              | 
 word  | Word, all letters | красноватый | {russian_stem} | russian_stem | {красноват}
( 3  rows)

Или вот

Код: plaintext
1.
2.
3.
4.
5.
6.
postgres=# select * from ts_debug('pg','Португалия Португальцы');
 alias |    description    |    token    |  dictionaries  |  dictionary  |   lexemes    
-------+-------------------+-------------+----------------+--------------+--------------
 word  | Word, all letters | Португалия  | {russian_stem} | russian_stem | {португал}
 blank | Space symbols     |             | {}             |              | 
 word  | Word, all letters | Португальцы | {russian_stem} | russian_stem | {португальц}
( 3  rows)

Т.е. он режет только один суффикс/окончание. Как поступать в таких ситуациях?
...
Рейтинг: 0 / 0
Проблема с fts
    #35389580
iz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iz
Гость
QuessirТ.е. он режет только один суффикс/окончание. Как поступать в таких ситуациях?

Чего вы хотите добиться? Snowball так устроен, что обрезает только одно окончание.
...
Рейтинг: 0 / 0
Проблема с fts
    #35391222
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iz QuessirТ.е. он режет только один суффикс/окончание. Как поступать в таких ситуациях?

Чего вы хотите добиться? Snowball так устроен, что обрезает только одно окончание.

видимо автор хотел добиться поиска с учетом словоформ, нормальным.

Ведь обрезать одно окончание слова недостаточно, это примитивный вариант

Такое существует в природе?
...
Рейтинг: 0 / 0
Проблема с fts
    #35391282
iz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iz
Гость
Winnipuh
видимо автор хотел добиться поиска с учетом словоформ, нормальным.

Ведь обрезать одно окончание слова недостаточно, это примитивный вариант

Такое существует в природе?

Обрезать нужно только одно окончание, так как остальные "словоформы", как вы их называете, таковыми не являются. Это формы другого слова, однокоренного с исходным. То есть у них общий корень, но разные суффиксы и окончания. Стемминг окончания в слове "Португалия" нужен только для того, чтобы находить по этому запросу все склонения: "Португалии", "Португалию" и т.д., но не другое слово "португальцы". Стемминг окончания в слове "португальцы" нужен только для того, чтобы находить все его склонения: "португальцев", "португальцами" и т.д., но не другие однокоренные слова вроде "Португалия" или "Порту".
...
Рейтинг: 0 / 0
Проблема с fts
    #35394960
Quessir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно, но может как-то можно сделать так сказать "агрессивный стемминг".
...
Рейтинг: 0 / 0
Проблема с fts
    #35395953
iz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iz
Гость
Мне в голову только приходит многократное пропускание через стемминг, пока лексема не перестанет меняться. Но хорошим это решение я не назову.
...
Рейтинг: 0 / 0
Проблема с fts
    #35396112
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iz Winnipuh
видимо автор хотел добиться поиска с учетом словоформ, нормальным.

Ведь обрезать одно окончание слова недостаточно, это примитивный вариант

Такое существует в природе?

Обрезать нужно только одно окончание, так как остальные "словоформы", как вы их называете, таковыми не являются. Это формы другого слова, однокоренного с исходным. То есть у них общий корень, но разные суффиксы и окончания. Стемминг окончания в слове "Португалия" нужен только для того, чтобы находить по этому запросу все склонения: "Португалии", "Португалию" и т.д., но не другое слово "португальцы". Стемминг окончания в слове "португальцы" нужен только для того, чтобы находить все его склонения: "португальцев", "португальцами" и т.д., но не другие однокоренные слова вроде "Португалия" или "Порту".

так доходчиво расписали про "словоформы", а что означает "стемминг", как вы его называете?
...
Рейтинг: 0 / 0
Проблема с fts
    #35402040
iz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iz
Гость
Winnipuh
так доходчиво расписали про "словоформы", а что означает "стемминг", как вы его называете?

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

Пример, если лень залезть в psql с ФТС: 'московский' --> 'московск'. См. также выше в этой дискуссии.

Алгоритмов стемминга существует великое множество. Snowball -- одно из семейств таких алгоритмов. Подробнее -- см. в Википедии.
...
Рейтинг: 0 / 0
Проблема с fts
    #35402045
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iz Winnipuh
так доходчиво расписали про "словоформы", а что означает "стемминг", как вы его называете?

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

Пример, если лень залезть в psql с ФТС: 'московский' --> 'московск'. См. также выше в этой дискуссии.

Алгоритмов стемминга существует великое множество. Snowball -- одно из семейств таких алгоритмов. Подробнее -- см. в Википедии.

спасибо за объяснение смысла английского слова русскими словами
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Проблема с fts
    #36692072
yack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, проблема приведения к корню не решается рекутсивным стеммингом, как было рекомендовано выше:

select * from ts_debug('russian','стокгольмский'); => стокгольмск
select * from ts_debug('russian','стокгольмск'); => стокгольмск
...
Рейтинг: 0 / 0
Проблема с fts
    #36692234
Гость_0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как работает FTS для иероглифичного письма, например японского? Хотябы в общих чертах, просто интересно :)
...
Рейтинг: 0 / 0
Проблема с fts
    #36692449
yack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ответ, кстати, так и не был дан.
Подобную тему я поднял здесь:
http://forum.sql.ru/forum/actualthread.aspx?tid=767810
...
Рейтинг: 0 / 0
Проблема с fts
    #36692966
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yack,

я эту проблему уже решил и дал решение. Я делал "нормализацию" слов - делал перебор окончаний для получения минимальной лексемы, по ней потом и ищем со звёздочкой (prefix matching ):

http://sql.ru/forum/actualthread.aspx?tid=721916
...
Рейтинг: 0 / 0
Проблема с fts
    #36692983
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только массив расширил:
Код: plaintext
array [ '', 'е', 'ий', 'я', 'о', 'ь', 'т' ]

Прецендентные слова, которые портили поиск по части слова:
Код: plaintext
1.
2.
3.
4.
5.
    о - зубчатог о
    ь - контактироват ь
    я - интенсивнос ти
    е - электрообогреваемы й
    ий - скользящ ий
    т - характеризуе т
...
Рейтинг: 0 / 0
Проблема с fts
    #36693034
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iz,

по-моему стеминг вообще НЕ имеет смыла, что и показано инсталляцией PG - по-умолчанию в нём идёт только список стоп-слов. Никто кроме человека понимающего контекст не поймёт значение слова:

Код: plaintext
белок - это родительный падеж от животного "белка" или речь о белковых соединениях?

Реализовавали БД для патентного ведомства. 60 млн патентов. Все эти глупости со стемингами уже прошли. При проведении экспертизы (полнотекстовый поиск на похожие изобретения) всё стаёт ясно со стемингами.
...
Рейтинг: 0 / 0
Проблема с fts
    #36693435
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_foxiz,

по-моему стеминг вообще НЕ имеет смыла, что и показано инсталляцией PG - по-умолчанию в нём идёт только список стоп-слов. Никто кроме человека понимающего контекст не поймёт значение слова:

Код: plaintext
белок - это родительный падеж от животного "белка" или речь о белковых соединениях?

Реализовавали БД для патентного ведомства. 60 млн патентов. Все эти глупости со стемингами уже прошли. При проведении экспертизы (полнотекстовый поиск на похожие изобретения) всё стаёт ясно со стемингами.

в случае белка - и то, и другое должно находиться, точно знает, что нужно - только юзер
...
Рейтинг: 0 / 0
Проблема с fts
    #36698809
yack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_fox,

С замкОм и зАмком та же фигня :)

Хорошо, когда можно самому окончания подрезать. А у меня еще и украинский язык имеетися, а там не совасем такие же правила :(
...
Рейтинг: 0 / 0
Проблема с fts
    #36699452
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yack,

в украинском вообще надо писать свой парсер, иначе апостроф будет делать два слова. Но это уже не по теме.
...
Рейтинг: 0 / 0
Проблема с fts
    #36699479
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_fox, почему не по теме? имхо интересно :) а в словари украинские типа ispell/myspell входят слова с апострофами, как они их воспринимают?
...
Рейтинг: 0 / 0
Проблема с fts
    #36700963
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёш,

ну словари то не для постгреса делаются, - они универсальные. А чтобы оно работало ожидаемо в PG, видимо парсер нужен соответствующий. Русский парсер не подходит:

Код: plaintext
1.
2.
select to_tsvector('russian', 'М’який')
-------------
'м': 1  'як': 2 

Оно, конечно, to_tsquery сделает то же самое при поиске, и результаты могут быть как правильными, так и неожиданными.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Проблема с fts
    #39603538
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_fox,это не парсер, а цепочка из парсера и словарей

парсер (токенайзер) вот
Код: sql
1.
2.
3.
4.
5.
select * from ts_parse('default', 'М’який')
----------
2,'М'
12,'’'
2,'який'


хотя и его нарно можно перекрыть, но можно и на выходе взад слова собирать.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с fts
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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