Welcome to PHPClub
В эти выходные на LinuxFest v.12! Поляна от PHPClubа Мастер-классы по Javascript, AJAX/COMET, jQuery!
Боишься нашего дизайна?
поиск:
   
 Начало | Настройки | Расширенный поиск | РегистрацияПосмотреть новые сообщения 
  
PHP Club форумы: > Разное > PHPWorld - новости из мира PHP > Русская морфология
Страниц (16): [1] 2 3 4 » | ... Последняя »  

Автор
Тема ОТВЕТИТЬ
Жигaн
Продвинутый новичок

На форуме с: Mar 2006
Cообщений: 105
Город:
Русская морфология

Доброго времени суток.

Выложил библиотеку для проведения морфологического анализа в public domain. Надеюсь некоторым будет интересно взглянуть ;).

features


  • Для входного слова умеет находить:
  • --- Псевдо корень
  • --- Нормальную форму
  • --- Все словоформы
  • --- Грамматическую(и не только ;)) информацию
  • Скорость нахождения нормальной формы ~700 слов в секунду(это для php5.1.1, WinXP, Duron-800), имеется возможность загрузить словарь в память, при этом скорость возрастает примерно на 20-25%.
  • Основной словарь содержит около 3млн словоформ
  • Есть два режима предсказания ненайденных слов – по суффиксу и по специально подготовленному словарю(подробнее см. http://www.aot.ru/docs/sokirko/Dialog2004.htm, я реализовывал этот алгоритм). Качество предсказания -- так себе… ;)
  • Размер словаря ~4Mb
  • Для работы необходим php4.3.x, php5(пробовал php4.3.7 и php5.1.1)
  • Лицензия LGPL


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

Homepage: phpMorphy
Demo: phpMorphy - Demo

Документации пока нет(ибо опенсурс ;)), но есть example.php в дистрибе ;). Будут вопросы\пожелания задавайте!

Благодарю за внимание. ;)

Отредактировано Wicked 03.05.10 в 11:58
Old Post 27.02.07 23:27 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
WP
^_^

На форуме с: Apr 2006
Cообщений: 2545
Город: Moscow, Russia. currently Saint-Peterburg, Russia

Не люблю тяжелые библеотеки. Напиши 1 класс с методами которые бы возвращали нужные наборы данных. И всякие ненужные opts убери из example - настройки необязательные.

И будет хорошая штука =)

-~{}~ 28.02.07 07:12:

з.ы. я не исключаю такого развернутого варианта, но хотелось бы иметь компактный в одном файле

Old Post 28.02.07 03:47 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Wicked
Moderator

На форуме с: Oct 2004
Cообщений: 2861
Город: Novosibirsk, Russia

Жигaн
респект

для начала рекомендация:

$locales 
= array("ru_RU.CP1251""ru_RU.cp1251""Russian_Russia.1251" /* <- у мну сразабывает на этой */"ru_RU""ru");
$locale_found false;
foreach(
$locales as $locale) {
  if (!
$locale_found) {
    
$locale_found |= (false !== setlocale(LC_CTYPE$locale));
  }
}


-~{}~ 28.02.07 11:56:

на целероне 2.4 на ispell'овском base.koi (129 тыс. файлов) - 700 слов в секунду

Отредактировано Wicked 28.02.07 в 05:56

Old Post 28.02.07 04:43 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Develar
Продвинутый новичок

На форуме с: Nov 2005
Cообщений: 259
Город: Saint Petersburg, Russia

Wicked
Если для работы необходим php4.3, то зачем пляска с foreach - setlocale принимает массив.

Old Post 28.02.07 06:14 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Wicked
Moderator

На форуме с: Oct 2004
Cообщений: 2861
Город: Novosibirsk, Russia

Develar
согласен. Просто невнимательно требования посмотрел.

Old Post 28.02.07 06:49 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Жигaн
Продвинутый новичок

На форуме с: Mar 2006
Cообщений: 105
Город:

