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

Жигaн

Новичок
заметил баг: слово РОЛЬСТАВНИ выделяется корень ставн,
а такие слова как ЕВРОРЕМОНТ, ЕВРОБРУС, ЕВРООКНА и т.д. вообще отбрасывает приставку ЕВРО, что тоже неверно
хм, у меня не подтверждается

PHP:
$text = 'ЕВРОРЕМОНТ ЕВРОБРУС ЕВРООКНА';
$words = array_map('strtoupper', explode(' ', $text));
$result = $morphy->getPseudoRoot($words);

print_r($result);
резалт:
Код:
Array
(
    [ЕВРОРЕМОНТ] => Array
        (
            [0] => ЕВРОРЕМОНТ
        )

    [ЕВРООКНА] => Array
        (
            [0] => ЕВРООКН
        )

    [ЕВРОБРУС] => Array
        (
            [0] => ЕВРОБРУС
        )

)
еще вопрос, возможно ли получать из слова СТЕКЛО - СТЕКЛ, а не СТ?
http://phpmorphy.sourceforge.net/dokuwiki/demo?word=%D1%81%D1%82%D0%B5%D0%BA%D0%BB%D0%BE

основа СТ, вроде всё правильно.
 

sistem32

Новичок
да, видать мне поступила ложная информация)
но с "Еврорубероид" и "Рольставни" действительно что-то не то, берет Рубероид и Ставн..

-~{}~ 20.04.10 09:57:

хотя тут пишет правильно http://phpmorphy.sourceforge.net/dokuwiki/demo?word=%D0%95%D0%B2%D1%80%D0%BE%D1%80%D1%83%D0%B1%D0%B5%D1%80%D0%BE%D0%B8%D0%B4
как это возможо?

-~{}~ 20.04.10 10:34:

Профнастил - настил
 

Жигaн

Новичок
может версия старая? Плюс посмотри в конфиге опцию

'predict_by_suffix' => true,

она как-раз для слов образованных с помощью префикса.
 

sistem32

Новичок
в CHANGES сверху phpMorphy 0.2.3.1
'predict_by_suffix' => true включил, было false.
Профнастил теперь ищет:) с еврорубероидом и рольставнями все так же.
Мне дополнительно собирать собственную коллекцию неправильно обрабатываемых у меня слов и проверять их перед попыткой получить корень, или есть возможность что-либо изменить в самом скрипте?

еще вопрос, что происходит когда вбиваешь слова например так:
крипичцемент, песокбетон и т.д.
он просто берет второе слово? потому как в случае с еврорубероидом и рольставнями он думает, что написнно 2 разных слова без пробела?

p.s. надеюсь я не очень достал вопросами, просто очень хотелось бы использовать этот скрипт на своем сайте =)
 

Жигaн

Новичок
А почему не хочешь последнюю версию взяьт?

https://sourceforge.net/projects/phpmorphy/files/phpmorphy/0.3.7/phpmorphy-0.3.7.zip/download

еще вопрос, что происходит когда вбиваешь слова например так:
крипичцемент, песокбетон
алгоритм простой:
откидываем по одному символу слева от слова и ищем в словаре. Если не нашли, откидываем следующий символ и т.д.

Код:
евротоль - не нашли
вротоль - не нашли
ротоль - не нашли
отоль - не нашли
толь - НАШЛИ
 

sistem32

Новичок
обновился! многие нужные мне слова стал искать правильнее!! спасибо!! если будут вопросы я еще напишу))
 

Жигaн

Новичок
Wicked

Словари на ispell основе:
В windows-1251:
https://sourceforge.net/projects/phpmorphy/files/phpmorphy-dictionaries/0.3.x/ru_RU/ispell-based/morphy-0.3.x-ru_RU-ispell-windows-1251.zip/download

В utf-8:
https://sourceforge.net/projects/phpmorphy/files/phpmorphy-dictionaries/0.3.x/ru_RU/ispell-based/morphy-0.3.x-ru_RU-ispell-utf-8.zip/download


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

Wicked

Новичок
за словарик спасибо, покрытие с двумя словарями стало немного более полным и точным

PS: я в топикстарте обновил ссылочки
 

Жигaн

