go/ewp

埃斯佩兰托词汇解析器

0.0.1 2014-01-26 17:06 UTC

This package is not auto-updated.

Last update: 2024-09-24 01:00:31 UTC


README

一个在无意义中具有划时代意义的工具。

尝试对埃斯佩兰托单词进行句法分析。

例如: malfermiĝis: (mal)ferm<iĝ>[is], 根 ferm (关闭), 前缀 mal- (相反), -is - 过去时态的动词, 后缀 -iĝ - 变成。猜测词义留给用户。在示例中,这可能是“关闭”。

工作示例.

对于俄语,使用基于这个的三千个词根的词典。

对于测试过的文本(几本书),确定了大约80%的独特单词,同时覆盖了95%的文本。大多数未识别的单词是名字和名称。

目前无法处理复合词。

要求,安装以及类似事项

要求:PHP 5.4+

安装:Composer(go/ewp)或手动(所有内容在PSR-4)。

以下所有描述的类都位于命名空间 go\ewp 中。

文本格式

大多数方法仅接受规范化的文本格式,即

  • 所有变音符号应转换为 x 形式。也就是说 ĝ - gx 等。
  • ŭ - 也可以是 ux(而不是 u~)。
  • 所有字母都转换为小写。

任意形式(少数方法能理解)意味着

  • 可能存在变音符号。
  • 也可能附近有 x 形式的字母。
  • 还可能有 u~U~
  • 可以是任何大小写。
  • 允许标点符号。

转换

  • Diacritic::diacritic2latin($text) - 将任意形式的文本转换为规范化。
  • Diacritic::latin2diacritic($text) - 反过来。

Locale: 区域

区域指定要翻译成哪种语言。目前仅定义了俄语。大多数服务可通过区域访问。

  • Locale::getSysLocale(string) - 获取系统区域(由库定义,仅适用于 ru)。
  • new Locale(string $dir) - 从目录创建区域(目录格式在下面描述)。

Parser: 解析器

解析器通过区域访问

use go\ewp\Locale;

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

方法 parse() 接收一个单词并返回其分析结果。

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

输出是 Result 类的实例或 NULL 如果根未定义。

Result: 解析结果

具有以下字段的对象

  • root: 单词的基础(例如 ferm
  • prefixes: 找到的前缀数组(例如 [mal])
  • suffixes: 找到的后缀数组(例如 [igx])
  • part: 词性,以结尾形式表示(例如 is,可能为 NULL
  • accus: 阿克萨特(宾格)(TRUE/FALSE)
  • plural: 复数(TRUE/FALSE)

所有内容均为规范化形式。

__toString()(mal)ferm<igx>[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: 频率词典

一种工具,用于检查分析器解析单词的成功程度。

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<igx>[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%)