Русская морфология

Жигaн

Новичок
Оставлю рецепт в том числе для себя, чтобы не забыть.
Жиган, и я правильно понимаю, что mrd2xml.php и "скомпилить из xml бинарный словарь" - будут работать только под виндой?
Я запускал под вайном, нормально работает. Но нужно в bin\build_dict.php исправить
define('MORPHY_BUILDER', MORPHY_DIR . 'bin/morphy_builder');
на
define('MORPHY_BUILDER', MORPHY_DIR . 'bin/morphy_builder.exe');
, поставить что-то типа vc6redist(я не помню как называется) через winetricks (иначе будет орать на stl ные импорты) и сделать chmod u+x $MORPHY_DIR/bin/morphy_builder.exe
 

mcdir

Новичок
а можно как нить получить исходники morphy_builder.exe и прочих утил которые в *.exe ???
и планируется ли развитие проекта дальше ?
 

Жигaн

Новичок
mcdir
1) Я занимаюсь портированием на жаву всей инфраструктуры, если есть желание помочь, могу выложить на гитхаб исходники.
2) Существующие утилиты выкладывать не буду, т.к. нет цели развивать их дальше см п.1
 

mcdir

Новичок
ну жаву жуТко не люблю ((
пых питон перл .. с...с++
но не жава - уж слишком у нее много всего разного и все меняется так быстро что этим просто нужно жить
так что если вдруг технология поменяется - я б поучаствовал )))
 

Andrey_23

Новичок
Добрый день!

Подскажите, пожалуйста, я вот разбираюсь в phpMorphy и для проэкта, мне неоходимо, пока только одна из всех его функций castFormByPattern, а в чём сама проблема: в оригинальной сборке все сообщения выводятся на экран, мне же необходимо чтобы они помещались в отдельные переменные, то есть, чтобы по выполнению этого метода я получил в ответ некий массив либо текст, но не как не готовое сообщение на экран. Подскажите в каком файле формируется этот выход.

Заранее спасибо.
 

upsgaz

Новичок
Здрасти всем!
Сколько перечитал, так и не получилось настроить работу поиска php MySQL с помощью морф. словаря!
И мне кажется многие парятся как и я в этом вопросе.

На сайтах много статей на эту тему, но увы, я лично не допёр!

Отсюда следует: Нужен поиск с помощью словря phpMorphy.
Т.е. база и скрипт уже заточенный под неё, в рабочем состоянии. (для чайников)
Кому не жалко , скиньте на форум в общий доступ! Я думаю многие будут благодарны...
 

upsgaz

Новичок
честно говоря не читал про него, но если на php MySQL utf-8 работает . то можно и его . Желательно полностью. Никак поиск не одалею. Получается только полнотекстовой(

P.S. пока гуглил. ооопа, кто-то ответил...прикольно...быстро. Вот что значит ТиЦ 700)))
 

vornold

Новичок
Здравствуйте.
Читал мануал качал и устанавливал скрипт со словорями, но не разобрался как его запустить?

У меня есть скрипт который генерирует текст.
Что мне нужно: подключить эту библиотеку к моему скрипту и заменить схожие слова в сгенерированном тексте.

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

vornold

Новичок
Странно. Перешел по ссылке с сайта посвященному PHP, где говорилось что такая возможность есть.
 

elastic

Новичок
при вызове getBaseForm(array) и других ф-ций тоже, если в исходом массиве слов есть дублирующиеся слова, то лемма выведется только один раз для дублирующихся слов, т.е.:
PHP:
getBaseForm (array('ФОРМА', 'ФОРМЫ'))
выдает
PHP:
Array
(
    [ФОРМЫ] => Array
        (
            [0] => ФОРМА
        )
    [ФОРМА] => Array
        (
            [0] => ФОРМА
        )
)
Но, если исходные слова в одинаковой форме
PHP:
getBaseForm (array('ФОРМА', 'ФОРМА'))
то получим
PHP:
Array
(
    [ФОРМА] => Array
        (
            [0] => ФОРМА
        )
)
Вопрос как раз в том как избежать этого "сливания" и получить столько элементов массива, сколько есть исходных слов, даже если они дублируются. Т.е. для ситуации №2 получить результат аналогичный №1.
Судя по всему происходит это в ф-ции buildPatriciaTrie() в файле morphiers.php, но пока не разберусь как его править.

З.Ы. или как-то по другому вести учет сколько раз встретилось это слово
 

elastic

Новичок
Уже смотрел в сторону этой функции, но применить ее нигде не удалось, дело в том что все переданные в массиве слова хитрым образом разбиваются на части в функции, которую я указал выше. Начало этой функции устроено следующим образом: сортировка массива переданных слов функцией sort(), а после этого условие - если предыдущее слово == текущему тогда continue, т.е. итерация пропускается, ну и дальше запутанная как по мне разбивка слов на части и потом не менее хитрое их объединение. Однако я пробовал и отменять/изменять сортировку и не пропускать итерации... тут надо глубже копать. Извините, не привожу куски кода, пишу с телефона, но надеюсь суть ясна, просто посмотрите файл и функцию которую я указал в предыдущем посте
 

Жигaн

Новичок
Ок, если я правильно понял, то попробуй сделать так:
PHP:
function lemmatize_array(array $ary, phpMorphy $morphy) {
  if(false === ($lemmas = $morphy->lemmatize($ary))) {
      return fasle;
  }
  
  $result = array();
  foreach($ary as $word) {
     $result[] = $lemmas[$word];
  }

  return $result;
}
 

elastic

Новичок
Жигaн
Спасибо огромное, я так глубоко полез, а решение как всегда на поверхности.
Я и не догадался, что элементы массива просто сливались поскольку имели одинаковые ключ => значение.
Нумерованный массив запросто решил проблему. Еще раз спасибо, очень выручили.
 

bumbay

Новичок
Не правильно работает
PHP:
$morphy->lemmatize('ПОИСКА')
Результат
PHP:
Array
(
    [0] => ПОИСКА
)
Менял кодировки как мог, результат тот же. И другие функции также работают.
 

Magic15

Новичок
С русским языком работает без проблем. Но вот кто-то пробовал работать с украинскими словарями?? У меня функция $morphy->getBaseForm возвращает через раз верную форму. Для примера:ДІЯЛЬНОСТІ-> ДІЯЛЬНІСТЬ, ЗОБРАЖЕННЯ -> ЗОБРАЖЕННІ, НАПРЯМКІВ-> НАПРЯМКІВ, КАРТАХ-> КАРТ . Буду очень признателен, если кто-то попробует у себя подключить Украинский spell словарь и проверит возврат базовых форм...
 
Сверху