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

Кстати, спасибо! Вы меня натолкнули на мысль, что нужно индексировать не только лемму (или псевдокорень), но и слово целиком, тогда в результатах поиска по слову "красивая" сначала будут идти те записи, где это слово встречается именно в такой форме, а потом уже "красивый", "красивой", "красивые" и т.п.
Не за что, обращайтесь)
А про дополнение словаря - где-то в этой ветке, если не ошибаюсь, что такая возможность существует, но, к сожалению, только для АОТ-словаря... Да и как утверждает разработчик лемматайзера - АОТовский словарь более полный, нежели испеловский, поэтому и рекомендуется использовать в качестве основного именно АОТ.
Хотя мне самому больше нравится испел, и к аот прибегаю только в крайних случаях, если вижу, что для конкретной задачи он работает корректнее.
 
здравствуйте!
возможно, я полный нуб, но у меня проблема.
скачал phpmorphy-0.3.7, morphy-0.3.x-ru_RU-withjo-ispell-utf-8
написал:
Код:
error_reporting(E_ALL | E_STRICT);
require_once('./tm2/src/common.php');
$dir = './tm2/dicts';
$lang = 'ru_RU';
$opts = array(
	'storage' => PHPMORPHY_STORAGE_FILE,
	// Extend graminfo for getAllFormsWithGramInfo method call
	'with_gramtab' => true,
	// Enable prediction by suffix
	'predict_by_suffix' => true, 
	// Enable prediction by prefix
	'predict_by_db' => true
        //'graminfo_as_text' => false,
        //'resolve_ancode' => phpMorphy::RESOLVE_ANCODES_AS_INT
);
try {
    $morphy = new phpMorphy($dir, $lang, $opts);
} catch(phpMorphy_Exception $e) {
    die('Error occured while creating phpMorphy instance: ' . $e->getMessage());
}

try {

$word_one = 'ТЕСТ';
$part_of_speech=$morphy->getPartOfSpeech($word_one);
echo $part_of_speech[0];
И получаю вместо "С" - "UNKNOWN".
Посмотрел файлы gramtab.ru_ru.bin и gramtab_txt.ru_ru.bin - там действительно UNKNOWN, и они значительно меньше и отличаются от файлов словаря АОТ.
Однако если заменить на АОТ, полетит всё, глаголы будут существительными и т.д. (естесственно, карта другая, словарь другой и т.д.)

В чём может быть проблема и как добиться определения части речи и другой грамматической информации?
 
spooky, читайте внимательно документацию
Метод $morphy->getPartOfSpeech($word_one) работает только со словарем АОТ, в словаре ISPELL не содержится сведений о части речи слова, а Вы используете как раз словарь от ISPELL
Скачайте словарь АОТ, с ним все работает нормально, конечно за очень редким исключением (сам сталкивался, но это реально единичные случаи, на которые можно закрыть глаза).
 
Спасибо!
Но т.к. хостинг не позволяет закачивать файлы больше 4 мб, мне надо или искать другой хостинг, или другой скрипт, который определяет части речи.
 
10 января разработчики проекта АОТ выпустили новую версию своего лемматайзера.
http://aot.ru/download.php
Вопрос к разработчику PHPMorphy: возможно ли обновить словари для PHPMorphy, доступные на SF, ибо, как понимаю, АОТ в них тоже внес некоторые изменения?
 
Получается, АОТ выпустили новую версию только оболочки... жаль(
 
Сори за нубовский вопрос, надо получить из слова к примеру "Москва" -> в "Москве" (Предложный падеж)
$morphy->getAllForms(); - выводит всё вподряд, как опредеённый падеж получить?

Нужен нубомануал)
 
Попробуй так
PHP:
$word = 'МОСКВА';
$paradigms = $morphy->findWord($word);

if(false !== $paradigms) {
    // омонимы
    foreach($paradigms as $paradigm) {
        $word_forms = $paradigm->getWordFormsByGrammems('ПР');
        
        // некоторые слова имеют несколько форм для одного падежа
        foreach($word_forms as $form) {
            $word = $form->getWord();
            var_dump($word);
        }
    }
}
 
Кто нибудь ПОДРОБНО расскажет как самому собрать словари из ispell-овских?
 
Vladzimir

Ок, рассказываю подробно.
1) Вам понадобятся словари в myspell (hunspell тоже подходят) формате. Скачать их можно отсюда http://wiki.services.openoffice.org/wiki/Dictionaries, брать нужно Spelling словари.
2) Скачиваем http://sourceforge.net/projects/php...dsystem/0.3.x/morphy-0.3.1-win32.zip/download и распаковываем в c:/phpmorphy-bs/
3) Скачиваем саму либу (http://sourceforge.net/projects/phpmorphy/files/phpmorphy/0.3.7/phpmorphy-0.3.7.zip/download) и распаковываем в c:/phpmorphy-bs/lib
4) Создаем переменную окружения MORPHY_DIR=c:/phpmorphy-bs
5) Создаем переменную окружения PHPRC=путь_где_лежит_пхп, т.е. команда %PHPRC%/php -v должна отработать
5) Скачиваем нужные словари (см п.1) и распаковываем их в c:/tmp/hunspell-dicts, нам понадобятся два файла с расширением .dic и .aff, пусть это будут ru_RU_yo.aff и ru_RU_yo.dic
6) cd c:/tmp/hunspell-dicts
7) Конвертим hunspell словари в xml формат: c:/phpmorphy-bs/bin/hun2xml.exe --affix ru_RU_yo.aff --dict ru_RU_yo.dic --locale ru_RU --xml=ru_RU.xml --verbose. Если все прошло нормально получим файл ru_RU.xml
8) mkdir out
9) Компилируем бинарный словарь из ru_RU.xml: c:/phpmorphy-bs/lib/bin/build_dict ru_RU.xml out utf-8 1 1
10) Если п.9 выполнился без ошибок, в каталоге c:/tmp/hunspell-dicts/out будет лежать готовый словарь.
 