Новичок
Я дико извиняюсь, но я залил кривой ispell словарь.
Вот ссылки на нормальный:

windows-1251:
https://sourceforge.net/projects/phpmorphy/files/phpmorphy-dictionaries/0.3.x/ru_RU/ispell-based/morphy-0.3.x-ru_RU-withjo-ispell-windows-1251.zip/download

utf-8:
https://sourceforge.net/projects/phpmorphy/files/phpmorphy-dictionaries/0.3.x/ru_RU/ispell-based/morphy-0.3.x-ru_RU-withjo-ispell-utf-8.zip/download

-~{}~ 04.05.10 17:34:

C Абелевым проблема в предсказании по суффиксу т.е.
Абелев = А + белев т.е. Абелев => Абелеть.

Если выключить predict_by_suffix то получается всё нормально:
http://phpmorphy.sourceforge.net/dokuwiki/demo?word=абелев&dict_type=aot&enable_predict_by_db=1

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

-~{}~ 04.05.10 17:35:

PS: я в топикстарте обновил ссылочки
Спасибо, так намного удобнее.
 

restarter

Новичок
Здравствуйте! :)
У меня трабла небольшая. Подскажите что делаю нетак!

Есть код:
PHP:
$morphy->getDefaultGrammemsProvider()->excludeGroups('С', 'род');
$filename=$_SERVER['DOCUMENT_ROOT']."/base/speech/С.txt";
$lines = file($filename) ; 
$www=$lines[array_rand($lines)]; //Вытягиваем в переменную $www случайную строку из файла!
//$word - определена до этого

$new=$morphy->castFormByPattern($www, $word, null, true);
var_dump($www); echo" - \$www<br>";
var_dump($word); echo" - \$word<br>";
var_dump($new); echo" - \$new<br>";
Результат:
string(12) "БЕЗДЕЛЬНИК " - $www
string(8) "БЕРЕГАМИ" - $word
bool(false) - $new


В чем проблема? Всегда bool(false)!!!
Пробовал кодировать $www в windows-1251 скачаным с нета классом - ничего. (словарь, соответственно тоже в windows-1251)
Также если поменять ручками $www="СЛОВО", то все работает!
 

bozman

Новичок
Привет.
Есть небольшая неточность
слово СТАРОЕ, СТАРОМУ определяется как существительное
хотя слова СТАРЫЙ, СТАРАЯ определяются как прилагательное
 

Tduty1972

Новичок
А вот еще момент.
Есть интересное слово: пылесосить
Пытаюсь вывести все варианты и обнаруживаю, что getAllFormsWithAncodes не выводит форму. которая бы соответствовала форме 1-го лица, единственного числа, настоящего времени, а именно: пылесошу.
Посмотрел аналогичные слова, весить - вешу (выводит), косить - кошу (выводит).
А вот пылесосить - не выводит. В словаре нет такого слова? или в чем проблема?
 

Жигaн

Новичок
Да, это неточность словаря. В принципе, парадигма для пылесосить не содержит формы 1-го лица единственного числа, но для других лексем такие формы есть (победить - побежу. Надо, наверное, добавить побежду и победю, для полноты). Я исправлю это в следующей версии словаря.
 

Wicked

Новичок
http://ru.wiktionary.org/wiki/пылесосить
http://ru.wiktionary.org/wiki/победить
не очень авторитетный источник, но все же

ЗЫ: что если сделать словарь на основе парсинга wiktionary? :)

-~{}~ 15.06.10 10:57:

Жигaн
а где-нибудь есть инструкция, как к можно самому добавлять слова в словарь phpmorphy и перебилдать его?

-~{}~ 15.06.10 11:14:

похоже, нету :)
http://phpmorphy.sourceforge.net/dokuwiki/manual-build-system

-~{}~ 15.06.10 13:03:

так... скачал morphy-0.3.1-win32.zip и morphy-source-ru_RU.zip, распаковал, запустил
Код:
morphy_builder.exe --xml ru_RU.xml --out-dir 1 --out-encoding utf-8
получил на выходе файлы common_aut.ru_ru.bin, morph_data.ru_ru.bin, options.ru_ru.ini, predict_aut.ru_ru.bin [1], которые совпадают по размерам с файлами из morphy-0.3.x-ru_RU-withjo-utf-8.zip

