Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с fts / 23 сообщений из 23, страница 1 из 1
18.06.2008, 15:00
    #35380332
Quessir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с fts
Поставил snowball для русской морфологии.

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

PostgreSQL 8.3(.3). Как вылечить?
...
Рейтинг: 0 / 0
18.06.2008, 15:58
    #35380613
Oleg Bartunov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с fts
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
19.06.2008, 02:36
    #35381548
Quessir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с fts
Поставил имелось ввиду применил. :))

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

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

Код: 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
23.06.2008, 22:04
    #35389580
iz
iz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с fts
QuessirТ.е. он режет только один суффикс/окончание. Как поступать в таких ситуациях?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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