PHPackages                             go/ewp - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Parsing &amp; Serialization](/categories/parsing)
4. /
5. go/ewp

ActiveLibrary[Parsing &amp; Serialization](/categories/parsing)

go/ewp
======

Esperanto word parser

0.0.1(12y ago)318MITPHPPHP &gt;=5.4.0

Since Jan 26Pushed 12y ago2 watchersCompare

[ Source](https://github.com/vasa-c/esperanto-word-parser)[ Packagist](https://packagist.org/packages/go/ewp)[ Docs](https://github.com/vasa-c/esperanto-word-parser)[ RSS](/packages/go-ewp/feed)WikiDiscussions master Synced 3d ago

READMEChangelogDependenciesVersions (2)Used By (0)

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

[](#разбор-эсперанто-слов)

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

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

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

[Работающий пример](http://blgo.ru/tools/esperanto/).

Для русского языка используется словарь на три тысячи корней, основанный на [этом](http://www.natalimak1.narod.ru/esper/erslovar.htm).

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

На данный момент не справляется с составными словами.

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

[](#требования-установка-и-всё-такое)

Требования: PHP 5.4+

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

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

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

[](#формат-текста)

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

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

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

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

Конвертация:

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

### `Locale`: локаль

[](#locale-локаль)

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

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

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

[](#parser-анализатор)

Парсер доступен через локаль:

```
use go\ewp\Locale;

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

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

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

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

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

[](#result-результат-разбора)

Объект со следующими полями:

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

Всё в нормализованной форме.

`__toString()` выводит объект в виде `(mal)ferm[is]`.

### Перевод

[](#перевод)

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

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

[](#перевод-корня)

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

```
$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'); // становиться
```

##### Фонетика

[](#фонетика)

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

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

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

[](#структура-локали)

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

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

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

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

```

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

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

[](#freq-частотный-словарь)

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

```
use go\ewp\Freq;

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

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

```
$freq->getWords();
```

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

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

```

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

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

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

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

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

```
[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
...

```

Обломные слова:

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

```

Статистика:

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

```

###  Health Score

24

—

LowBetter than 32% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity10

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

4492d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/2ab85c5ae5158b9392594b07d9e15a2b14384401e927d1f0c69a1f151a5d69cb?d=identicon)[go](/maintainers/go)

---

Top Contributors

[![vasa-c](https://avatars.githubusercontent.com/u/557081?v=4)](https://github.com/vasa-c "vasa-c (23 commits)")

---

Tags

Esperanto

### Embed Badge

![Health badge](/badges/go-ewp/health.svg)

```
[![Health](https://phpackages.com/badges/go-ewp/health.svg)](https://phpackages.com/packages/go-ewp)
```

###  Alternatives

[mtdowling/jmespath.php

Declaratively specify how to extract elements from a JSON document

2.0k472.8M135](/packages/mtdowling-jmespathphp)[opis/closure

A library that can be used to serialize closures (anonymous functions) and arbitrary data.

2.6k230.0M284](/packages/opis-closure)[masterminds/html5

An HTML5 parser and serializer.

1.8k242.8M229](/packages/masterminds-html5)[sabberworm/php-css-parser

Parser for CSS Files written in PHP

1.8k191.2M65](/packages/sabberworm-php-css-parser)[michelf/php-markdown

PHP Markdown

3.5k52.4M345](/packages/michelf-php-markdown)[jms/metadata

Class/method/property metadata management in PHP

1.8k152.8M88](/packages/jms-metadata)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
