smalyshev / textcat
TextCat语言猜测工具的PHP端口,请参阅 http://odur.let.rug.nl/~vannoord/TextCat/。
Requires
- php: >=5.3.0
Requires (Dev)
README
/\_/\
( . . )
=\_v_/=
这是一个TextCat语言猜测工具的PHP端口。
请参阅原始的Perl版本http://odur.let.rug.nl/~vannoord/TextCat/,以及更新的Perl版本https://github.com/Trey314159/TextCat。
内容
该包包含分类器类本身以及两个工具——用于分类文本和生成ngram数据库。由于以这种方式提取ngram更容易,代码现在假设文本编码为UTF-8。此外,现在每个人都使用UTF-8,我本人也欢迎我们新的UTF-8编码的霸主。
分类器
分类器是脚本 catus.php
,可以运行为
echo "Bonjour tout le monde, ceci est un texte en français" | php catus.php -d LM
或
php catus.php -d LM -l "Bonjour tout le monde, ceci est un texte en français"
输出将是语言列表,例如
fr OR ro
请注意,提供的语言模型集合中包括一个Oriya(ଓଡ଼ିଆ)模型,其语言代码为or
,因此可能会出现如or OR sco OR ro OR nl
的结果。
生成器
要从一组文本生成语言模型数据库,请使用脚本 felis.php
。它可以运行为
php felis.php INPUTDIR OUTPUTDIR
它将从 INPUTDIR
读取文本并在 OUTPUTDIR
中生成ngram文件。假设 INPUTDIR
中的文件具有如LANGUAGE.txt
的名称,例如 english.txt
,german.txt
,klingon.txt
等。
如果您正在处理大量的语料库(例如,数百万字符),您应该将 TextCat.php
中的 $minFreq
设置为一个合理的较小值,如 10
,以在排序之前剪掉非常罕见的ngram的非常长的尾部。这减少了生成语言模型所需的CPU和内存需求。在评估文本时,除非您的输入文本相当大,否则应将 $minFreq
设置回 0
。
模型
该包在 LM
目录中包含默认语言模型数据库和在 LM-query
目录中的基于查询的语言模型数据库。然而,模型性能将很大程度上取决于它将应用到的文本语料库以及特定的修改——例如,大小写、变音符号等。目前,库不会以任何方式修改或规范化训练文本或分类文本,因此对于特定的应用程序,可能更适合使用自定义语言模型。
模型名称使用维基百科语言代码,这通常但并不保证与ISO 639语言代码相同。
在检测语言时,限制使用的语言模型数量通常可以获得更好的结果,特别是对于非常短的文章。例如,如果你的文本不太可能是爱尔兰盖尔语,仅包含爱尔兰盖尔语语言模型(ga
)只会增加误识别的可能性。这对于密切相关语言(例如,罗曼语族,或英语/en
和苏格兰语/sco
)尤其如此。
限制使用的语言模型数量通常也会提高性能。你可以将你希望的语言模型复制到一个新的目录中(并使用-d
与catus.php
),或者在命令行上指定你希望的语言(使用-c
与catus.php
)。
你还可以将多个目录中的模型组合起来(例如,使用基于查询的模型,并回退到基于Wiki-Text的模型),使用逗号分隔的目录列表(使用-d
与catus.php
)。目录将按顺序扫描,并且只会使用找到的第一个具有特定名称的模型。
Wiki-Text模型
LM
中的70个语言模型基于从随机选择的该语言维基百科文章中提取的文本。选择的语言基于多个标准,包括该语言的母语使用者数量、该语言的各种维基项目查询数量(不仅仅是维基百科)、原始TextCat支持的语言列表以及该语言维基百科的大小(即从中抽取训练语料库的集合的大小)。
每个语言的训练语料库最初由约270万到280万个字符组成,不包括标记。然后对这些文本进行了轻微的预处理。采取的预处理步骤包括:删除HTML标签。对行进行排序并使用uniq
(这样维基百科的个性特点——如“参考文献”、“也见”和“本文是存根”——不会过度代表,并且随机选择多次的文章将减少到一篇副本)。对于拉丁字符集的语料库,删除不包含拉丁字符的行。对于非拉丁字符集的语料库,删除只包含拉丁字符、数字和标点符号的行。这种基于字符集的过滤从各种语料库中删除了从几十到几千行。对于多字符集的语料库(例如,塞尔维亚-克罗地亚语/sh
、塞尔维亚/sr
、土库曼语/tk
),没有进行基于字符集的过滤。训练语料库的最终大小从约180万到280万个字符。
这些模型尚未经过彻底测试,并按原样提供。我们可能会在未来添加新模型或删除性能不佳的模型。
这些模型有10,000个n-gram。用于语言识别的最佳n-gram数量取决于应用程序。对于较大的文本(例如,每个样本包含数百个单词),可能需要使用显著较小的n-gram集。你可以通过更改TextCat.php
或felis.php
中的$maxNgrams
或使用-m
与catus.php
来设置要使用的数量。
Wiki查询模型。
LM-query
中的30个语言模型基于维基百科中的查询数据,这些数据不如文本正式(例如,使用变音符号的语言中使用的变音符号较少),并且与通用文本具有不同的单词分布。最初考虑的语言集基于特定一周内所有维基项目的查询数量。该文本已进行预处理,并根据与上面Wiki-Text模型中使用的类似过程删除了训练集中的许多查询。
一般来说,查询数据比Wiki-Text更混乱——包括垃圾文本和意外语言中的查询——但对于查询字符串的整体性能,至少对于英语维基百科来说,表现更好。
提供的最终模型集合部分基于它们在英语维基百科查询中的表现(TextCat用于语言ID的第一个目标)。更多详情请参阅我们的[初始报告](https://www.mediawiki.org/wiki/User:TJones_(WMF)/Notes/ 使用TextCat进行语言检测)。根据额外的性能评估,未来还将添加更多语言。
这些模型有10,000个n-gram。用于语言识别的最佳n-gram数量取决于应用。对于较大的文本(例如,每个样本包含数百个单词),可能需要显著较小的n-gram集合。对于在英语维基百科字符串上看到的短查询,最佳模型大小为3000到9000个n-gram,具体取决于其他参数设置。您可以通过更改$maxNgrams
在TextCat.php
或felis.php
中,或者使用-m
与catus.php
一起使用来设置要使用的数量。