FTS, ISPELL и Ё

Lists: pgsql-ru-general
From: "Александр В(dot) Сизов" <subs(at)arpanet(dot)ru>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: FTS, ISPELL и Ё
Date: 2008-12-14 23:25:07
Message-ID: 494595D3.8020305@arpanet.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

Hello, world!

Решил поэкспериментировать в FreeBSD6.3 под PostgreSQL 8.3.5 (+ICU) с
FTS. В качестве словаря выбрал Ispell 0.99g5, собрал с поддержкой 'ё'.
Сразу возникла проблема: 'самолёт' @@ 'самолет' = false. Ок, пересобрал
без поддержки 'ё' => 'самолёт' @@ 'самолет' = false. Ок, собрал,
распарсил, вырезал ё руками (ни в одной строчке не оставил 'ё') -
'самолёт' @@ 'самолет' = false, при этом 'самолёты', 'самолётами', ...
нормально приводятся к каноническому виду (как???).
Привожу код:

-------------------------------------------------------- CUT
CREATE SCHEMA library;

CREATE TEXT SEARCH DICTIONARY library.ispell_ru (
TEMPLATE = ispell,
DictFile = ispell_ru,
AffFile = ispell_ru,
StopWords = russian
);

CREATE TEXT SEARCH CONFIGURATION library.russian (
COPY = russian
);

ALTER TEXT SEARCH CONFIGURATION library.russian
ALTER MAPPING FOR hword, hword_part, word
WITH library.ispell_ru, russian_stem;

ALTER TEXT SEARCH CONFIGURATION library.russian
DROP MAPPING FOR
email,
file,
float,
host,
sfloat,
url,
url_path,
version;

-------------------------------------------------------- CUT

На время, чтобы на долго не застревать, написал функции, подменяющие
ё->е в поиске и записи в БД, но хотелось бы понять и решить проблему...

WBR!


From: "Александр В(dot) Сизов" <subs(at)arpanet(dot)ru>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: FTS, ISPELL и Ё
Date: 2008-12-15 00:10:48
Message-ID: 4945A088.1050506@arpanet.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general


Немного разобрался: на слова с буквой ё срабатывает словарь
russian_stem. Теперь как сделать чтобы ёж == еж ? ))

Александр В. Сизов пишет:
> Hello, world!
>
> Решил поэкспериментировать в FreeBSD6.3 под PostgreSQL 8.3.5 (+ICU) с
> FTS. В качестве словаря выбрал Ispell 0.99g5, собрал с поддержкой 'ё'.
> Сразу возникла проблема: 'самолёт' @@ 'самолет' = false. Ок,
> пересобрал без поддержки 'ё' => 'самолёт' @@ 'самолет' = false. Ок,
> собрал, распарсил, вырезал ё руками (ни в одной строчке не оставил
> 'ё') - 'самолёт' @@ 'самолет' = false, при этом 'самолёты',
> 'самолётами', ... нормально приводятся к каноническому виду (как???).
> Привожу код:
>
> -------------------------------------------------------- CUT
> CREATE SCHEMA library;
>
> CREATE TEXT SEARCH DICTIONARY library.ispell_ru (
> TEMPLATE = ispell,
> DictFile = ispell_ru,
> AffFile = ispell_ru,
> StopWords = russian
> );
>
> CREATE TEXT SEARCH CONFIGURATION library.russian (
> COPY = russian
> );
>
> ALTER TEXT SEARCH CONFIGURATION library.russian
> ALTER MAPPING FOR hword, hword_part, word
> WITH library.ispell_ru, russian_stem;
>
> ALTER TEXT SEARCH CONFIGURATION library.russian
> DROP MAPPING FOR
> email,
> file,
> float,
> host,
> sfloat,
> url,
> url_path,
> version;
>
> -------------------------------------------------------- CUT
>
> На время, чтобы на долго не застревать, написал функции, подменяющие
> ё->е в поиске и записи в БД, но хотелось бы понять и решить проблему...
>
> WBR!
>


