nlp — обнаружение языкового текста в PHP без огромных зависимостей или сторонних сервисов

Ищем пакет композитора, который без огромной зависимости (без базы знаний более 3МБ) и сторонних сервисов сможет определить язык текста.

Текст очень часто состоит из нескольких слов.

Например, я бы хотел, чтобы этот пакет с высокой точностью идентифицировал языки следующих фрагментов:

  1. текст на английском

  2. Текст на русском

  3. Текст на русском и несколько слов на английском

  4. 城 城 友 奈 は 勇者 で る 鷲 — 尾 尾 章 美 の 章 — 第 2 章 「た ま し」 」

  5. விவேகம்

  6. El aeropuerto se соображения

  7. Wunderbar Steht Er Da Silberhaar.

  8. Ein weiß glänzendes

  9. si les faits n’obéissent pas

  10. 4 8 15 16 23 42

В основном заинтересованы в качественном определении для следующих языков: английский, русский, Немецкий, Испанский, голландский, итальянский, Французский, китайский язык, японский язык, Норвежский, датский, индийский.

Большим плюсом будет, если этот пакет не устарел или не заброшен.

PS: важно чтобы они не занимали много памяти при запуске.

1

Решение

Вот список библиотек, которые могут определять язык, о которых я знаю:

Ни один из них не требует использования сторонних сервисов, но производительность большинства решений в значительной степени зависит от длины входного теста — YMMV … Но большинство из них может работать на десятках языков, так что вы должны быть охвачены Теоретически, а если нет, большинство из них позволяют вам тренировать свою собственную модель.

0

Другие решения

Я тестирую PHP-пакет Text_LanguageDetect с моими примерами и некоторыми другими тестами, и я разочарован результатами …

require_once('libs/languagedetect/Text/LanguageDetect.php');
$l = new Text_LanguageDetect();
$l->setNameMode(2);

1.

$l->detect('text on english', 4); // BAD
=> [
"nl" => 0.244,
"fi" => 0.23111111111111,
"sq" => 0.21933333333333,
"et" => 0.21333333333333,
]

2.

$l->detect('Текст на русском', 4); // OK
=> [
"ru" => 0.36770833333333,
"sr" => 0.30083333333333,
"bg" => 0.29145833333333,
"uk" => 0.22354166666667,
]

3.

$l->detect('Текст на русском и some words on english', 4); // ???
=> [
"ru" => 0.17625,
"sr" => 0.14675,
"" => 0.14608333333333,
"bg" => 0.14341666666667,
]

4.

$l->detect('結城友奈は勇者である -鷲尾須美の章- 第2章 「たましい」', 4); // BAD
=> []

5.

$l->detect('விவேகம்', 4);  // BAD
=> []

6.

$l->detect('El aeropuerto se considera', 4); // OK
=> [
"es" => 0.49410256410256,
"pt" => 0.32576923076923,
"it" => 0.30230769230769,
"fr" => 0.25333333333333,
]

7.

$l->detect('Wunderbar steht er da im Silberhaar.', 4); // OK
=> [
"de" => 0.39235294117647,
"da" => 0.34078431372549,
"sv" => 0.31029411764706,
"no" => 0.30147058823529,
]

8.

$l->detect('Ein weiß glänzendes', 4);  // OK
=> [
"de" => 0.43947368421053,
"nl" => 0.2259649122807,
"cy" => 0.17456140350877,
"fr" => 0.17070175438596,
]

9.

$l->detect('si les faits n’obéissent pas', 4);  // OK
=> [
"fr" => 0.37595238095238,
"pt" => 0.23869047619048,
"la" => 0.22880952380952,
"de" => 0.20511904761905,
]

10.

$l->detect('4 8 15 16 23 42', 4); // OK
=> []

11.

$l->detect('accuracy identified', 4); // BAD
=> [
"la" => 0.19368421052632,
"no" => 0.14491228070175,
"es" => 0.13491228070175,
"ro" => 0.13157894736842,
]

12.

$l->detect('big text', 4); // BAD
=> [
"is" => 0.32708333333333,
"tl" => 0.21208333333333,
"nl" => 0.205,
"vi" => 0.20458333333333,
]

13.

$l->detect('very long text is ok', 4); // OK
=> [
"en" => 0.29383333333333,
"nl" => 0.26883333333333,
"tl" => 0.20583333333333,
"hu" => 0.182,
]

14.

$l->detect('symbols', 4); // BAD
=> [
"de" => 0.068095238095238,
"nl" => 0.049523809523809,
"sw" => 0.044285714285714,
"pl" => 0.040952380952381,
]

15.

$l->detect('language', 4); // BAD
=> [
"da" => 0.34875,
"tl" => 0.33458333333333,
"" => 0.33416666666667,
"id" => 0.28291666666667,
]

Я действительно очень разочарован тем, что такой старый и, казалось бы, проверенный временем пакет не работает должным образом.

У меня есть много проверок с короткими словами, которые должны определить, что они на английском (или, по крайней мере, дать возможность, что они на нем). Потому что вы встретите персонажей и других специальных персонажей.

Очень удобно, что пакет отображает список языков — я мог проверить на 4 языка, как в примере. Но я сомневаюсь, что будут ложные срабатывания. Так что я не смею им пользоваться.

Посоветуйте пожалуйста другое решение на PHP. Было бы неправильно запускать из php другой процесс для проверки языка.

0

По вопросам рекламы [email protected]