Text_LanguageDetect库可快速识别文本主要语言,基于n-gram统计模型,需手动引入、依赖mbstring扩展;支持设置分析粒度、n-gram数量及置信阈值,但已停止维护,新项目建议改用ext-intl、fasttext或franc等现代方案。

PHP 中使用 Text_LanguageDetect 库可以快速识别一段文本最可能使用的自然语言(如中文、英文、日文等)。这个库基于 n-gram 统计模型,轻量、无需外部依赖,适合简单场景下的语言检测。
安装 Text_LanguageDetect
该库已停止维护,不支持 Composer 官方包管理器直接安装,需手动引入:
- 前往其官方源码页:https://www.php.cn/link/9aa9725e0bbca8966afaa2c556eed96f
- 下载 ZIP 或克隆仓库,提取
Text/目录(含LanguageDetect.php和data/语言模型文件) - 将整个
Text/文件夹放入项目目录(例如vendor/Text/) - 确保 PHP 启用了
mbstring扩展(用于多字节字符串处理)
基本用法示例
加载类并调用检测方法即可:
<?php
require_once 'vendor/Text/LanguageDetect.php';
$detector = new Text_LanguageDetect();
$detector->setNameMode(1); // 可选:返回语言名称而非 ISO 码(默认为 0)
$text = "Hello world, 你好世界,こんにちは世界";
try {
$result = $detector->detect($text);
// 返回类似:['english' => 42, 'chinese' => 38, 'japanese' => 35]
arsort($result);
$topLang = key($result); // 'english'
echo "检测到主要语言:$topLang\n";
} catch (Exception $e) {
echo "检测失败:" . $e->getMessage();
}
?>
关键配置与注意事项
该库行为可通过几个方法调整:
立即学习“PHP免费学习笔记(深入)”;
-
$detector->setLevel(2):设置分析粒度(1=单词级,2=字符级,默认 1;中文等无空格语言建议用 2) -
$detector->setMaxNgrams(100):限制参与统计的 n-gram 数量(影响精度和速度) -
$detector->setUnknown(0.1):设定“未知语言”的置信阈值(低于此值则不返回该语言) - 输入文本应尽量≥50 字符,过短(如单个词)结果不可靠
- 不支持混合语言精确分离,仅返回整体倾向性排序
替代建议(现代项目推荐)
由于 Text_LanguageDetect 已多年未更新,且对 UTF-8 处理较原始,新项目可考虑:
-
PHP 扩展
ext-intl的Locale::lookup()(需配合语言标签,非自动检测) -
调用轻量 Python 服务(如
fasttext或langdetect),通过 HTTP 或 CLI 调用 -
JavaScript 方案 + AJAX(如
franc)在前端预检,减少后端压力



