2WP: Хмм даже не знаю, я старался сделать и так все по минимуму . А что имеется ввиду ппо 1 класс?
Сейчас phpMorphy класс - фасад к внутреннему API. Ты имеешь ввиду сделать все вызовы через фасад типа

$morphy 
=& new phpMorphy($opts);
$normal $morphy->getNormalForm($word);

и т.п.? Или упростить внутренний API? Дык кудаж меньше?
Просто сейчас возможно гибко управлять внутренностями, кэширование и т.п., если упростить то саппортить код будет невозможно.

2Wicked:
Спасибо, насчет венды забыл , правда неясно почему при установки локали ru_RU будет выбрана 1251 кодовая страница? интересно взглянуть на результат locale -a|grep ru_RU . Теперь насчет скорости. 700 слов это при каких настройках(предсказание, fsa_cache_* и т.п.)
Расскажу свое ИМХО как потюнить скорость:
in_memory -- следует включать ТОЛЬКО при пакетной обработке текстов большого объема(это я думаю и так понятно)
graminfo_cache -- я включаю всегда
fsa_cache_levels -- включаю ТОЛЬКО при пакетной обработке, причем если объем текста
fsa_cache_dir -- это можно установить всегда(будет использовано если fsa_cache_levels>0)
with_gramtab -- просто так лучше не включать т.к. в этом случае при каждом запросе будет читаться файл gramtab.rus.bin(30кил +unserialize). Для поиска эти данные скорее всего не понадобятся.
predict_by_suffix -- если нужно предсказание
predict_by_db -- если нужно предсказание

По предсказанию:
Включать можно только predict_by_db(предсказание по окончанию) т.к. в основном работает именно оно. predict_by_suffix работает для слов типа 'мегачерный' т.е. к нормальному слову была приписана приставка.

2All: Нужны кому english, german словари, или достаточно русского?

-~{}~ 28.02.07 22:26:

2Wicked: Вы делали морфологию на основе ispell в mysql? Интересно какая скорость нормализации?

Old Post 28.02.07 19:21 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Wicked
Moderator

На форуме с: Oct 2004
Cообщений: 2861
Город: Novosibirsk, Russia

Жигaн
имхо не надо WP слушать http://phpclub.ru/talk/showthread.php?threadid=95926

Словари - выкладывай конечно!

 
нтересно взглянуть на результат locale -a|grep ru_RU


Я бы с радостью, но grep у меня в винде есть, а locale - нету

 
2Wicked: Вы делали морфологию на основе ispell в mysql? Интересно какая скорость нормализации?


12.8млн слов за 950 секунд ~= 13427 слов/сек.
Правда, перед этим пришлось потратить 874 секунды на добавление 470тыс. неизвестных слов в таблицу ispell'а. Но это, мне кажется, можно значительно оптимизировать. Так что что скорость где-то всего в 10 (15 с оптимизацией) раз больше.

-~{}~ 01.03.07 10:46:

Тюнингом займусь чуть попозже.

Old Post 01.03.07 04:38 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
WP
^_^

На форуме с: Apr 2006
Cообщений: 2545
Город: Moscow, Russia. currently Saint-Peterburg, Russia

Жигaн
Коробят всякие compat'ы. Пиши под PHP 5 only
И просто нужно чтобы всё было в одном-двух файлах. Подключил - создал объект - получил то что нужно одним вызовом метода.
Wicked
Квики отличный пример - там два класса основной и компилятор + плагины. И нет файлов типа gramtab.php.

В библеотеках я больше всего ценю Легкость, т.е. когда автор позволяет сделать

require_once 'one_file.php';
$one = new one(...);
$result $one->get(...);


Например стеммер Портера реализованный на dklab - блестящий пример Легкой библеотеки. А как наворотят целую свиноферму из файлов... глаза б не глядели. Когда явно по смыслу библеотека выполняет пару функций.

Old Post 01.03.07 05:31 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Жигaн
Продвинутый новичок

На форуме с: Mar 2006
Cообщений: 105
Город:

