2017 © Pedro Peláez
 

library ewp

Esperanto word parser

image

go/ewp

Esperanto word parser

  • Monday, January 27, 2014
  • by go
  • Repository
  • 2 Watchers
  • 3 Stars
  • 8 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 2 Versions
  • 0 % Grown

The README.md

Разбор эсперанто слов

Эпохальная в своей бессмысленности тулза., (*1)

Пытается произвести синтаксический разбор слова на эсперанто., (*2)

Например: malfermiĝis: (mal)ferm<iĝ>[is], корень fermi (закрывать), приставка mal- (противоположность), -is - глагол в прошедшем времени, суффикс -iĝ - становиться. Додумать смысл слова оставляется пользователю. В примере, это, по-видимому, "закрылось"., (*3)

Работающий пример., (*4)

Для русского языка используется словарь на три тысячи корней, основанный на этом., (*5)

Для протестированных текстов (несколько книг) определяет около 80% уникальных слов, покрывая при этом до 95% текста. Большинство пропущенных слов - имена и названия., (*6)

На данный момент не справляется с составными словами., (*7)

Требования, установка и всё такое

Требования: PHP 5.4+, (*8)

Установка: компосер (go/ewp) или руками (всё в PSR-4)., (*9)

Все нижеописанные классы находятся в пространстве имён go\ewp., (*10)

Формат текста

Большинство методов понимают только нормализованную форму текста, то есть:, (*11)

  • Вся диакритика должна быть приведена к x-форме. То есть ĝ - gx и т.д.
  • ŭ - также ux (а не u~).
  • Все буквы приведены к нижнему регистру.

Произвольная форма (которую понимают меньшинство методов) подразумевает:, (*12)

  • Возможно наличие диакритики.
  • Также рядом с ней могут содержаться буквы в x-форме.
  • Заодно может быть u~ и U~.
  • Регистр может быть любым.
  • Допустимы знаки пунктуации.

Конвертация:, (*13)

  • Diacritic::diacritic2latin($text) - текст в произвольной форме в нормализованную.
  • Diacritic::latin2diacritic($text) - обратно.

Locale: локаль

Локаль указывает на какой язык переводим. Пока определена только русская. Большинство сервисов доступно через локаль., (*14)

  • Locale::getSysLocale(string) - получить системную локаль (определённую в библиотеке, доступна только ru).
  • new Locale(string $dir) - создать локаль из каталога (формат каталога описан ниже).

Parser: анализатор

Парсер доступен через локаль:, (*15)

use go\ewp\Locale;

$parser = Locale::getSysLocale('ru')->getParser();

Метод parse() получает слово и возвращает результат его анализа., (*16)

echo $parser->parse('malfermigxis'); // (mal)ferm<igx>[is]

На выходе экземпляр класса Result или NULL если корень не определён., (*17)

Result: результат разбора

Объект со следующими полями:, (*18)

  • root: основа слова (в примере ferm)
  • prefixes: массив найденных приставок (в примере [mal])
  • suffixes: массив найденных суффиксов (в примере [igx])
  • part: часть речи в виде окончания (is, может быть NULL)
  • accus: аккузатив (винительный падеж) (TRUE/FALSE)
  • plural: множественное число (TRUE/FALSE)

Всё в нормализованной форме., (*19)

__toString() выводит объект в виде (mal)ferm<igx>[is]., (*20)

Перевод

Полученные части слова можно перевести на язык локали., (*21)

Перевод корня

Сначала нужно привести основу к базовому корню, потом перевести., (*22)

$dict = $locale->getDict();
$root = $dict->getRoot($result->root); // ferm --> fermi
echo $dict->translate($root); // fermi --> закрывать
Перевод приставки
echo $locale->getPrefixes()->translate('mal'); // противоположность
Перевод суффикса
echo $locale->getPrefixes()->translate('igx'); // становиться
Фонетика

Можно даже немного фонетикой побаловаться:, (*23)

$phonetics = $locale->getPhonetics();
echo $phonetics('malfermigxis'); // малфэрмиджис

Структура локали

Локаль хранится в каталоге. Предустановленные локали хранятся в source/locals/$locale., (*24)

  • roots.txt - корни
  • prefixes.txt - приставки
  • suffixes.txt - суффиксы
  • phonetics.txt - произношение букв

Все файлы представляют собой список элементов по одному на каждой строке, сначала элемент на эсперанто, потом, через двоеточие, перевод:, (*25)

abelo        : пчела
abismo       : пропасть, пучина
abnegacio    : самоотверженность
aboli        : отменять, уничтожать
abolicii     : отменять, уничтожать
abomeno      : отвращение

В приставках и суффиксах, более длинные должны идти раньше более коротких., (*26)

Freq: частотный словарь

Приблуда, позволяющая проверить, насколько успешно анализатор разбирает слова., (*27)

use go\ewp\Freq;

$freq = new Freq('file1.txt');
$freq->appendFile('file2.txt');
$freq->appendFile('file3.txt');
$freq->appendContent('Tio estas iom da enhavo');

Словарю скармливаются тексты (в произвольной форме). Можно посмотреть их статистику:, (*28)

$freq->getWords();

Возвращает упорядоченный словарь всех найденных слов (в нормализованной форме) и их количество. Например:, (*29)

[la] => 7218
[mi] => 3342
[kaj] => 3156
[de] => 2010
[en] => 1289
[al] => 1215
[li] => 1204
[ne] => 1168
[estis] => 1136
[vi] => 847

$freq->getCount() - возвращает общее количество найденных слов (не уникальных, которых можно получить из размера предыдущего массива), а именно всех слов., (*30)

$res = $freq->passParser($parser);

Этот метод пропускает все слова через переданный ему анализатор. Возвращает объект со следующими полями:, (*31)

  • success - массив всех успешно разобранных слов (в формате 'malfermigxis' => '(mal)ferm<igx>[is]').
  • fail - порядковый массив всех слов, которые не удалось разобрать (упорядоченный от самых частотных).
  • uniq - всего уникальных слов.
  • words - общее количество слов.
  • puniq - разобранных слов.
  • pwords - какое количество составляют разобранные слова.
  • peruniq - процент разбора уникальных.
  • perwords - процент разбора среди общего количества.

Пример разбора текста. Успешные слова:, (*32)

[la] => la
[mi] => mi
[kaj] => kaj
[de] => de
[estis] => est[is]
[ne] => ne
[li] => li
[al] => al
[en] => en
[vi] => vi
[por] => por
[estas] => est[as]
[ni] => ni
[ke] => ke
[sed] => sed
...

Обломные слова:, (*33)

muro, kapjesis, finfine, fortikajxo, spukavatem, lizbeta, reen, konstruajxo, samtempe, ekstaris ...

Статистика:, (*34)

uniq : 11433
count: 65009
p uniq: 8636 (75%)
p count: 60130 (92%)

The Versions

27/01 2014

dev-master

9999999-dev https://github.com/vasa-c/esperanto-word-parser

Esperanto word parser

  Sources   Download

MIT

The Requires

  • php >=5.4.0

 

esperanto

26/01 2014

0.0.1

0.0.1.0 https://github.com/vasa-c/esperanto-word-parser

Esperanto word parser

  Sources   Download

MIT

The Requires

  • php >=5.4.0

 

esperanto