Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск с учетом МОРФОЛОГИИ языка, PHP + MySQL + ISPELL 
:(
    Опции темы
artfabrique
Дата 1.10.2006, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Дизайн
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 5.2.2006
Где: СПб

Репутация: нет
Всего: 2



Народ! подскажите как работать в этой связке и что нужно для этого
У меня есть SQL дамп окончаний слов ispell
я его импортнул в мою ДБ, а что дальше то?
Прикрепляю дамп


Это сообщение отредактировал(а) artfabrique - 1.10.2006, 09:38

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  paradigms_ru.rar 119,62 Kb
--------------------
Я спасу мир! © ЙУХ 0000г.
PM MAIL WWW ICQ   Вверх
Eugene_Bond
Дата 1.10.2006, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 3.9.2006

Репутация: 1
Всего: 4



дальше есть два пути:
1. все текстовые материалы дублировать в нормальной форме. при поиске запрос приводить в нормальную же форму и искать. логику оттачивать прийдется самому. неисключены двумысленности. например:
"мама мыла раму" даст 4 слова в нормальной форме -- "мама", "мыть" и "мыло", "рама"

2. поисковый запрос приводить к нормальной форме, потом строить все возможные словоформы и искать по ним. то есть при поиске по слову "пипетка" (нормальная форма) искать надо будет по словам "пипетка", "пипетки", "пипетку" и т.п.
PM MAIL   Вверх
artfabrique
Дата 1.10.2006, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Дизайн
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 5.2.2006
Где: СПб

Репутация: нет
Всего: 2



ХАХАХАХАХАХАХАХХАХАХАХАХАХХА
Дак это и ежу понятно, что такой порядок!
я же про ISPELL говорю! как его подключить чтобы корень слова выделить и как им пользоватся!

Это все рассказывалось, как я понимаю в журнале PHPH Inside #7!!!!! если есть у кого нить поделитесь а?????

Это сообщение отредактировал(а) artfabrique - 1.10.2006, 17:34
--------------------
Я спасу мир! © ЙУХ 0000г.
PM MAIL WWW ICQ   Вверх
Eugene_Bond
Дата 1.10.2006, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 3.9.2006

Репутация: 1
Всего: 4



artfabrique, тут есть: http://www.phpclub.ru/detail/magazine/2004/10/
но:
1. материалы в журнале несколько урезаны по сравнению с исходными докладами конференции
2. алгоритм приведения форм тривиален по своей сути
3. решение описанное в докладе сильно упрощено и рессурсоемоко

сразу могу сказать что с точки зрения производительности выгоднее делать перебор аффиксов в цикле, чем перекладывать эту задачу на MySQL (проверено эксперементально). Хотя, скорее всего, использовать хранимые процедуры MySQL5 или PostgreSQL будет выгодно.

PM MAIL   Вверх
Eugene_Bond
Дата 1.10.2006, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 3.9.2006

Репутация: 1
Всего: 4



PM MAIL   Вверх
artfabrique
Дата 2.10.2006, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Дизайн
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 5.2.2006
Где: СПб

Репутация: нет
Всего: 2



ага! встроеные процедуры решают. ну по крайней мере в оракле(да и она вообще в разы спокойней себя чувствует в больших обьемах инфы)
я с процедурами в мускуле 5-м токо-токо начал разбираться... хостинги его не держат нифига пока что.
Так что буду циклом фигачить.
--------------------
Я спасу мир! © ЙУХ 0000г.
PM MAIL WWW ICQ   Вверх
artfabrique
Дата 2.10.2006, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Дизайн
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 5.2.2006
Где: СПб

Репутация: нет
Всего: 2



Мда... не хилая статейка.
Вроде все подробно, но многое важное действительно опущено.
Мнебы теперь ещё найти уже сконвертированные в таблички мускуля все эти окончания и слова.....
И интересно есть ли уже какие нить готовые классы для работы сними... наверняка есть же...
может кто знает гже это достать всё можно??
я пока что нарыл только табличку мускуля с окончаниями.

Итак! как я понял действия такие:
1) Бью статьи (например) на слова, ставя тэги какое слово из какой статьи
2) Создаю в базе табличку search_object_уникальный_id_поискового_запроса и пишу туда этои статьи по слову на ряд.
3) Бью на слова поисковый запрос
4) получаю начальные формы каждого из слов
5) Выполняю ах@#$но грамоздкий запрос к мускулю(после которого он кашляет кровью и молит о пощаде) для поиска слов с учетом морфологии слов поисковой фразы по таблице search_object_уникальный_id_поискового_запроса с сортировкой по релевантности.
6) фетчу резалт
7) Удаляю нах временные таблицы.
8) Ну получил я массив с найденными словами и тегами на статьи из бд. А как теперь мне получить куски текста окружающие найденные слова и выделить сами найденные слова????????????

