Тут была ветка форума, в которой разработали модуль морфологического поиска, вот она http://drupal.ru/node/2449 но это для Друпала 4.7. Как его приделать к 5 версии? А то морфологический поиск актуален как и раньше
Тут была ветка форума, в которой разработали модуль морфологического поиска, вот она http://drupal.ru/node/2449 но это для Друпала 4.7. Как его приделать к 5 версии? А то морфологический поиск актуален как и раньше
Комментарии
Сделал адаптацию к 5-й версии и перевод (см. аттач)
greenmother@drupal.org - ещё не потестил, но заранее спасибо!
Спасибо! Еще бы "Типографику" адаптировать...
хм. наконец-то поставил его. почему-то не работает в оригинальной теме говорится о замене модуля search на модуль из прилагаемого архива, но это для 4.7.3. Как его применить к 5? может из-за этого у меня не работает?
Даааа... Действительно работает!
greenmother@drupal.org, респект!
Единственное, что добавил бы в твою инструкцию, так это пункт №4: [b]Запустить cron.php[/b], после которого у меня собственно всё и заработало.
По крайней мере на локольном хосте, на винде ... Про никсовый хостинг остаётся только молиться всем богам.
Люди! Пожалуйста, объясните мне, тупому, как адаптировать модуль поиска под 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 (или Гугль).
в общем, возникает вопрос как сделать на сайте человеческий поиск. не обязательно этим модулем, но поиск нормальный нужен...
Ну а каковы критерии нормального поиска? Я пока ничем не смогу помочь — любопытно просто. Этот меня весьма и весьма устраивает...
итак, маразм с друпаловским поиском крепчает на глазах!
Здесь, на drupal.ru, даём запрос по слову "подменю". Получаем 2 страницы результатов, в том числе находится одно слово "подменюшек".
Даём запрос "подмен" - казалось бы, должны были быть получены те же результаты. ага, щаззз! Ничего не найдено!
Даём запрос "подменюш" - должна же найтись та статья со словом "подменюшек"! Но ничего не находится!
Или я дурак, или хз что... Люди, объясните!
Как сделать выделение жирным шрифтом ключевых слов, правка в search.module:
/* new code: line 1143 */
$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])) {
/* new code: line 1201 */
$text = preg_replace('/'. $boundary . '[' . WORD_CHARACTER . ']*' .'('. implode('|', $keys) .')'. '[' . WORD_CHARACTER . ']*' . $boundary .'/iu', '\0', $text);
//$text = preg_replace('/'. $boundary .'('. implode('|', $keys) .')'. $boundary .'/iu', '\0', $text);
Респект разработчикам русской морфологии для Drupal!
Подключил в Drupal 5.1, установленном на unix хостинге, все заработало с первого раза.
Единственный момент, для выделение жирным шрифтом ключевых слов, перед
$key = $stemmer->stem_word($key);
потребовалось сказать $stemmer = new RussianStemmer();
Дополнение: то, что выделилось жирным (\0) - на самом деле должно быть окружено тегом strong.
я поправил предыдущий комментарий, чтобы теги strong отображались
Всем огромное спасибо за модуль и дополнение форматирования, вещь архиважная для русскоговорящих. Жаль, конечно, что поиск несколько простоват, но все же лучше, чем совсем ничего и тупо по полному соответствию.
нужная вестчь!!!
В этом коде
$key = $stemmer->stem_word($key);
у меня #stemmer === NULL И подсветка идет лесом. Модуль включен, всё переиндексировано.
Не сразу заметил что надо
$key = $stemmer->stem_word($key);
Выбирает теперь правильное место в тексте, но в Strong не заелючает. Кроме того при отключении модуля "выносит" при попытке создать класс.
Если первый кусок кода сделсать таким
$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
Второй кусок следует читать
$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 для чего он нужен. Знающим людям это очень упростит жизнь
А для шестёрки пробовал кто либо адаптировать?
Тупым втыканием не работает 8(((
neochief, спасибо большое!
патч снимает все вопросы для версии 5.7
автору модуля также большой респект. работает отлично!
спасибо! то что надо
а где собственно сам патч? Что-то не вижу никаких аттачей - видимо из-за нового дизайна?
Недавно сам сюда возвращался и не нашел его. Приготовил новый, но только для шестерки.
Thnx вам огромное! Сам модуль, правда, только для 5 версии есть. Или я ошибаюсь?
У меня все есть для шестерки. Уж не помню сам ли сделал, иль где взял.
Ух ты! Спасибо Вам большое!
ВахЪ, спасибо, уважаемый!
Не работает для 5-й версии, там не хватает файлов. Есть полный модуль, который можно подключить?
ребят, что-то аттачей для 5й версии друпала не вижу, уже удалили? у кого осталось - поделитесь.
Прикрепил пропатченный модуль для 5-ки.
Официальный проект на D.ORG http://drupal.org/project/rustemmer
будет ли порт на д7?
Может я что-то упустил, но всё же: на данный момент при вводе поисковой фразы "Дру", в результатах нет материалов со словами "Друпал". Кто-то знает как это исправить?