осталась пара вопросов:
1) в этом архиве есть еще пять файлов, которые не сгенерились. Я так понимаю, 4 из них относятся к грамтабам и анкодам, а один просто кэш. Если буду в XML-файле менять только леммы (но не анкоды и грамтабы), подойдут ли эти 5 файлов к четырем перегенеренным ([1]) файлам?
2) я хочу добавить новое слово в словарь. Достаточно ли прописать нужную лемму с flexia_id и ancode_id в xml и перегенерить? Как легче всего правильно узнать эти айдишники? На ум приходит только поиск аналогичного слова.
3) как делаются nojo-словари? можно ли сделать словарь, который будет одновременно содержать jo- и nojo-версии слов, которые изначально содержали букву ё?
4) принимаешь ли ты патчи? если дойдут руки пополнить словарь, в каком виде их тебе присылать?
5) есть ли готовый скрипт, чтобы из mysql получить xml? при добавлении новых слов не хотелось бы ковыряться в xml-ке...
 

Жигaн

Новичок
Wicked
так... скачал morphy-0.3.1-win32.zip и morphy-source-ru_RU.zip, распаковал, запустил
code:
morphy_builder.exe --xml ru_RU.xml --out-dir 1 --out-encoding utf-8

получил на выходе файлы common_aut.ru_ru.bin, morph_data.ru_ru.bin, options.ru_ru.ini, predict_aut.ru_ru.bin [1], которые совпадают по размерам с файлами из morphy-0.3.x-ru_RU-withjo-utf-8.zip
Не, надо сделать так:
1) Распаковать morphy-0.3.1-win32.zip куда-нибудь.
2) Установить переменные окружения
-- PHPRC - путь к директории php
-- MORPHY_DIR - путь к директории куда распаковали morphy-0.3.1-win32.zip из п1.
3) распаковать архив с бибилотекой в какой-нибудь каталог (пусть будет c:\morphy).
4) запустить c:\morphy\bin\build_dict.bat XML_FILE OUT_DIR ENCODING

просто morphy_builder.exe обвязку для php не генерит.

2) я хочу добавить новое слово в словарь. Достаточно ли прописать нужную лемму с flexia_id и ancode_id в xml и перегенерить? Как легче всего правильно узнать эти айдишники? На ум приходит только поиск аналогичного слова.
по-хорошему надо сделать приложение для обновления словаря, но сейчас его нет. Можно использовать MorphWizard аотовский и перегонять словарь в xml файл (с помощью bin\mrd2xml.bat). Это будет проще всего, имхо. Кстати, для нормальной работы mrd2xml потребуется установить переменную окружения RML. Она должна содержать путь до каталога куда распаковали аотовские словари (к примеру, файл rgramtab.tab должен быть доступен через %RML%\Dicts\Morph\rgramtab.tab). На неделе попробую прирутить поддержку пользовательских словарей, чтобы с MorphWizard не заморачиваться.

как делаются nojo-словари? можно ли сделать словарь, который будет одновременно содержать jo- и nojo-версии слов, которые изначально содержали букву ё?
делаются очень просто. file_put_contents('file.xml', str_replace('Ё', 'Е', file_get_contents('file.xml'))) ;). Сделать смешанный словарь можно, но словарик разжиреет немного. Если тебе надо я могу сделать, это несложно.

4) принимаешь ли ты патчи? если дойдут руки пополнить словарь, в каком виде их тебе присылать?
Конечно, в любом виде. Если будешь делать через MorphWizard присылай .mrd файл и .log желательно.

есть ли готовый скрипт, чтобы из mysql получить xml? при добавлении новых слов не хотелось бы ковыряться в xml-ке
Сейчас нет, надо будет сделать, кстати.

-~{}~ 16.06.10 03:03:

http://ru.wiktionary.org/wiki/пылесосить
http://ru.wiktionary.org/wiki/победить
не очень авторитетный источник, но все же
а фиг его знает, яб не стал использовать "пылесошу", на всякий случай ;).

ЗЫ: что если сделать словарь на основе парсинга wiktionary?
имхо, там мало слов разобранных + неведомая мне лицензия GFDL.
 
Сверху