zoviet / lexicon
俄语单词和句子的语法和语义转换类
dev-master
2021-01-06 21:16 UTC
Requires
This package is auto-updated.
Last update: 2024-09-29 05:49:03 UTC
README
Lexicon/Semantic: 俄语单词和句子的语法和语义转换类
================================
该类使用语法规则而不是词典。例外:将单词从一个词性转换为另一个词性时,使用 Yandex.Speller。该类非常适合处理正式声明、结构化陈述以及没有词典同义词的单词 - 例如,复杂的科学术语。
功能
- 在文本中提取词性
- 根据两种算法(马丁·波特的算法和词典结尾算法)去除单词的结尾
- 将文本转换为单词数组
- 从文本中清除无关词性
- 在文本中查找对象、主语和宾语
- 从单词根生成词形
- 将文本中的形容词(作为定义)转换为名词
- 将文本中的名词(作为主语)转换为形容词
- 将单词从一种词性转换为另一种词性
- 向词根添加后缀
- 从单词生成可能的词形后缀
安装
composer require zoviet/lexicon
使用
有关更多信息,请参阅 examples.php。
返回的指针类型及其解释
- 'UNKN' => '未定义',
- 'PRES' => '介词',
- 'NUMS' => '数词',
- 'ADVS' => '副词',
- 'NOUNS' => '名词',
- 'VERBS' => '动词',
- 'PARTS' => '分词',
- 'ADJS' => '形容词',
- 'UNIS' => '连词'
此解释可在常量 TYPE 中找到;
静态方法(用于处理单词)
- test_word($word,FALSE|TRUE) - 确定单词的词性,第二个参数传递是否需要以文本形式解释(默认为 FALSE)。
echo \Lexicon\Semantic::test_word('курица'); //Вернет: NOUNS echo \Lexicon\Semantic::test_word('курица',TRUE); //Вернет: Существительное
- remove_ending($word,$type=FALSE) - 从单词中去除结尾,第二个参数是指示如何解释单词的指针(例如,'PARTS' - 分词。不强制)
echo \Lexicon\Semantic::remove_ending('курица'); //Вернет: куриц echo \Lexicon\Semantic::remove_ending('курица','ADVS'); //Вернет: курица
- stem($word) - 根据马丁·波特的算法对单词进行词干提取。
echo \Lexicon\Semantic::stem('гиперборейский'); //Вернет: гиперборейск
- transform($word,$type,FALSE) - 将单词转换为另一种类型(从名词到形容词,反之亦然),第二个参数指示要转换的类型,第三个参数指示是否需要返回最可信的选项数组(默认为 FALSE)。
echo \Lexicon\Semantic::transform('ботаник','ADJS'); //Вернет: ботанический echo \Lexicon\Semantic::transform('некоторый','ADJS'); //Вернет FALSE, т.к. некоторый - не существительное echo \Lexicon\Semantic::transform('аалдрораловавыаффвыпрафп','ADJS'); //Вернет NULL, т.к. преобразование не получилось
- remove_suffix($word,$type) - 递归地去除单词的词形后缀,类型 type 指定要去除的后缀类型(例如,'VERBS' - 动词)。它可以接受已经没有结尾的单词。
echo \Lexicon\Semantic::remove_suffix('патологоанатомический','ADJS'); //Вернет: патологоанат
- add_suffix($stem,$type,FALSE) - 向词根添加词形后缀,类型 type 指定要添加的后缀类型,第二个参数指定是否返回最可信的选项数组(默认为 FALSE)。使用 Speller。
echo \Lexicon\Semantic::add_suffix('ботан','ADJS'); //Вернет: ботанический \Lexicon\Semantic::add_suffix('лис','ADJS'); //Вернет: ["лисянский"]=> int(5) ["лысенький"]=> int(3) ["лисицкий"]=> int(3) ["лысоватый"]=> int(3) ["лисовский"]=> int(2) ["листоватый"]=> int(2) ["лесистый"]=> int(2) ["лосский"]=> int(2)
- forms ($stem,$type) - 根据类型 type 从词根生成所有“脏”词形。
var_dump (\Lexicon\Semantic::forms('лис','ADJS')); //Вернет: array(94) {[0]=> string(26) "лисоватенький" [1]=> string(26) "лисоватенькый" [2]=> string(26) "лисеватенький" [3]=> string(26) "лисеватенькый" [4]=> string(22) "лисехонький" [5]=> string(22) "лисехонькый" [6]=> string(22) "лисохонький" [7]=> string(22) "лисохонькый" [8]=> string(22) "лисешенький" [9]=> string(22) "лисешенькый" [10]=> string(22) "лисошенький" и т д
文本处理方法:短语、陈述、命题
初始化
$semantic = new \Lexicon\Semantic(); //или инициализация с передачей текста: $semantic = new \Lexicon\Semantic('Программное обеспечение P позволяет рационально организовать распорядок дня и освободить до 70% времени.');
跨属性
-
string - 包含原始短语及其所有基本转换(如果有的话)
-
words - 按顺序出现单词的数组。它由方法 words 或在调用任何处理方法时自动创建
-
result - 以词性数组的形式存储文本的语法分析结果
如果未指定方法,则其结果是改变类的跨属性。
基本文本处理方法
如果没有指定传递的属性,则意味着它们不存在。
- text(字符串) - 将文本传递给处理
- remove_braces() - 从文本中删除括号及其内容
- words(array=NULL) - 将字符串转换为不包含属性的单词数组,或者将属性设置为传递的数组单词类
- remove_pres() - 从数组中删除介词
- remove_unis() - 删除连词
- remove_nums() - 删除数词
- remove_all() - 应用上述所有删除操作
- remover($array) - 从以数组形式传递的数组中删除单词和符号
$string = 'Программное обеспечение (P) позволяет чуть более рационально организовать распорядок дня и освободить до 70% времени.'; $semantic->text($string)->remove_braces()->words()->remove_all()->remover(array('%','.')); var_dump($semantic->words); //Вернет array(9) { [0]=> string(22) "Программное" [1]=> string(22) "обеспечение" [2]=> string(18) "позволяет" [3]=> string(22) "рационально" [4]=> string(24) "организовать" [5]=> string(20) "распорядок" [6]=> string(6) "дня" [7]=> string(20) "освободить" [8]=> string(14) "времени" }
词性分析
设置类属性的方法。
- explore()
$string = 'Программное обеспечение (P) позволяет чуть более рационально организовать распорядок дня и освободить до 70% времени.'; $semantic->text($string)->remove_braces()->words()->remove_all()->explore(); //или если предварительный разбор не нужен, а текст передан через конструктор $semantic->explore(); var_dump($semantic->result); //Вернет ["ADJS"]=> array(2) { [0]=> string(22) "Программное" [1]=> string(22) "обеспечение" } ["VERBS"]=> array(3) { [0]=> string(18) "позволяет" [1]=> string(24) "организовать" [2]=> string(20) "освободить" } ["ADVS"]=> array(1) { [0]=> string(22) "рационально" } ["NOUNS"]=> array(3) { [0]=> string(20) "распорядок" [1]=> string(6) "дня" [2]=> string(14) "времени" } }
处理词尾和后缀
- stemming() - 根据词典删除词尾。如果将此方法应用于词性分析,则词尾将在单词数组(words)中删除,如果之后应用,则将在词性数组(results)中删除。
$string = 'Программное обеспечение (P) позволяет чуть более рационально организовать распорядок дня и освободить до 70% времени.'; $semantic->text($string)->remove_braces()->words()->remove_all()->explore()->stemming(); var_dump($semantic->result); //Вернет: ["ADJS"]=> array(2) { [0]=> string(18) "программн" [1]=> string(18) "обеспечен" } ["VERBS"]=> array(3) { [0]=> string(14) "позволя" [1]=> string(20) "организова" [2]=> string(14) "освобод" } ["ADVS"]=> array(1) { [0]=> string(14) "рациона" } ["NOUNS"]=> array(3) { [0]=> string(16) "распоряд" [1]=> string(4) "дн" [2]=> string(12) "времен" } } $semantic->text($string)->stemming(); var_dump($semantic->words); //Вернет: [0]=> string(18) "программн" [1]=> string(18) "обеспечен" [2]=> string(14) "позволя" [3]=> string(14) "рациона" [4]=> string(20) "организова" [5]=> string(16) "распоряд" [6]=> string(4) "дн" [7]=> string(14) "освобод" [8]=> string(12) "времен" }
提取主语、谓语和宾语
概率方法,提取不保证。可以与单词数组或词干数组一起工作。
- subject() - 提取主语 - 最“重要”的名词。如果找到则返回名词,否则返回NULL。
- defenition() - 对于形容词也是同样的。
- predict() - 对于谓语也是同样的。
$string = 'Программное обеспечение (P) позволяет чуть более рационально организовать распорядок дня и освободить до 70% времени.'; echo 'Предикт:'. $semantic->text($string)->predict(); echo ' | Субъект:'. $semantic->subject(); echo ' | Отношение:'. $semantic->definition(); //Вернет: Предикт:позволяет | Субъект:распорядок | Отношение:Программное
行中词性的转换
- to_noun(FALSE) - 将重要的形容词(自己找到)转换为名词。在无属性启动时返回一个值(最可能的),在TRUE时返回一个数组(字典)中的单词。用于Speller;
- to_adj(false) - 与之相同,但方向相反
$string = 'Программное обеспечение (P) позволяет чуть более рационально организовать распорядок дня и освободить до 70% времени.'; echo 'Новый субъект:'. $semantic->text($string)->to_noun(); echo ' | Новое отношение:'. $semantic->to_adj(); //Вернет: Новый субъект:программа | Новое отношение:распорядительный
- analise($deep) - 深度转换到指定的嵌套深度。假设处理的是复杂的句子。深度 - 考虑分析的实体(形容词和名词)的数量。返回一个关联数组,包含展开级别和相应的主体。
$string = 'Программное обеспечение (P) позволяет чуть более рационально организовать распорядок дня и освободить до 70% времени.'; var_dump ($semantic->text($string)->analise(2)); //Вернет: array(2) { ["level"]=> array(3) { [0]=> string(32) "распорядительный" [1]=> string(10) "новый" [2]=> string(18) "временный" } ["subject"]=> array(2) { [0]=> string(16) "программа" [1]=> string(20) "беспечность" } }
处理此类数组:将展开级别关联到主体。例如,在上面的例子中,数组可以读作“命令程序 - 新的临时无耐性”。在拼写检查器处理后:“命令性程序 - 新的临时无耐性”。