Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Морфология и стемминг
 
 автор: ДацкыйКот   (25.11.2008 в 08:59)   письмо автору
 
 

Планирую прикрутить к полнотекстовому поиску учет морфологии. И вот призадумался над реализацией..

1) Можно попробовать приводить к нормальной форме (т.е. в именительный падеж и т.п.) все слова (как в запросе, так и в данных). Но это естественно, потребует увеличить почти вдвое объем хранимых данных: будет хранится оригинальная версия и версия с преобразованными словами.

2) Можно попробовать стемминг (обрезание окончаний слов) и искать слова в обрезанном виде. Но опять же, обрежем слово "день" до "ден" - и все равно слово "дни" не найдем.

3) Можно извратиться и для каждого слова в запросе найти все формы, после чего запустить полнотекстовый поиск по всем этим формам. Но мне даже страшно представить какой там получится sql-запрос: если, допустим, исходный запрос из 3 слов, и каждое слово имеет штук по 10 форм минимум. Да и полнотекстовый поиск вроде имеет ограничение на длину запроса в 255 символов.

Какие еще соображения есть у вас?

Планирую использовать phpMorphy. Вроде несложная система с хорошей базой. Позволяет находить нормальную форму слова, псевдо-корень слова (отбрасывает окончания и суффиксы), и находит возможные формы слова.

  Ответить  
 
 автор: mechanic   (25.11.2008 в 09:39)   письмо автору
 
   для: ДацкыйКот   (25.11.2008 в 08:59)
 

первый вариант мне видится самым оптимальным
вообще если идет речь о поиске по всему сайту (в смысле о "форме поиска", а не об sql-запросе для поиска по таблице), то я бы сделал индексер и к нему поисковик

грабим страницу
приводим содержание к нормальной форме
записываем в базу

и ничего страшного в удвоенном объеме данных, главное сделать нужные ключи

  Ответить  
 
 автор: ДацкыйКот   (25.11.2008 в 11:29)   письмо автору
 
   для: mechanic   (25.11.2008 в 09:39)
 

хм.. а как тогда индекс делать?

поясню.. у меня тогда вырастает 3 поля:
1) оригинальное
2) модифицированное для полнотекста - без тегов и пр.
3) модифицированное для морфологического полнотекста - без тегов, все слова в нормальной форме

мне нужно обеспечить 2 вида поиска:
А) точный, тот который в кавычках. для такого буду использовать поле (2) при этом запрос не модифицирую.
Б) морфологический, для такого буду модифицировать запрос - приводить слова в нормальный вид; искать будет в поле (3)

в принципе по наличию кавычек в запросе я могу сделать ветвление - запускать либо (А) либо (Б). Тогда можно делать индексы раздельные на поля (2) и (3).
Либо можно создать общий индекс на поля (2,3) и тогда любой запрос будет обращен к одному индексу..

  Ответить  
 
 автор: mechanic   (26.11.2008 в 11:17)   письмо автору
 
   для: ДацкыйКот   (25.11.2008 в 11:29)
 

>мне нужно обеспечить 2 вида поиска:
>А) точный, тот который в кавычках. для такого буду использовать поле (2) при этом запрос не модифицирую.
>Б) морфологический, для такого буду модифицировать запрос - приводить слова в нормальный вид; искать будет в поле (3)

а нельзя привести запрос в кавычках к нормальной форме и искать по морфоиндексу?
поле 2 мне кажется лишним

  Ответить  
 
 автор: ДацкыйКот   (25.11.2008 в 11:30)   письмо автору
 
   для: mechanic   (25.11.2008 в 09:39)
 

****и ничего страшного в удвоенном объеме данных, главное сделать нужные ключи****

с учетом того, что полей будет 3 и на поля 2, 3 могут быть отдельные индексы, которые наверно могут быть сопоставимы по размеру с самими данными.. то как бы блин морфологический полнотекст не потребовал увеличения дискового пространства в 5 раз )))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования