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

bask

Новичок
Жигaн, Пожалуйста, ткните носом
http://sourceforge.net/project/showfiles.php?group_id=192189&package_id=227234
или я не там смотрю?
 

bask

Новичок
Жигaн, спасибо

-~{}~ 26.05.09 01:24:

Вот такая ошибка наблюдается в словаре

+ВИДЕО
lemmas: ВИДЕО
all: ВИДЕО
poses: Н, С

lemma: ВИДЕО
ВИДЕО Н ()

lemma: ВИДЕО
ВИДЕО С (0, НО, СР)
 

pilot911

Новичок
а как добавить новые слова в словарь ? есть хотя бы простенький интерфейс ?
 

Emin

Новичок
Жигaн, спасибо за проект
Я с успехом установил phpmorphy на несколько серверов без особых проблем, сейчас возникла проблема на одном shared hosting акаунте. Хостер Российский, так что локали должны быть соотв. - но почему то не работает. Проверял с версиями with-jo without-jo, utf-8 . Даже пробовал старые версии - тоже самое (0.2.5). просто пишет
Testing single mode... Can`t find or predict ПРОВЕРКА word

Как проверить в чем проблема? Есть ли ограничения на safe_mode, open_base и т.д ?

Спасибо,

-~{}~ 11.06.09 08:39:

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

anonymous_cat

Новичок
Здраствуйте, Жигaн.

Я обновил phpmorphy до последней версии, взял словарь, который тут выкладывался для русского языка, все отлично заработало, пока не попробовал использовать PHPMORPHY_STORAGE_SHM.

Старая версия отлично работала в этом режиме.

А сейчас
Warning: unpack() [function.unpack]: Type v: not enough input, need 2, have 1 in /usr/site/phpmorphy-0.3.2/src/morphiers.php on line 74



Fatal error: Uncaught exception 'phpMorphy_Exception' with message 'Invalid annot string '' in /usr/site/phpmorphy-0.3.2/src/morphiers.php:77
Stack trace:
#0 /usr/site/phpmorphy-0.3.2/src/morphiers.php(425): phpMorphy_AnnotDecoder_Base->decode('?A????????????@...', true)
#1 /usr/site/phpmorphy-0.3.2/src/morphiers.php(442): phpMorphy_Morphier_Helper->decodeAnnot('?A????????????@...', true)
#2 /usr/site/phpmorphy-0.3.2/src/morphiers.php(1030): phpMorphy_WordDescriptor_Collection->__construct('????', '?A????????????@...', Object(phpMorphy_Morphier_Helper))
#3 /usr/site/phpmorphy-0.3.2/src/morphiers.php(1046): phpMorphy_Morphier_Base->createWordDescriptor('????', '?A????????????@...', Object(phpMorphy_Morphier_Helper))
#4 /usr/site/phpmorphy-0.3.2/src/common.php(356): phpM in /usr/site/phpmorphy-0.3.2/src/morphiers.php on line 77

В MEM-режиме работает, апач скомпилирован с '--enable-sysvsem' '--enable-sysvshm' '--enable-sysvmsg' '--enable-shmop'

Помогите пожалуйста, сам разобраться в архитектуре не смог.

ЗЫ nix debian lenny
 

Жигaн

Новичок
Попробуйте:

1) посмотреть на сегмент с id = 0x54358308 (если не устанавливали PHPMORPHY_SHM_SEGMENT_ID), интересен размер и владелец. ipcs -m

2) очистите кэш: выполните
PHP:
$morphy = new phpMorhy(..);
$cache = $morphy->getShmCache();
$cache->clear(); // очистили список файлов
$cache->free(); // удалили сегмент
можно посмотреть что лежит в разделяемой памяти:
PHP:
$list = $cache->getFilesList();
var_dump($list);
 

clevel

Новичок
Админю этот сервак, посему данные от меня:

ipcs -m

------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x54358308 0 evg_germes 644 25165824 0
0x6606cd6c 32769 evg_germes 644 599771 0
0x6606fb2a 65538 evg_germes 644 611387 0
0x6606cd3e 98307 evg_germes 644 34454 0
 

Жигaн

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

anonymous_cat

Новичок
Сегмент удалил, загрузил заново, ошибка та же.

Вот, вместе с дампом

array(4) {
["/usr/site/phpmorphy-0.3.2/dicts/common_aut.ru_ru.bin"]=>
array(4) {
["offset"]=>
int(0)
["mtime"]=>
int(1245310184)
["size"]=>
int(6066300)
["shm_id"]=>
int(20)
}
["/usr/site/phpmorphy-0.3.2/dicts/predict_aut.ru_ru.bin"]=>
array(4) {
["offset"]=>
int(6066300)
["mtime"]=>
int(1245310167)
["size"]=>
int(1998731)
["shm_id"]=>
int(20)
}
["/usr/site/phpmorphy-0.3.2/dicts/morph_data.ru_ru.bin"]=>
array(4) {
["offset"]=>
int(8065031)
["mtime"]=>
int(1245310170)
["size"]=>
int(1191620)
["shm_id"]=>
int(20)
}
["/usr/site/phpmorphy-0.3.2/dicts/gramtab_txt.ru_ru.bin"]=>
array(4) {
["offset"]=>
int(9256651)
["mtime"]=>
int(1245310171)
["size"]=>
int(85363)
["shm_id"]=>
int(20)
}
}



Warning: unpack() [function.unpack]: Type v: not enough input, need 2, have 1 in /usr/site/phpmorphy-0.3.2/src/morphiers.php on line 74



Fatal error: Uncaught exception 'phpMorphy_Exception' with message 'Invalid annot string '' in /usr/site/phpmorphy-0.3.2/src/morphiers.php:77
Stack trace:
#0 /usr/site/phpmorphy-0.3.2/src/morphiers.php(425): phpMorphy_AnnotDecoder_Base->decode('?A????????????@...', true)
#1 /usr/site/phpmorphy-0.3.2/src/morphiers.php(442): phpMorphy_Morphier_Helper->decodeAnnot('?A????????????@...', true)
#2 /usr/site/phpmorphy-0.3.2/src/morphiers.php(1030): phpMorphy_WordDescriptor_Collection->__construct('????', '?A????????????@...', Object(phpMorphy_Morphier_Helper))
#3 /usr/site/phpmorphy-0.3.2/src/morphiers.php(1046): phpMorphy_Morphier_Base->createWordDescriptor('????', '?A????????????@...', Object(phpMorphy_Morphier_Helper))
#4 /usr/site/phpmorphy-0.3.2/src/common.php(356): phpM in /usr/site/phpmorphy-0.3.2/src/morphiers.php on line 77
 

Жигaн

Новичок
О как, похоже баг.
1) Это только для этого слова? Или ничего не работает.

2)
Вставьте в файл morphiers.php в строку 74
var_dump(base64_encode($annotRaw));

т.е.
PHP:
    function decode($annotRaw, $withBase) {
        $unpack_str = $this->unpack_str;
        $unpack_size = $this->block_size;
        
        var_dump(base64_encode($annotRaw)); // вставили var_dump
        $result = unpack("Vcount/$unpack_str", $annotRaw);
        
        if(false === $result) {
            throw new phpMorphy_Exception("Invalid annot string '$annotRaw'");
        }
        
        if($result['common_ancode'] == self::INVALID_ANCODE_ID) {
            $result['common_ancode'] = null;
        }

        ...
и покажите вывод для STORAGE_SHM и STORAGE_FILE + слово для которого тестируете

p.s. можно на email: phpmorphy |на| yandex.ru
 

GTHack

Новичок
задача - синонимайзер, для решения думаю использовать phpmorphy
реализовывать думаю так
на входе СЛОВО1 - на выходе синоним этого слова в той же морфологии что и на входе СЛОВО2
1. определяем морфологию (часть речи, время, число и т.д.)
2. нормализуем
3. по базе синонимов находим синоним
4. пребразуем его в тоже что и было

* с нормализацией проблем нет - getBaseForm()
* с определением текущей морфологии уже не так просто,
понимаю что не рационально, но пока думаю юзать getAllFormsWithGramInfo()
(т.е. сначала нормализуем, потом дёргаем всё варианты - и в них находим свой - запоминаем его)
* с заменой нормализованного слова тоже проблем не будет
* а вот приведение нового СЛОВО2 в исходное состояние СЛОВА1 - тоже проблемка

пример ДВИЖЕНЬЯХ = ПЕРЕМЕЩЕНЬЯХ

1. на входе слово ДВИЖЕНЬЯХ
2. нормализуем getBaseForm() = ДВИЖЕНИЕ
3. с помощью getAllFormsWithGramInfo() определяем текущую морфологию "С МН,НО,ПР,СР" (имхо тут неправильно и не рационально - думаю должна быть отдельная функция для этого)
4. ДВИЖЕНИЕ заменяется на ПЕРЕМЕЩЕНИЕ
5. ПЕРЕМЕЩЕНИЕ с помощью функции ???? (незнаю) и входным параметром "С МН,НО,ПР,СР" преобразуется в ПЕРЕМЕЩЕНЬЯХ
 
Сверху