ИЛИ

меджу 4-м и 5-м пунктом ещё один нужен - записать в отделную таблицу все начальные формы
 слов поискового запроса.
Нужно это или нет?

--------------------
Я спасу мир! © ЙУХ 0000г.
PM MAIL WWW ICQ   Вверх
artfabrique
Дата 2.10.2006, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Дизайн
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 5.2.2006
Где: СПб

Репутация: нет
Всего: 2



--------------------
Я спасу мир! © ЙУХ 0000г.
PM MAIL WWW ICQ   Вверх
Eugene_Bond
Дата 2.10.2006, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 3.9.2006

Репутация: 1
Всего: 4



Цитата(artfabrique @  2.10.2006,  07:38 Найти цитируемый пост)
Мнебы теперь ещё найти уже сконвертированные в таблички мускуля все эти окончания и слова.....

1. поля прямо "как есть" в словаре так в таблицу и ложатся. типа:
 
Код

CREATE TABLE words_aff (
  id int(11) NOT NULL auto_increment,
  reg char(64) NOT NULL default '',
  minus char(32) NOT NULL default '',
  plus char(32) NOT NULL default '',
  flag char(1) NOT NULL default '',
  PRIMARY KEY  (id),
  KEY flag (flag)
) TYPE=MyISAM;


слова еще проще.

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



Цитата(artfabrique @  2.10.2006,  07:38 Найти цитируемый пост)
И интересно есть ли уже какие нить готовые классы для работы сними... наверняка есть же...
может кто знает гже это достать всё можно??

Ну а как же "спортивный программерский интерес"? Ведь ничего невероятно сложного в алгоритме нет.  Зато использование чужого, пусть даже рабочего решения, ИМХО, внесет в код лишний дисбалланс и дизорганизацию (кроме стандартизированых вариантов типа PEAR).


Цитата(artfabrique @  2.10.2006,  07:38 Найти цитируемый пост)
ИЛИ

меджу 4-м и 5-м пунктом ещё один нужен - записать в отделную таблицу все начальные формы
 слов поискового запроса.

Между первым и вторым пунтками можно привести слова в нормальные формы.


Кстати, вполне удовлетворительных результатов поиска (причем с меньшей кровью) можно добиться "индексируя" исходный текст путем дублирования его же в виде текста состоящего из нормальных форм слов и полнотекстового поиска (приведя поисковый запрос к нормальным же формам).
PM MAIL   Вверх
Opik
Дата 11.10.2006, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



Я сделал так: взял базу суффиксов и словарик, и сгенерировал базу вида:
Слово,Искомое слово
Слово2,Искомое слово2
и так далее. 

потом все вогнал в базу, лишь в том отличии, что вторым параметром указал id первого слова.
Но база сама по себе окажется огроменной (позже скажу в МБ), текстовый же файл занимает 55 мб. (база должна быть меньше).

Нужно придумать оптимальный алгоритм хранения и поиска искомого слова, будут идеи? (Сам пока думаю).

PM MAIL Skype   Вверх
Vaulter
Дата 11.10.2006, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 6
Всего: 22



алгоритм хранения? smile меня это словосочетание почемуто пугает.



--------------------
PM MAIL WWW ICQ   Вверх
Opik
Дата 12.10.2006, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



Vaulter, 
Ну ссоный писал, что поделать. Суть то понял. А вообще оффтоп.
PM MAIL Skype   Вверх
Opik
Дата 12.10.2006, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



Сейчас у меня есть 2 скрипта на Perl
1) Генеририрует словоформы
2) Добавляет слова в базу (add_word.pl из risearch.org/rumpr)

Сейчас пытаюсь совместить их оба, что бы можно было добавлять спокойно свои слова в "пакет" rumor. а она работает довольно шустро.
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0591 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.