From: "Nikolay Samokhvalov" <samokhvalov(at)gmail(dot)com>
To: Александр В(dot) Сизов <subs(at)arpanet(dot)ru>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: FTS, ISPELL и Ё
Date: 2008-12-15 05:41:40
Message-ID: e431ff4c0812142141o2cb624b4j646a94ab1fea4b7a@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

15 декабря 2008 г. 2:25 пользователь "Александр В. Сизов"
<subs(at)arpanet(dot)ru> написал:
> -------------------------------------------------------- CUT
>
> На время, чтобы на долго не застревать, написал функции, подменяющие ё->е в
> поиске и записи в БД, но хотелось бы понять и решить проблему...

Написали функцию -- решили проблему, разве не так?

--
Sincerely yours,
Nikolay Samokhvalov
Postgresmen LLC, http://postgresmen.ru


From: "Andrey N(dot) Oktyabrski" <ano(at)antora(dot)ru>
To: Nikolay Samokhvalov <samokhvalov(at)gmail(dot)com>
Cc: "Александр В(dot) Сизов" <subs(at)arpanet(dot)ru>, pgsql-ru-general(at)postgresql(dot)org
Subject: Re: FTS, ISPELL и Ё
Date: 2008-12-15 05:43:50
Message-ID: 4945EE96.5060903@antora.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

Nikolay Samokhvalov wrote:
> 15 декабря 2008 г. 2:25 пользователь "Александр В. Сизов"
> <subs(at)arpanet(dot)ru> написал:
>> -------------------------------------------------------- CUT
>>
>> На время, чтобы на долго не застревать, написал функции, подменяющие ё->е в
>> поиске и записи в БД, но хотелось бы понять и решить проблему...
>
> Написали функцию -- решили проблему, разве не так?
Нет. Это залепа.


From: Oleg Bartunov <oleg(at)sai(dot)msu(dot)su>
To: "Александр В(dot) Сизов" <subs(at)arpanet(dot)ru>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: FTS, ISPELL и Ё
Date: 2008-12-15 08:45:03
Message-ID: Pine.LNX.4.64.0812151129500.28443@sn.sai.msu.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

Александр, руководствуйтесь здравым смыслом - что проиндексируете, то и
найдете. Никакой магии внутри у нас нет, все отдано здесь на откуп
пользовательскому словарю. Если вы хотите различать 'е' и 'ё', то напишите
словарь-враппер (давно всем предлагаю) вокруг испелла, который опционально
возвращает нормализованные формы и/или оригинальное слово. Его вы используете
пи индексации, а при поиске одну из конфигураций - со словраем, который
понимает 'ё', который не понимает.
Но обычно, просто используйте нечто вроде
to_tsvector(translate(string,'ё','е')) и не будет никаких проблем.

Олег

Олег
On Mon, 15 Dec 2008, "Александр В. Сизов" wrote:

> Hello, world!
>
> Решил поэкспериментировать в FreeBSD6.3 под PostgreSQL 8.3.5 (+ICU) с FTS. В
> качестве словаря выбрал Ispell 0.99g5, собрал с поддержкой 'ё'. Сразу
> возникла проблема: 'самолёт' @@ 'самолет' = false. Ок, пересобрал без
> поддержки 'ё' => 'самолёт' @@ 'самолет' = false. Ок, собрал, распарсил,
> вырезал ё руками (ни в одной строчке не оставил 'ё') - 'самолёт' @@ 'самолет'
> = false, при этом 'самолёты', 'самолётами', ... нормально приводятся к
> каноническому виду (как???).
> Привожу код:
>
> -------------------------------------------------------- CUT
> CREATE SCHEMA library;
>
> CREATE TEXT SEARCH DICTIONARY library.ispell_ru (
> TEMPLATE = ispell,
> DictFile = ispell_ru,
> AffFile = ispell_ru,
> StopWords = russian
> );
>
> CREATE TEXT SEARCH CONFIGURATION library.russian (
> COPY = russian
> );
>
> ALTER TEXT SEARCH CONFIGURATION library.russian
> ALTER MAPPING FOR hword, hword_part, word
> WITH library.ispell_ru, russian_stem;
>
> ALTER TEXT SEARCH CONFIGURATION library.russian
> DROP MAPPING FOR
> email,
> file,
> float,
> host,
> sfloat,
> url,
> url_path,
> version;
>
> -------------------------------------------------------- CUT
>
> На время, чтобы на долго не застревать, написал функции, подменяющие ё->е в
> поиске и записи в БД, но хотелось бы понять и решить проблему...
>
> WBR!
>
>

