1

寻找一个 composer 包,它没有巨大的依赖(没有超过 3MB 的知识库)和第三方服务将能够确定文本的语言。

文本通常由几个单词组成。

例如,我希望看到这个包以高精度识别以下片段的语言:

  1. 英文文本

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

  3. Текст на русском и 一些英语单词

  4. 结城友奈は勇者である -鹰尾须美の章-第2章「たましい」</p>

  5. விவேகம்</p>

  6. El aeropuerto se 考虑

  7. Wunderbar steht er da im Silberhaar。

  8. Ein weiß glänzendes

  9. si les faits n'obéissent pas

  10. 4 8 15 16 23 42

主要对以下语言的定性测定感兴趣:英语俄语德语、西班牙语、荷兰语、意大利语、法语汉语日语、挪威语、丹麦语、印度语

如果这个包没有过时或被遗弃,那将是一个很大的优势。

PS:重要的是它们在运行时不会占用太多内存。

4

2 回答 2

1

我用我的示例和其他一些测试测试了 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 运行一个不同的进程来检查语言是不正确的。

于 2017-04-14T13:38:53.960 回答
0

这是我知道的可以进行语言检测的库列表:

这些都不需要使用第三方服务,但大多数解决方案的性能在很大程度上取决于输入测试的长度 - YMMV ......但他们中的大多数可以做几十种语言,所以你应该被覆盖,理论上 - 如果不是,大多数都允许您训练自己的模型。

于 2017-04-14T12:22:54.640 回答