寻找一个作曲家包,它没有巨大的依赖(没有超过3MB的知识库)和第三方服务将能够确定文本的语言。
文本通常由几个单词组成。
例如,我希望看到这个包以高精度识别以下片段的语言:
-
英文文本
-
Текст на русском
-
Текст на русском и 一些英语单词
-
結城友奈は勇者である -鷲尾須美の章- 第2章 「たましい」
-
விவேகம்
-
El aeropuerto se considera
-
Wunderbar steht er da im Silberhaar.
-
Ein weiß glänzendes
-
Si les faits n'obéissent pas
-
4 8 15 16 23 42
主要对以下语言的定性测定感兴趣:英语,俄语,德语,西班牙语,荷兰语,意大利语,法语,中文,日语,挪威语,丹麦语,印度语。
如果这个包没有过时或被放弃,那么一大好处将是。
PS:重要的是它们在运行时不要占用太多内存。
我用我的示例和其他一些测试测试了 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,
]
阿拉伯数字。
$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 运行不同的进程来检查语言是不正确的。
以下是我知道的可以进行语言检测的库列表:
- langid.py(蟒蛇)
- 语言检测(Java)
- 铬语言检测器 (C++)
- 语言检测器(Java)
- Apache Tika's Language Detector (Java)
这些都不需要使用第三方服务,但大多数解决方案的性能在很大程度上取决于输入测试 - YMMV...但是他们中的大多数可以做几十种语言,所以理论上你应该被覆盖 - 如果没有,大多数允许你训练自己的模型。