turanjanin/serbian-language-tools

一套用于塞尔维亚语文本的标记化、转写和变音符号恢复的工具。

1.0.2 2022-02-28 22:07 UTC

This package is auto-updated.

Last update: 2024-08-29 05:44:05 UTC


README

塞尔维亚语言工具是一个用于处理塞尔维亚语文本的PHP库。它具有以下功能:

  • 标记化器
  • 变音符号恢复工具
  • 塞尔维亚西里尔字母和拉丁字母之间的转写器
  • 字母检测

需求

此库需要PHP 7.4或更高版本,并使用sqlite3intlmbstring扩展。

安装

您可以通过composer安装此包

composer require turanjanin/serbian-language-tools

用法

为了使用此库,您需要对字符串进行标记化。标记化是将字符串分割成一系列相关字符的过程。此库可以识别以下标记:单词、空白、URI(包括URL、标签和at-mention)、标点符号、HTML和表情符号。

可以通过创建一个使用命名构造函数的Text类的新实例来实现标记化

use Turanjanin\SerbianLanguageTools\Text;

$text = Text::fromString('Zdravo svete, ovo je primer teksta!');

文本对象将包含可以处理的标记数组。您可以使用此对象作为任何其他PHP数组,因为它实现了ArrayAccess接口。

echo count($text) . "\n"; // 13
echo get_class($text[1]). "\n"; // Turanjanin\SerbianLanguageTools\Tokens\Whitespace
echo $text[9] . "\n"; // primer

变音符号恢复/变音符号化

塞尔维亚拉丁字母包含一些在ASCII编码表中找不到的特定字符。这些字符具有变音符号 - č、ć、š、ž、dž、đ,这些符号在日常通信(社交媒体、电子邮件和短信)中通常被省略,主要是因为英语键盘布局的广泛使用。

这种退化的拉丁字母可以很容易地被人类读者理解,但对于搜索引擎和自然语言处理来说却是一个重大的挑战。因此,此库包含一个算法,该算法通过使用塞尔维亚语单词和短语词典和短语进行上下文区分来允许自动恢复ASCII文本。

算法检查所有Word标记,并查找恢复候选词 - 包含s、c、z或dj字符的单词。之后,执行以下两个步骤

  1. 在文本中搜索最常见的短语,如果找到,则用其变音符号等效词替换单词。这一步考虑了单词上下文,这使得我们可以给一些较少使用的变体提供优势。例如,sto hiljada不会替换为što hiljada,尽管形式što (为什么)与单词sto (百)相比有更大的频率。

  2. 在词典中查找每个恢复候选词,如果存在已知变体,则标记替换为RestoredWord(如果只有一个可能的变体)或MultipleRestoredWord(如果有更多可能的变体)。如果有多个变体,则具有最高频率的变体将被标记为首选。

可以通过调用可调用类来执行变音符号恢复

use Turanjanin\SerbianLanguageTools\Text;
use Turanjanin\SerbianLanguageTools\Transformers\DiacriticRestorer;

$text = Text::fromString('Cetiri cavke cuceci dzangrizavo cijucu u zeleznickoj skoli.');
echo (new DiacriticRestorer)($text); // Četiri čavke čučeći džangrizavo cijuču u železničkoj školi.

此算法所需的词典存储在自定义的SQLite数据库中,该数据库包含在此库中。您可以通过提供自定义的Turanjanin\SerbianLanguageTools\Dictionary\Dictionary接口实现来扩展此数据库或使用不同的存储解决方案。

转写

该库支持在西里尔字母、拉丁字母和ASCII字母之间的文本转写。可以通过调用适当的可调用类来执行转写。

use Turanjanin\SerbianLanguageTools\Text;
use Turanjanin\SerbianLanguageTools\Transformers\ToAsciiLatin;
use Turanjanin\SerbianLanguageTools\Transformers\ToCyrillic;
use Turanjanin\SerbianLanguageTools\Transformers\ToLatin;

$cyrillic = Text::fromString('Ово је ћирилични текст');
$latin = Text::fromString('Primer latiničnog teksta');

echo (new ToLatin)($cyrillic); // Ovo je ćirilični tekst

echo (new ToCyrillic)($latin); // Пример латиничног текста

echo (new ToAsciiLatin)($cyrillic); // Ovo je cirilicni tekst

如果您只需要在拉丁字母和西里尔字母之间进行转写,请查看更简单的库 - turanjanin/serbian-transliterator

字母检测

可以使用该库检测文本是否使用塞尔维亚西里尔字母或拉丁字母书写。

use Turanjanin\SerbianLanguageTools\Text;

Text::fromString('Ovo je latinica')->isLatin(); // true
Text::fromString('Ovo je latinica')->isCyrillic(); // false

作者

许可

MIT 许可协议 (MIT)。有关更多信息,请参阅许可文件