4) Создаем переменную окружения MORPHY_DIR=c:/phpmorphy-bs
5) Создаем переменную окружения PHPRC=путь_где_лежит_пхп, т.е. команда %PHPRC%/php -v должна отработать
А вот с этого момента можно поподробнее. Где создаем и как.
 
Проще всего сделать так:
1) запускаем cmd.exe: Win+r => cmd => enter
2) set MORPHY_DIR=c:/phpmorphy-bs
3) set PHPRC=путь_где_лежит_пхп
4) проверяем set MORPHY_DIR => "MORPHY_DIR=c:/phpmorphy-bs"
5) %phprc%/php -v

п.2+п.3 можно оформить в виде .cmd файла
 
Жигaн
Добрый день!

Берем слово, например, "флешка".
phpMorphy нашел для этого слова одну парадигму, в мужском роде.
Сервис от aot.ru нашел две парадигмы, и одна из них в женском роде, как и ожидается.

В чем тут проблема ?
Заранее спасибо!
 
Farsh
Проблемы здесь нет. Алгоритм построения гипотез для неизвестных слов основан на стат. данных. В зависимости от настроек, результат может немного изменяться.
 
Жигaн
насколько я понимаю, статистические данные заложены в словари (в том числе), словари мы используем одинаковые с АОТ (вчера сам скомпилировал последнюю версию словаря из транка), какие насторойки нужно покрутить, чтобы слово "ФЛЕШКА" стало словом женского рода именительного падежа?
 
vasyap
Извини, сейчас времени совсем нет.
Конкретно с "флешкой" проблема в том, что алгоритм построения словаря для предсказания, в некоторых случаях имеет неопределенное поведение (результат зависит от порядка обхода лемм в словаре). В силу использования разных струкур данных у меня и в коде аот, результат отличается. Мой вариант предсказывает слово "флешка" по "алешка", у аот по "плешка", хотя это простое везение. В целом, проще добавить слово в словарь с помощью MorphWizard, затем с помощью phpmorphy/bin/mrd2xml.php сконвертить mrd файл в xml и скомпилить из xml бинарный словарь. Я несколько страниц назад вроде писал уже как эот сделать.
 
Оставлю рецепт в том числе для себя, чтобы не забыть.
Чтобы запустить morphwizard ( http://aot.ru/download.php ) под убунтой, делаем следующее:
$ sudo localedef -c -i ru_RU -f UTF-8 ru_RU.UTF-8
$ LANG=ru_RU.utf8 wine Morphwizard.exe

Вроде ищет теперь нормально, но в реальной работе еще не проверял. Надеюсь, что получится потом добавленную инфу использовать в pymorphy без особых приседаний благодаря http://packages.python.org/pymorphy/ref/storage_backends.html#mrd .

Жиган, и я правильно понимаю, что mrd2xml.php и "скомпилить из xml бинарный словарь" - будут работать только под виндой?
 
  • Like
Реакции: AmdY
Сверху