WP:
1. Насчет `компатов` php5 мягко говоря не слишком широко используется как того хотелось бы. Потому для меня важно чтоб библиотека была не php5 only.
2. Непонятно что ты привязался к кол-ву файлов? Сравнивать системы разного назначения и разной сложности просто некорректно. Насчет gramtab.php это к чему? название не нравится что-ли?
3. Чем сложнее

$morphy 
= new phpMorphy(...);
if(
false !== ($desc $morphy->morph(...))) {
  echo 
$desc->getBaseForm();
}

чем

$morphy 
= new phpMorphy(...);
if(
false !== ($form $morphy->getBaseForm(...)) {
echo 
$form;
}

4. Библиотека выполняет не пару ф-ций. Это внешний интерфейс такой простой
5. Если для тебя достаточно стеммера, очень хорошо. phpMorphy использовать нет смысла т.к. лишние тормоза. (и не от кол-ва классов\файлов они...)

-~{}~ 01.03.07 21:21:

Wicked:
1. У тебя все словоформы в одной таблице хранятся? Объем базы >200Mb?
2. Нифига себе, у меня mysql выполняет порядка 20rps запросов типа
SQL:


SELECT 1
. Похоже мне mysql тюнить надо...
Old Post 01.03.07 18:13 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Wicked
Moderator

На форуме с: Oct 2004
Cообщений: 2861
Город: Novosibirsk, Russia

 
1. У тебя все словоформы в одной таблице хранятся? Объем базы >200Mb?


чистый ispell - 131 мб.
ispell, после добавления 470 тыс неизвестных слов (при индексации 96мб энц. словарей) - 195 мб.

таблица со словоформами - самая большая из всех.

Отредактировано Wicked 02.03.07 в 06:18

Old Post 02.03.07 05:40 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Bermuda
Активист PHPClub

На форуме с: May 2002
Cообщений: 369
Город: Zaragoza, Spain

 
Автор оригинала: Жигaн
2All: Нужны кому english, german словари, или достаточно русского?


Ой как нужен словарь испанского. Есть? А где достать?


__________________
Google -- твой друг, я -- нет.

Old Post 11.03.07 16:31 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Жигaн
Продвинутый новичок

На форуме с: Mar 2006
Cообщений: 105
Город:

2Bermuda: Я не силен в испанском чес-слово . Понятия не имею, как в нем построено словообразование.
Что могу предложить:
1) ispell
2) http://www.solarix.ru <-- тут за деньги
3) http://www.gelbukh.com/agme/
4) http://www.xrce.xerox.com/competenc...s/demos/spanish

в 3) словарь раздают бесплатно(правда под мутной лицензией). Можешь посмотреть как там качество морфологии, если нормально, можно попробовать сконвертить их(тут мне понадобится помощь =])

Old Post 14.03.07 00:06 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Bermuda
Активист PHPClub

На форуме с: May 2002
Cообщений: 369
Город: Zaragoza, Spain

Жигaн
Временно надобность в нахождении нормальной формы слов испанского языка отпала. Однако я вернусь к этой теме месяца через 2-3. Отпишу сюда. В любом случае спасибо!

Old Post 17.03.07 16:13 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Жигaн
Продвинутый новичок

На форуме с: Mar 2006
Cообщений: 105
Город:

phpMorphy обновился до 0.2a

Изменения:
- В два раза повышена скорость работы
- Введен режим пакетной обработки(+50% в скорости для нормализации)
- Обновлен словарь для русского языка
- Добавлена поддержка shared memory
- Немного изменен API
- Добавлены словари для английского и немецкого языков

Проект переехал на http://sourceforge.net/projects/phpmorphy/

Old Post 05.04.07 00:18 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
programmer_2006
Продвинутый новичок

На форуме с: Sep 2006
Cообщений: 252
Город: Донецк
Re: Русская морфология

Хотел узнать как с тобой можно связаться , мыло?аська?или только через этот форум?Планируется ли дальнейшее развитие проэкта?

-~{}~ 17.05.07 15:33:

кстати а как определить русское ли слово пришло или какое другое?Когда не знаешь на каком языке будет запрос идти?...

