Автор оригинала: Rin
morphy-0.3.x-ru_RU-nojo-utf8.zip 4,606 KB
morphy-0.3.x-ru_RU-nojo-utf8.7z 3,131 KB
Не жадничай!
-~{}~ 08.04.09 03:47:
Изменения в версии 0.3.0:
Поддерживаются кодировки отличные от windows-1251, в частности utf-8 (можно собрать словарь в любой кодировке, поддерживаемой icu)
-------
Изменил код для shared memory: используется один сегмент для всех файлов.
Опции для shm задаются при инициализации:
$opts = array(
:
'shm' => array(
'semaphore_key' => PHPMORPHY_SEMAPHORE_KEY, // id для семафора
'segment_id' => PHPMORPHY_SHM_SEGMENT_ID, // id для сегмента
'segment_size' => PHPMORPHY_SHM_SEGMENT_SIZE, // размер сегмента, по умолчанию 24Mb
'with_mtime' => false, // автоматически перегружать изменившиеся файлы
'header_max_size' => PHPMORPHY_SHM_HEADER_MAX_SIZE, // если ловим exception с 'Too long header ..' надо увеличить значение (по умолчанию 32Kb)
'no_lock' => false, // не использовать блокировку (если true => могут возникнуть проблемы при обновлении словарей)
)
); --- это значения по умолчанию. Можно менять параметры определяя соответствующие константы.
В принципе, кроме segment_size, ничего менять не надо.
-------
Добавил метод getPartOfSpeech, который позволяет получить часть речи для заданного слова (возвращает как обычно массив, из-за омонимии).
-------
Сделал нормальный интерфейс для получения грамматических характеристик. К примеру, получим родительный падеж множественного числа для существительного.
$word = 'ТЕСТ';
if(false === ($collection = $morphy->findWord($word))) {
// error
die("$word not found");
}
$result = array();
foreach($collection->getByPartOfSpeech('С') as $paradigm) {
foreach($paradigm->getWordFormsByGrammems(array('МН', 'РД')) as $form) {
$result[] = $form->getWord();
}
}
var_dump($word, $result);
/*
string(4) "ТЕСТ"
array(2) {
[0]=>
string(6) "ТЕСТОВ"
[1]=>
string(4) "ТЕСТ"
}
*/
-------
Появилась возмонжость контролировать процесс предсказания:
$morphy->getBaseForm('', phpMorphy:: NORMAL); // обычное поведение: поиск в словаре, потом предсказание
$morphy->getBaseForm('', phpMorphy:: IGNORE_PREDICT); // только поиск в словаре
$morphy->getBaseForm('', phpMorphy:: ONLY_PREDICT); // только предсказание
$morphy->isLastPredicted() вернет true если слово было предсказано
-------
Сделал утилиту для конвертации myspell словников в словарь для phpMorphy hun2xml
Опции:
--affix файл аффиксов myspell
--dict словарь myspell
--xml результат
--locale ru_RU, uk_UA и т.п.
на выходе получим xml файл, далее нужно его скомпилировать:
1) качаем последний phpmorphy-buildsystem
https://sourceforge.net/project/showfiles.php?group_id=192189&package_id=266784
2) распаковываем в какую-нибудь директорию, к примеру c:\tmp\phpmorphy
3) устанавливаем переменную окружения MORPHY_DIR в c:\tmp\phpmorphy
4) устанавливаем переменную PHPRC - путь к директории php (%PHPRC%\php должен запускать CLI версию php)
5) переходим в директорию phpmorphy-0.3.x/bin, запускаем build_dict.bat
build_dict.bat XML_FILE OUT_DIR ENCODING
XML_FILE - файл, которые получили от hun2xml
OUT_DIR - директория куда попадет словарь
ENCODING - кодировка
Словари есть тут
http://wiki.services.openoffice.org/wiki/Dictionaries
-------
Есть еще некоторые изменения, но это уже мелочи.