Русский морфологический поиск для 5 Друпала
Прислано: Shelendor
вт, 06/02/2007 - 07:42
Тут была ветка форума, в которой разработали модуль морфологического поиска, вот она http://drupal.ru/node/2449 но это для Друпала 4.7. Как его приделать к 5 версии? А то морфологический поиск актуален как и раньше :)
- Shelendor's blog
- Для комментирования войдите или зарегистрируйтесь
Сделал адаптацию к 5-й версии и перевод (см. аттач)
- Для комментирования войдите или зарегистрируйтесь
greenmother@drupal.org - ещё не потестил, но заранее спасибо! :)
- Для комментирования войдите или зарегистрируйтесь
Спасибо! Еще бы "Типографику" адаптировать... :)
- Для комментирования войдите или зарегистрируйтесь
хм. наконец-то поставил его. почему-то не работает :( в оригинальной теме говорится о замене модуля search на модуль из прилагаемого архива, но это для 4.7.3. Как его применить к 5? может из-за этого у меня не работает?
- Для комментирования войдите или зарегистрируйтесь
Даааа... Действительно работает!
greenmother@drupal.org, респект!
Единственное, что добавил бы в твою инструкцию, так это пункт №4: Запустить cron.php, после которого у меня собственно всё и заработало. :)
По крайней мере на локольном хосте, на винде ... Про никсовый хостинг остаётся только молиться всем богам.
- Для комментирования войдите или зарегистрируйтесь
Люди! Пожалуйста, объясните мне, тупому, как адаптировать модуль поиска под 5 версию!!! Очень нужно!!! А простое включение rustemmer результата не даёт... :(
- Для комментирования войдите или зарегистрируйтесь
Не знаю поможет ли это, но я просто опишу, что сделал я на локольной машине (win32, apache1.3 php5 mysql4 pgsql8).
Для проверки работоспособности поиска я создал новую статью с текстом вашего поста "Люди! Пожалуйста, объясните мне..."
С начала я сделал рабочим обычный поиск, то есть если запрос "люди" он даёт ссылку на нашу статью и _подсвечивает_ слово "люди". Это критерий работоспособности обычного поиска. Далее я ставлю модуль и проделываю следующие шаги - они описаны в руководстве пакета по установке :)
1. Copy the rustemmer.module to the Drupal modules/ directory. Drupal should automatically detect it.
2. Go to 'administer > modules', and enable rustemmer.
3. Go to 'administer > settings > search' and click 'Re-index site'.
Плюс я запускаю cron.php (не знаю может в рамках этого скрипта выполняются те же действия что и при нажатии 'Re-index site' и когда я основательно всётаки пойму архитектуры дупала и посмеюсь над своим этим постом) после этого всё заработало. Вот критерии рабочего морф-ого поиска:
Только 'Re-index site'
1.1. Ищем "люди" -> Х
1.2. Ищем "людей" -> Х
1.3. Ищем "тупой" -> Х
1.4. Ищем "тупая" -> X
После cron.php
1.1. Ищем "люди" -> "люди" (слово подсвечено)
1.2. Ищем "людей" -> ссылка на нашу статью
1.3. Ищем "тупой" -> "тупой" (слово подсвечено)
1.4. Ищем "тупая" -> ссылка на нашу статью
Вроде бы всё.
Создал еще статью и снова проверил, работает по тому же алгоритму.
- Для комментирования войдите или зарегистрируйтесь
я всё это и так проделал :) а вот не работает морфология! на 4.7 работает, а тут нет :(
- Для комментирования войдите или зарегистрируйтесь
Елы-палы. Надо понять почему так... а то как не заработает в самый не подходящий момент и краднец!
Так... перехожу в режим "адвансед ламер" :)
Вот нюанс один заметил, не по уставу как говоится.
Я для "красоты" распаковал модуль не так, как сказано в инструкции, а в каталог `rustemmer` и в него всё содержимое архива.
Для понимания критериев работы поиска прошу:
1. Само содержимое дабы создать его фактически
2. Поисковые слова
Можно в личку.
Если уж ничего не поможет чесн слово, на принцип пойду — осталю новый друпал с нуля и заставлю работать поиск... может из-за модуля какого не пашет...
Думаю это не лишним будет:
Drupal 5.1
MySQL database 4.1.14
PHP 5.0.5
Web server Apache/1.3.29 (Win32) PHP/5.0.5
- Для комментирования войдите или зарегистрируйтесь
базовый модуль поиска.
создал статью с текстом "проверка работы поиска и модуля морфологического поиска на русском языке"
переиндексировал из настроек поиска и запустил крон.
задал поиск слова "проверка". поиск нашёл статью.
закидываю папку из архива rustemmer в директорию modules.
включаю модуль, переиндексирую сайт, запускаю крон.
поиск по слову "проверка" дал те же результаты, что естественно.
поиск по слову "провер" результатов не даёт. хоть об стенку бейся...
У меня 5 только что поставленный Друпал, никаких модулей кроме базовых нет. что делать - не знаю...
- Для комментирования войдите или зарегистрируйтесь
Ха! Даже не знаю радоваться или печалиться.
Создал контент "проверка работы поиска и модуля морфологического поиска на русском языке" с заголовком "проверка работы поиска", переиндексировал, запуситл cron.php и:
1. "проверка" - "проверка"
2. "провер" - X (провер - посути дела это подстрока, но не словоформа... то есть для данного поиска это прогое слово! провер, провера, проверу, провером и.д. :))
3. "проверкой" - находит статью но не подсвечивает!
4. "проверке" - находит статью но не подсвечивает!
5. "проверку" - находит статью но не подсвечивает!
Попробуйте эти словоформы!
Поциент скорее жив, чем мёртв!
Ну что могу сказать? С одной стороны не всё так плохо, но и не радужно: данный поиск ищет слова целиком.
ЗЫ:
Точно прославится человек, который напишет:
- морфологический - учёт словоформ
- размытий (fuzzy) - для компенсации ошибок в слове
- контекстный
- регистронезависимый
- с возможностью уточнения
поиск...
- Для комментирования войдите или зарегистрируйтесь
> Точно прославится человек, который напишет: ...
И тогда это будет YandexSiteSearch (или Гугль). :)
Я ставлю строчку "php_value error_reporting 7" в файл .htaccess, а вы? :)
Полный русский перевод Drupal 5.x и еще некоторых модулей.
- Для комментирования войдите или зарегистрируйтесь
в общем, возникает вопрос как сделать на сайте человеческий поиск. не обязательно этим модулем, но поиск нормальный нужен...
- Для комментирования войдите или зарегистрируйтесь
Ну а каковы критерии нормального поиска? Я пока ничем не смогу помочь — любопытно просто. Этот меня весьма и весьма устраивает...
- Для комментирования войдите или зарегистрируйтесь
итак, маразм с друпаловским поиском крепчает на глазах!
Здесь, на drupal.ru, даём запрос по слову "подменю". Получаем 2 страницы результатов, в том числе находится одно слово "подменюшек".
Даём запрос "подмен" - казалось бы, должны были быть получены те же результаты. ага, щаззз! Ничего не найдено!
Даём запрос "подменюш" - должна же найтись та статья со словом "подменюшек"! Но ничего не находится!
Или я дурак, или хз что... Люди, объясните!
- Для комментирования войдите или зарегистрируйтесь
я поправил предыдущий комментарий, чтобы теги strong отображались
- Для комментирования войдите или зарегистрируйтесь
нужная вестчь!!!
- Для комментирования войдите или зарегистрируйтесь
В этом коде
$key = $stemmer->stem_word($key);
у меня #stemmer === NULL И подсветка идет лесом. Модуль включен, всё переиндексировано.
Не сразу заметил что надо
$stemmer = new RussianStemmer(); $key = $stemmer->stem_word($key);
Выбирает теперь правильное место в тексте, но в Strong не заелючает. Кроме того при отключении модуля "выносит" при попытке создать класс.
- Для комментирования войдите или зарегистрируйтесь
Если первый кусок кода сделсать таким
if (class_exists('RussianStemmer')){ $stemmer = new RussianStemmer(); $key = $stemmer->stem_word($key); $keys[$k] = $key;//aka:new }; if (preg_match('/'. $boundary . '[' . WORD_CHARACTER . ']*' . $key . '[' . WORD_CHARACTER . ']*' . $boundary .'/iu', $text, $match, PREG_OFFSET_CAPTURE, $included[$key])) { //if (preg_match('/'. $boundary . $key . $boundary .'/iu', $text, $match, PREG_OFFSET_CAPTURE, $included[$key])) {
то сайт переживет отключение модуля. Но вот почемувырубается подсветка - непонятно.
UPD
Второй кусок следует читать
// Highlight keywords. Must be done at once to prevent conflicts ('strong' and '<strong>'). $text = preg_replace('/'. $boundary . '[' . WORD_CHARACTER . ']*' .'('. implode('|', $keys) .')'. '[' . WORD_CHARACTER . ']*' . $boundary .'/iu', '<strong>\0</strong>', $text); //$text = preg_replace('/'. $boundary .'('. implode('|', $keys) .')'. $boundary .'/iu', '<strong>\0</strong>', $text); return $text;
Это стоило мне часа времени.
- Для комментирования войдите или зарегистрируйтесь
Есть система лингвистического поиска для Русского языка под лицензией LGPL под Linux.
http://www.aot.ru/download.php
Может кто-нибуть сможет адаптировать для Drupal?
- Для комментирования войдите или зарегистрируйтесь
Специально для тех, кто дружит с патчами, патч для версии 5.7 последнего кода в атаче.
автору архива: можете включить патч в архив, и написать в install.txt для чего он нужен. Знающим людям это очень упростит жизнь
- Для комментирования войдите или зарегистрируйтесь
neochief, спасибо большое!
патч снимает все вопросы для версии 5.7
автору модуля также большой респект. работает отлично!
- Для комментирования войдите или зарегистрируйтесь
спасибо! то что надо
- Для комментирования войдите или зарегистрируйтесь
а где собственно сам патч? Что-то не вижу никаких аттачей - видимо из-за нового дизайна?
- Для комментирования войдите или зарегистрируйтесь
Недавно сам сюда возвращался и не нашел его. Приготовил новый, но только для шестерки.
- Для комментирования войдите или зарегистрируйтесь
Thnx вам огромное! Сам модуль, правда, только для 5 версии есть. Или я ошибаюсь?
- Для комментирования войдите или зарегистрируйтесь
У меня все есть для шестерки. Уж не помню сам ли сделал, иль где взял.
- Для комментирования войдите или зарегистрируйтесь
Ух ты! Спасибо Вам большое!
- Для комментирования войдите или зарегистрируйтесь
ВахЪ, спасибо, уважаемый!
- Для комментирования войдите или зарегистрируйтесь
Не работает для 5-й версии, там не хватает файлов. Есть полный модуль, который можно подключить?
- Для комментирования войдите или зарегистрируйтесь
ребят, что-то аттачей для 5й версии друпала не вижу, уже удалили? у кого осталось - поделитесь.
- Для комментирования войдите или зарегистрируйтесь
Прикрепил пропатченный модуль для 5-ки.
- Для комментирования войдите или зарегистрируйтесь











Комментарии