Regards,
Oleg
_____________________________________________________________
Oleg Bartunov, Research Scientist, Head of AstroNet (www.astronet.ru),
Sternberg Astronomical Institute, Moscow University, Russia
Internet: oleg(at)sai(dot)msu(dot)su, http://www.sai.msu.su/~megera/
phone: +007(495)939-16-83, +007(495)939-23-83


From: "Александр В(dot) Сизов" <subs(at)arpanet(dot)ru>
To: Oleg Bartunov <oleg(at)sai(dot)msu(dot)su>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: FTS, ISPELL и Ё
Date: 2008-12-15 10:08:37
Message-ID: 49462CA5.1030907@arpanet.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general


спс, с translate () как-то все упростилось... ))

Oleg Bartunov пишет:
> Александр, руководствуйтесь здравым смыслом - что проиндексируете, то
> и найдете. Никакой магии внутри у нас нет, все отдано здесь на откуп
> пользовательскому словарю. Если вы хотите различать 'е' и 'ё', то
> напишите
> словарь-враппер (давно всем предлагаю) вокруг испелла, который
> опционально
> возвращает нормализованные формы и/или оригинальное слово. Его вы
> используете
> пи индексации, а при поиске одну из конфигураций - со словраем, который
> понимает 'ё', который не понимает. Но обычно, просто используйте нечто
> вроде to_tsvector(translate(string,'ё','е')) и не будет никаких проблем.
>
> Олег
>
> Олег
> On Mon, 15 Dec 2008, "Александр В. Сизов" wrote:
>
>> Hello, world!
>>
>> Решил поэкспериментировать в FreeBSD6.3 под PostgreSQL 8.3.5 (+ICU) с
>> FTS. В качестве словаря выбрал Ispell 0.99g5, собрал с поддержкой
>> 'ё'. Сразу возникла проблема: 'самолёт' @@ 'самолет' = false. Ок,
>> пересобрал без поддержки 'ё' => 'самолёт' @@ 'самолет' = false. Ок,
>> собрал, распарсил, вырезал ё руками (ни в одной строчке не оставил
>> 'ё') - 'самолёт' @@ 'самолет' = false, при этом 'самолёты',
>> 'самолётами', ... нормально приводятся к каноническому виду (как???).
>> Привожу код:
>>
>> -------------------------------------------------------- CUT
>> CREATE SCHEMA library;
>>
>> CREATE TEXT SEARCH DICTIONARY library.ispell_ru (
>> TEMPLATE = ispell,
>> DictFile = ispell_ru,
>> AffFile = ispell_ru,
>> StopWords = russian
>> );
>>
>> CREATE TEXT SEARCH CONFIGURATION library.russian (
>> COPY = russian
>> );
>>
>> ALTER TEXT SEARCH CONFIGURATION library.russian
>> ALTER MAPPING FOR hword, hword_part, word
>> WITH library.ispell_ru, russian_stem;
>>
>> ALTER TEXT SEARCH CONFIGURATION library.russian
>> DROP MAPPING FOR
>> email,
>> file,
>> float,
>> host,
>> sfloat,
>> url,
>> url_path,
>> version;
>>
>> -------------------------------------------------------- CUT
>>
>> На время, чтобы на долго не застревать, написал функции, подменяющие
>> ё->е в поиске и записи в БД, но хотелось бы понять и решить проблему...
>>
>> WBR!
>>
>>
>
> Regards,
> Oleg
> _____________________________________________________________
> Oleg Bartunov, Research Scientist, Head of AstroNet (www.astronet.ru),
> Sternberg Astronomical Institute, Moscow University, Russia
> Internet: oleg(at)sai(dot)msu(dot)su, http://www.sai.msu.su/~megera/
> phone: +007(495)939-16-83, +007(495)939-23-83