应使用 wamania/php-stemmer 库解决多语言词干提取问题,它基于 snowball 算法,支持 catalan、danish、english 等 14 种语言,仅需按 php 版本选择对应 composer 命令安装即可。

Composer 安装 php-stemmer 失败或找不到包
官方 php-stemmer 库(如 ruflin/php-stemmer)早已停止维护,Packagist 上无活跃 PHP 原生多语言词干器。直接运行 composer require ruflin/php-stemmer 会报 Package not found 或安装空包——这不是你配置错,是它根本不存在于当前 Composer 生态。
实际可用的替代方案只有两个方向:
-
ext-stem扩展:C 扩展,支持英语、德语、西班牙语等,需编译安装,不跨平台 -
phpmorphy+ 词典:纯 PHP 实现,支持俄语、德语、英语等,依赖外部词典文件,Composer 可装但需手动加载
别浪费时间搜 “php-stemmer composer”,搜 phpmorphy 或 ext-stem 才对路。
用 phpmorphy 实现多语言词干提取(含中文?不行)
phpmorphy 是目前最接近“开箱即用”的纯 PHP 多语言词干库,但它**不支持中文**——它基于形态学分析,适用于屈折语(如俄语变格、德语动词变位),而中文没有词形变化,词干提取本质是分词+停用词过滤,得换工具(如 jieba-php 或 scws)。
安装与基础用法:
composer require zordius/phpmorphy
然后下载对应语言词典(例如俄语):
- 从
https://github.com/dim007/phpmorphy/releases下载rus.tar.gz - 解压到项目目录,比如
./dicts/rus/ - 代码中指定路径:
$morph = new PhpMorphy('rus', './dicts/rus/');
注意:phpmorphy 的 getBaseForm 返回的是可能的多个词元(base forms),不是单一词干,需自行选最短或最常见项。
ext-stem 扩展的编译与语言限制
ext-stem 是 libstemmer 的 PHP 封装,支持英语、法语、葡萄牙语等 15+ 种语言,但**必须编译安装**,不能用 Composer 直接装二进制。
Linux/macOS 编译步骤:
- 克隆源码:
git clone https://github.com/michelf/php-stemmer - 进入目录执行:
phpize && ./configure && make && sudo make install - 在
php.ini加一行:extension=stem.so
启用后函数为 stem_word(<code>word, lang),例如:stem_word('running', 'en') → 'run'。但注意:lang 参数只接受 ISO 639-1 两字母码('en'、'de'),不支持 'eng' 或 'english',传错直接返回原词。
为什么不要自己写词干逻辑?
规则型词干器(如 Porter 算法)只对英语有效;俄语、阿拉伯语等需要查表或统计模型;而像土耳其语这种高度黏着语,连 ext-stem 都没覆盖。硬写规则极易漏 case,比如英语中 'caresses' → 'caress' 要先去 s 再去 es,顺序错了就崩。
真正要支持 3 种以上语言,优先选 phpmorphy(有词典)或调用外部服务(如 spaCy via HTTP、Snowball server)。本地部署时,词典路径、编码(phpmorphy 要求 UTF-8)、PHP 版本兼容性(phpmorphy 不支持 PHP 8.2+ 的某些反射变更)才是卡点,不是语法。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











