ооо!

Блог разработчика. Морфология для PHP

Морфология для PHP phpMorphy


Прежде всего скажу, что после отсутствия нормального описания, документации и т.д. при работе с морфологией на C#, такое ощущение, что попал в рай –полностью подробная документация, обилие готовых модулей, полная прозрачность. Поэтому много писать не имеет смысла.
Я использовал популярный морфологический модуль для php phpMorphy. Здессь мы снова встречаемся с компанией АОТ, работа с модулями которой для С и С# уже была описана здесь.

Библиотека phpMorphy


phpMorphy – библиотека морфологического анализа, реализованная на платформе PHP. Помимо русского работает с английским, немецким и даже украинским языком. Есть возможность добавить поддержку других языков при помощи myspell словаря.

Ее возможности:
  • Лемматизация (получение нормальной формы слова)
  • Получение всех форм слова
  • Получение грамматической информации для слова (часть речи, падеж, спряжение и т.д.)
  • Изменение формы слова в соответствии с заданными грамматическими характеристиками

  • Поддерживаются различные кодировки:
  • Все однобайтовые (windows-1251, iso-8859-* и т.п.)
  • Unicode кодировки - utf-8, utf-16le/be, utf-32, ucs2, ucs4

  • Для работы phpMorphy использует словари. Вы можете выбрать как словари проекта AOT, http://aot.ru уже рассмотренные здесь, так и myspell. В данном проекте я использовал словари АОТ, но работал и с myspell. Исходя из задач, особой разницы не почувствовал. В словарях myspell отсутствует грамматическая информация, потому часть функций будет недоступна, но насколько это важно, зависит от ваших задач, которые вы решаете. Единственное, что нужно для работы с модулем - исходный код библиотеки и один или несколько словарей в бинарном виде. Полная инструкция лежит здесь http://phpmorphy.sourceforge.net/dokuwiki/manual, там же можно скачать саму библиотеку phpMorphy и большое количество словарей к ней

    Для установки библиотеки phpMorphy:


    1. Скачайте последнюю версию библиотеки.

    2. Распакуйте архив (к примеру, в каталог c:\php\libs\phpmorphy). Рекомендуется разместить код бибилотеки в директории недоступной web серверу. Для Apache к примеру, выше DocumentRoot.

    3. Скачайте необходимые словари. Распакуйте файл со словарями (используем c:\php\libs\phpmorphy\dicts). В c:\php\libs\phpmorphy\dicts должны находится файлы словаря т.е. common_aut.*.bin, predict_aut.*.bin и т.п.

    4. Инициализировать словари.

    // Подключите файл common.php. phpmorphy-0.3.2 - для версии 0.3.2,
    // если используется иная версия исправьте код.
    // подключаем библиотеку только однажды, в дальнейшем проверяем

    require_once( 'c:/php/libs/phpmorphy/phpmorphy-0.3.2/src/common.php');

    // Укажите путь к каталогу со словарями
    $dir = 'c:/php/libs/phpmorphy/dicts';

    // Укажите, для какого языка будем использовать словарь.
    // Язык указывается как ISO3166 код страны и ISO639 код языка,
    // разделенные символом подчеркивания (ru_RU, uk_UA, en_EN, de_DE и т.п.)


    $lang = 'ru_RU';

    // Укажите опции
    // Список поддерживаемых опций (полный список опций -в описании библиотеки)

    $opts = array(
    'storage' => PHPMORPHY_STORAGE_FILE,
    );


    5. Создаем экземпляр класса phpMorphy

    // создаем экземпляр класса phpMorphy // обратите внимание: все функции phpMorphy являются throwable т.е. // могут возбуждать исключения типа phpMorphy_Exception (конструктор тоже)

    try {
    $morphy = new phpMorphy($dir, $lang, $opts);
    } catch(phpMorphy_Exception $e) {
    die('Error occured while creating phpMorphy instance: ' . $e->getMessage());
    }


    // далее под $morphy мы подразумеваем экземпляр класса phpMorphy

    Вот небольшой пример использования phpMorphy для определения нормальной формы слова в цикле:
    foreach($title as $t){
    $t2=mb_strtoupper($t,'UTF-8');
    $base2 = $morphy->getBaseForm($t2);
    $base_titl[] = $base2[0];
    }


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

    Использование морфологии на разных языках с помощью phpMorphy и ispell


    Как уже было сказано выше, с морфологией phpMorphy можно работать со многими языками при помощи myspell и ispell словаря. Существует множество реализаций национальных ispell словарей. Например, здесь содержатся словари более 50 языков –практически все европейские языки, а также различные другие, включая иврит и эсперанто.
    Нравится

    Если вы считаете, что данные материалы как-либо нарушают ваши права, напишите нам