-~{}~ 17.05.07 15:36:

Спасибо тому кто дал мне ссылку на этот топик. Это то что я искал.
Кстати вопрос а где брать словари для других языков.. например украинского?

-~{}~ 17.05.07 15:57:

У меня странный глюк, достаточно мне поменять в примере искомое слово как он нечего не находит, а потом возвращаю на слово из примера и опять нулевой результат... Может винда глючит??? Меня виндовс уже выкашует особенно в том что касается кодировок.

-~{}~ 17.05.07 16:15:

 
Автор оригинала: programmer_2006
У меня странный глюк, достаточно мне поменять в примере искомое слово как он нечего не находит, а потом возвращаю на слово из примера и опять нулевой результат... Может винда глючит??? Меня виндовс уже выкашует особенно в том что касается кодировок.


Короче вечная проблема кодировок :-) Решил ее благодаря очень хорошему человеку, программисту и его функции :-)
Осталось решить вопрос как расширять словари или где брать новые?И как определить какое слово пришло.
Огромное спасибо человеку написавшего этот класс :-)

-~{}~ 17.05.07 16:50:

Кстати как допустим словарь ispell скомплить в словарь для этого проекта?


__________________
Спасибо Всем!!!

Old Post 17.05.07 12:16 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Wicked
Moderator

На форуме с: Oct 2004
Cообщений: 2861
Город: Novosibirsk, Russia

ispell врядли подойдет, т.к. в нем не содержится той информации, которая содержится здесь

Old Post 17.05.07 19:16 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
programmer_2006
Продвинутый новичок

На форуме с: Sep 2006
Cообщений: 252
Город: Донецк

Мне для полного счастья только украинского языка не хватает.

-~{}~ 09.07.07 15:56:

Жиган дай плиз свою аську.
Кстати кто может подкинуть украинский словарь?Возможно за вознаграждение.


__________________
Спасибо Всем!!!

Old Post 09.07.07 08:07 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Wicked
Moderator

На форуме с: Oct 2004
Cообщений: 2861
Город: Novosibirsk, Russia

Жигaн
 
var $dir


и
 
*) Fully E_STRICT compatible


как-то не cовсем вяжутся с мануалом:
 
The PHP 4 method of declaring a variable with the var keyword is still supported for compatibility reasons (as a synonym for the public keyword). In PHP 5 before 5.1.3, its usage would generate an E_STRICT warning.




Еще я нашел довольно интересную статейку про сравнение стеммеров - http://www.rcdl2006.uniyar.ac.ru/papers/paper_67_v2.pdf

-~{}~ 29.07.07 02:01:

Жигaн
а сколько в русском словаре захардкоденых слов? Я так понимаю, работает оно так: если слово найдено в словаре, оно отдает по нему точную информацию. Если не найдено - то пытается анализировать. Так?

Old Post 28.07.07 19:59 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Жигaн
Продвинутый новичок

На форуме с: Mar 2006
Cообщений: 105
Город:

Ага насчет var спасибо, забыл, исправлюсь.

В словаре около 3млн уникальных словоформ(различающихся только по морфологическим признакам)
Есть два режима предсказания:
1) Усечением левой части слова(для мегакрасного -> мегакрасный)
2) по окончанию
как правило неизвестные слова предсказываются по п2, однако точность выше у п1.

P.S. За ссылку спасибо, почитал, однако из моей практики snowball и портер мусорили сильно на коротких фразах(1-2 слова)

Old Post 28.07.07 23:52 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Kudja
Новичок

На форуме с: Aug 2007
Cообщений: 6
Город: РБ, Брест

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

Old Post 04.08.07 12:56 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Время GMT. Текущее время 23:14. Подписаться на Тему | Версия для Печати
Страниц (16): [1] 2 3 4 » | ... Последняя »  

PHP Club форумы: > Разное > PHPWorld - новости из мира PHP > Русская морфология
 
Оценить:
 
 
 
 

 © 1997-2010 PHPClubTeam      

Powered by vBulletin Copyright © 2000-2010 Jelsoft Enterprises Limited.