go / ewp
埃斯佩兰托词汇解析器
Requires
- php: >=5.4.0
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%)