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

Оставлю рецепт в том числе для себя, чтобы не забыть.
Жиган, и я правильно понимаю, что 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
 
а можно как нить получить исходники morphy_builder.exe и прочих утил которые в *.exe ???
и планируется ли развитие проекта дальше ?
 
mcdir
1) Я занимаюсь портированием на жаву всей инфраструктуры, если есть желание помочь, могу выложить на гитхаб исходники.
2) Существующие утилиты выкладывать не буду, т.к. нет цели развивать их дальше см п.1
 
ну жаву жуТко не люблю ((
пых питон перл .. с...с++
но не жава - уж слишком у нее много всего разного и все меняется так быстро что этим просто нужно жить
так что если вдруг технология поменяется - я б поучаствовал )))
 
Добрый день!

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

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

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

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

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

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

Если можно, в двух словах какой документ куда подключить, чтоб в выдаче уже был обработанный текст?
 
Странно. Перешел по ссылке с сайта посвященному PHP, где говорилось что такая возможность есть.
 
при вызове getBaseForm(array) и других ф-ций тоже, если в исходом массиве слов есть дублирующиеся слова, то лемма выведется только один раз для дублирующихся слов, т.е.:
PHP:
getBaseForm (array('ФОРМА', 'ФОРМЫ'))
выдает
PHP:
Array
(
    [ФОРМЫ] => Array
        (
            [0] => ФОРМА
        )
    [ФОРМА] => Array
        (
            [0] => ФОРМА
        )
)
Но, если исходные слова в одинаковой форме
PHP:
getBaseForm (array('ФОРМА', 'ФОРМА'))
то получим
PHP:
Array
(
    [ФОРМА] => Array
        (
            [0] => ФОРМА
        )
)

Вопрос как раз в том как избежать этого "сливания" и получить столько элементов массива, сколько есть исходных слов, даже если они дублируются. Т.е. для ситуации №2 получить результат аналогичный №1.
Судя по всему происходит это в ф-ции buildPatriciaTrie() в файле morphiers.php, но пока не разберусь как его править.

З.Ы. или как-то по другому вести учет сколько раз встретилось это слово
 
Уже смотрел в сторону этой функции, но применить ее нигде не удалось, дело в том что все переданные в массиве слова хитрым образом разбиваются на части в функции, которую я указал выше. Начало этой функции устроено следующим образом: сортировка массива переданных слов функцией sort(), а после этого условие - если предыдущее слово == текущему тогда continue, т.е. итерация пропускается, ну и дальше запутанная как по мне разбивка слов на части и потом не менее хитрое их объединение. Однако я пробовал и отменять/изменять сортировку и не пропускать итерации... тут надо глубже копать. Извините, не привожу куски кода, пишу с телефона, но надеюсь суть ясна, просто посмотрите файл и функцию которую я указал в предыдущем посте
 
Ок, если я правильно понял, то попробуй сделать так:
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;
}
 
Жигaн
Спасибо огромное, я так глубоко полез, а решение как всегда на поверхности.
Я и не догадался, что элементы массива просто сливались поскольку имели одинаковые ключ => значение.
Нумерованный массив запросто решил проблему. Еще раз спасибо, очень выручили.
 
Не правильно работает
PHP:
$morphy->lemmatize('ПОИСКА')

Результат
PHP:
Array
(
    [0] => ПОИСКА
)

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