Русский морфологический поиск для 5 Друпала

Главные вкладки

Аватар пользователя Shelendor Shelendor 6 февраля 2007 в 10:42

Тут была ветка форума, в которой разработали модуль морфологического поиска, вот она http://drupal.ru/node/2449 но это для Друпала 4.7. Как его приделать к 5 версии? А то морфологический поиск актуален как и раньше Smile

Комментарии

Аватар пользователя Shelendor Shelendor 19 февраля 2007 в 17:47

хм. наконец-то поставил его. почему-то не работает Sad в оригинальной теме говорится о замене модуля search на модуль из прилагаемого архива, но это для 4.7.3. Как его применить к 5? может из-за этого у меня не работает?

Аватар пользователя sashka sashka 19 февраля 2007 в 23:32

Даааа... Действительно работает!
greenmother@drupal.org, респект!
Единственное, что добавил бы в твою инструкцию, так это пункт №4: [b]Запустить cron.php[/b], после которого у меня собственно всё и заработало. Smile
По крайней мере на локольном хосте, на винде ... Про никсовый хостинг остаётся только молиться всем богам.

Аватар пользователя Shelendor Shelendor 21 февраля 2007 в 16:51

Люди! Пожалуйста, объясните мне, тупому, как адаптировать модуль поиска под 5 версию!!! Очень нужно!!! А простое включение rustemmer результата не даёт... Sad

Аватар пользователя sashka sashka 23 февраля 2007 в 1:12

Не знаю поможет ли это, но я просто опишу, что сделал я на локольной машине (win32, apache1.3 php5 mysql4 pgsql8).
Для проверки работоспособности поиска я создал новую статью с текстом вашего поста "Люди! Пожалуйста, объясните мне..."
С начала я сделал рабочим обычный поиск, то есть если запрос "люди" он даёт ссылку на нашу статью и _подсвечивает_ слово "люди". Это критерий работоспособности обычного поиска. Далее я ставлю модуль и проделываю следующие шаги - они описаны в руководстве пакета по установке Smile
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. Ищем "тупая" -> ссылка на нашу статью

Вроде бы всё.
Создал еще статью и снова проверил, работает по тому же алгоритму.

Аватар пользователя sashka sashka 23 февраля 2007 в 3:21

