| Статус сборки | Покрытие кода | Версия | Всего загрузок | Минимальная версия PHP | Лицензия |
|---|---|---|---|---|---|
Эта библиотека может обнаружить язык данной текстовой строки. Он может анализировать данный учебный текст во многих различных идиомах в последовательность N-граммов и создавать файл базы данных в PHP, который будет использоваться на этапе обнаружения. Затем он может занять заданный текст и обнаружить его язык, используя базу данных, ранее сгенерированную на этапе обучения. Библиотека поставляется с образцами текста, используемых для обучения и обнаружения текста на 110 языках.
Примечание. Для этой библиотеки требуется расширение многобита для работы.
$ composer require patrickschur/language-detection3.yz до 4.yz ?Важно : только для людей, которые используют пользовательский каталог со своими собственными файлами перевода.
Начиная с версии 4.yz мы обновили файлы ресурсов. По причинам производительности мы теперь используем PHP вместо JSON в качестве формата. Это означает, что люди, которые хотят использовать 4.yz и использовали 3.yz ранее, должны обновить свои файлы JSON до PHP. Чтобы обновить файлы ресурсов, вы должны снова создать языковой профиль. Файлы JSON тогда больше не нужны.
Вы можете удалить ненужные файлы JSON под Linux со следующей командой.
rm resources/ * / * .jsonЧтобы правильно обнаружить язык, длина входного текста должна быть как минимум некоторых предложений.
use LanguageDetection Language ;
$ ld = new Language ;
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> close ();Результат:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151,
"nb" => 0.48849462365591,
"nn" => 0.48741935483871,
"fy" => 0.47822580645161,
"dk" => 0.47172043010753,
"sv" => 0.46408602150538,
"bi" => 0.46021505376344,
"de" => 0.45903225806452,
[...]
)
__construct(array $result = [], string $dirname = '')Вы можете передать множество языков конструктору. Сравнить желаемое предложение только с данными языками. Это может значительно повысить производительность. Другой параметр является необязательным, и имя каталога, где расположены файлы переводов.
$ ld = new Language ([ ' de ' , ' en ' , ' nl ' ]);
// Compares the sentence only with "de", "en" and "nl" language models.
$ ld -> detect ( ' Das ist ein Test ' );whitelist(string ...$whitelist)Обеспечить белый список. Возвращает список языков, которые требуются.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> whitelist ( ' de ' , ' nn ' , ' nl ' , ' af ' )-> close ();Результат:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"nn" => 0.48741935483871,
"de" => 0.45903225806452
)
blacklist(string ...$blacklist)Обеспечить черный список. Удаляет данные языки из результата.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> blacklist ( ' dk ' , ' nb ' , ' de ' )-> close ();Результат:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151,
"nn" => 0.48741935483871,
"fy" => 0.47822580645161,
"sv" => 0.46408602150538,
"bi" => 0.46021505376344,
[...]
)
bestResults()Возвращает лучшие результаты.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> bestResults ()-> close ();Результат:
Array
(
"nl" => 0.66193548387097
)
limit(int $offset, int $length = null)Вы можете указать количество записей для возврата. Например, следующий код вернет три лучших записей.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> limit ( 0 , 3 )-> close ();Результат:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151
)
close()Возвращает результат в качестве массива.
$ ld -> detect ( ' This is an example! ' )-> close ();Результат:
Array
(
"en" => 0.5889400921659,
"gd" => 0.55691244239631,
"ga" => 0.55376344086022,
"et" => 0.48294930875576,
"af" => 0.48218125960061,
[...]
)
setTokenizer(TokenizerInterface $tokenizer)Сценарий использует токенизатор для получения всех слов в предложении. Вы можете определить свой собственный токенизатор, например, с числами.
$ ld -> setTokenizer ( new class implements TokenizerInterface
{
public function tokenize ( string $ str ): array
{
return preg_split ( ' /[^a-z0-9]/u ' , $ str , - 1 , PREG_SPLIT_NO_EMPTY );
}
});Это вернет только символы из алфавита в нижнем регистре и чисел от 0 до 9.
__toString() Возвращает верхнюю въезд результата. Обратите внимание на echo в начале.
echo $ ld -> detect ( ' Das ist ein Test. ' );Результат:
de
jsonSerialize()Сериализовали данные на JSON.
$ object = $ ld -> detect ( ' Tere tulemast tagasi! Nägemist! ' );
json_encode ( $ object , JSON_PRETTY_PRINT );Результат:
{
"et": 0.5224748810153358,
"ch": 0.45817028027498674,
"bi": 0.4452670544685352,
"fi": 0.440983606557377,
"lt": 0.4382866208355367,
[...]
}
Вы также можете объединить методы друг с другом. В следующем примере будут удалены все записи, указанные в черном списке, и возвращает только четыре лучших записей.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> blacklist ( ' af ' , ' dk ' , ' sv ' )-> limit ( 0 , 4 )-> close ();Результат:
Array
(
"nl" => 0.66193548387097
"br" => 0.49634408602151
"nb" => 0.48849462365591
"nn" => 0.48741935483871
)
Вы также можете получить доступ к объекту напрямую как массив.
$ object = $ ld -> detect (Das ist ein Test');
echo $ object [ ' de ' ];
echo $ object [ ' en ' ];
echo $ object [ ' xy ' ]; // does not existsРезультат:
0.6623339658444
0.56859582542694
NULL
Библиотека в настоящее время поддерживает 110 языков. Чтобы получить обзор всех поддерживаемых языков, пожалуйста, посмотрите здесь.
Библиотека является обучением, что означает, что вы можете изменить, удалять и добавлять в нее свои языковые файлы. Если ваш язык не поддерживается, не стесняйтесь добавлять свои языковые файлы. Для этого создайте новый каталог в resources и добавьте в него свой тренировочный текст.
Примечание. Обучающий текст должен быть файлом .txt .
|- resources
|- ham
|- ham.txt
|- spam
|- spam.txt
Как вы можете видеть, мы также можем использовать его для обнаружения спама или ветчины.
Когда вы храните свои файлы перевода вне resources , вы должны указать путь.
$ t -> learn ( ' YOUR_PATH_HERE ' );Всякий раз, когда вы меняете один из файлов перевода, вы должны сначала сгенерировать языковой профиль для него. Это может занять несколько секунд.
use LanguageDetection Trainer ;
$ t = new Trainer ();
$ t -> learn ();Удалите эти несколько строк после исполнения, и теперь мы можем классифицировать тексты по их языку с помощью нашего собственного учебного текста.
Чтобы улучшить фазу обнаружения, вы должны использовать больше N-граммов. Но будьте осторожны, это замедлит сценарий. Я понял, что этап обнаружения намного лучше, когда вы используете около 9 000 н-граммов (по умолчанию 310). Чтобы сделать это, посмотрите на код прямо ниже:
$ t = new Trainer ();
$ t -> setMaxNgrams ( 9000 );
$ t -> learn ();Сначала вы должны тренировать это. Теперь вы можете классифицировать тексты, как ранее, но вы должны указать, сколько N-граммов вы хотите использовать.
$ ld = new Language ();
$ ld -> setMaxNgrams ( 9000 );
// "grille pain" is french and means "toaster" in english
var_dump ( $ ld -> detect ( ' grille pain ' )-> bestResults ());Результат:
class LanguageDetectionLanguageResult#5 (1) {
private $result =>
array(2) {
'fr' =>
double(0.91307037037037)
'en' =>
double(0.90623333333333)
}
}
Нет, это не так. Класс тренеров будет использовать только лучшие 310 N-граммы языка. Если вы не измените этот номер и не добавите больше языковых файлов, это не повлияет на производительность. Только создание N-граммов медленнее. Однако создание N-граммов должно быть сделано только один раз. На этап обнаружения влияет только тогда, когда вы пытаетесь обнаружить большие куски текстов.
Резюме : фаза обучения будет медленнее, но этап обнаружения остается прежним.
Не стесняйтесь вносить свой вклад. Любая помощь приветствуется.
Эти проекты лицензированы в соответствии с условиями лицензии MIT.