Елы-палы. Надо понять почему так... а то как не заработает в самый не подходящий момент и краднец!
Так... перехожу в режим "адвансед ламер" Smile
Вот нюанс один заметил, не по уставу как говоится.
Я для "красоты" распаковал модуль не так, как сказано в инструкции, а в каталог `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

Аватар пользователя Shelendor Shelendor 23 февраля 2007 в 16:35

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

закидываю папку из архива rustemmer в директорию modules.
включаю модуль, переиндексирую сайт, запускаю крон.

поиск по слову "проверка" дал те же результаты, что естественно.
поиск по слову "провер" результатов не даёт. хоть об стенку бейся...

У меня 5 только что поставленный Друпал, никаких модулей кроме базовых нет. что делать - не знаю...

Аватар пользователя sashka sashka 23 февраля 2007 в 17:07

Ха! Даже не знаю радоваться или печалиться.
Создал контент "проверка работы поиска и модуля морфологического поиска на русском языке" с заголовком "проверка работы поиска", переиндексировал, запуситл cron.php и:
1. "проверка" - "проверка"
2. "провер" - X (провер - посути дела это подстрока, но не словоформа... то есть для данного поиска это прогое слово! провер, провера, проверу, провером и.д. Lol
3. "проверкой" - находит статью но не подсвечивает!
4. "проверке" - находит статью но не подсвечивает!
5. "проверку" - находит статью но не подсвечивает!
Попробуйте эти словоформы!
Поциент скорее жив, чем мёртв!
Ну что могу сказать? С одной стороны не всё так плохо, но и не радужно: данный поиск ищет слова целиком.
ЗЫ:
Точно прославится человек, который напишет:
- морфологический - учёт словоформ
- размытий (fuzzy) - для компенсации ошибок в слове
- контекстный
- регистронезависимый
- с возможностью уточнения
поиск...

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 23 февраля 2007 в 17:21

> Точно прославится человек, который напишет: ...
И тогда это будет YandexSiteSearch (или Гугль). Smile


Я ставлю строчку "php_value error_reporting 7" в файл .htaccess, а вы? Smile Полный русский перевод Drupal 5.x и еще некоторых модулей.

Аватар пользователя Shelendor Shelendor 23 февраля 2007 в 18:26

в общем, возникает вопрос как сделать на сайте человеческий поиск. не обязательно этим модулем, но поиск нормальный нужен...

Аватар пользователя sashka sashka 23 февраля 2007 в 18:32

Ну а каковы критерии нормального поиска? Я пока ничем не смогу помочь — любопытно просто. Этот меня весьма и весьма устраивает... 

Аватар пользователя Shelendor Shelendor 26 февраля 2007 в 11:37

итак, маразм с друпаловским поиском крепчает на глазах!

Здесь, на drupal.ru, даём запрос по слову "подменю". Получаем 2 страницы результатов, в том числе находится одно слово "подменюшек".

Даём запрос "подмен" - казалось бы, должны были быть получены те же результаты. ага, щаззз! Ничего не найдено!

Даём запрос "подменюш" - должна же найтись та статья со словом "подменюшек"! Но ничего не находится!

Или я дурак, или хз что... Люди, объясните!

Аватар пользователя comerc comerc (не проверено) 13 апреля 2007 в 19:12

Как сделать выделение жирным шрифтом ключевых слов, правка в 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);

Аватар пользователя СлаваК СлаваК (не проверено) 19 мая 2007 в 16:35

Респект разработчикам русской морфологии для Drupal!
Подключил в Drupal 5.1, установленном на unix хостинге, все заработало с первого раза.
Единственный момент, для выделение жирным шрифтом ключевых слов, перед
$key = $stemmer->stem_word($key);
потребовалось сказать $stemmer = new RussianStemmer();

Аватар пользователя comerc comerc (не проверено) 13 апреля 2007 в 19:19

Дополнение: то, что выделилось жирным (\0) - на самом деле должно быть окружено тегом strong.

Аватар пользователя meettya meettya (не проверено) 20 июня 2007 в 12:14

Всем огромное спасибо за модуль и дополнение форматирования, вещь архиважная для русскоговорящих. Жаль, конечно, что поиск несколько простоват, но все же лучше, чем совсем ничего и тупо по полному соответствию.

Аватар пользователя fasdalf@fasdalf.ru fasdalf@fasdalf.ru 15 января 2008 в 16:31

В этом коде
$key = $stemmer->stem_word($key);
у меня #stemmer === NULL И подсветка идет лесом. Модуль включен, всё переиндексировано.
Не сразу заметил что надо

$stemmer = new RussianStemmer();
$key = $stemmer->stem_word($key);

Выбирает теперь правильное место в тексте, но в Strong не заелючает. Кроме того при отключении модуля "выносит" при попытке создать класс.

Аватар пользователя fasdalf@fasdalf.ru fasdalf@fasdalf.ru 15 января 2008 в 17:41

Если первый кусок кода сделсать таким

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;

Это стоило мне часа времени.

Аватар пользователя neochief neochief 16 апреля 2008 в 15:26

Специально для тех, кто дружит с патчами, патч для версии 5.7 последнего кода в атаче.

автору архива: можете включить патч в архив, и написать в install.txt для чего он нужен. Знающим людям это очень упростит жизнь

Аватар пользователя 1ero 1ero 14 июня 2008 в 17:57

neochief, спасибо большое!
патч снимает все вопросы для версии 5.7

автору модуля также большой респект. работает отлично!

Аватар пользователя jsv jsv 13 января 2009 в 21:46

"<a href="mailto:fasdalf@fasdalf.ru">fasdalf@fasdalf.ru</a>" wrote:

Не работает для 5-й версии, там не хватает файлов. Есть полный модуль, который можно подключить?

Аватар пользователя tishka2 tishka2 12 июня 2013 в 14:06

Может я что-то упустил, но всё же: на данный момент при вводе поисковой фразы "Дру", в результатах нет материалов со словами "Друпал". Кто-то знает как это исправить?