php-nlp-tools 已无法通过 composer 直接安装,因其 github 仓库归档、packagist 包移除;推荐改用 spatie/nlptools 或手动组合 symfony/string 与 porterstemmer/porterstemmer 实现轻量替代。

确认 PHP-Nlp-Tools 是否仍可直接 Composer 安装
不能。该库早在 2018 年就已停止维护,其 GitHub 仓库 php-nlp-tools 已归档,Packagist 上的包 mltshp/php-nlp-tools 也已移除。直接运行 composer require mltshp/php-nlp-tools 会报错:Could not find package mltshp/php-nlp-tools 或 Package "mltshp/php-nlp-tools" listed for update is not installed。
如果你在旧项目里看到它还能用,大概率是本地 vendor/ 缓存未清、或用了私有镜像/离线包源——但这不可复现,也不安全。
替代方案:改用 actively maintained NLP 库
推荐两个轻量、无依赖、专注基础 NLP 任务的现代替代品:
-
ext-sodium+ext-intl已启用的前提下,spatie/nlptools提供分词(tokenize)、词干化(stem)、停用词过滤,API 简洁,PHP 8.0+ 兼容 - 若需更细粒度控制(如正则分句、Unicode 感知切分),
nikic/php-parser不适用,但symfony/string+ 手写规则更可靠 —— 它不叫 NLP 库,但UnicodeString::split()和Slugify能覆盖 70% 的预处理需求
安装示例:
composer require spatie/nlptools
简单用法:
$tokenizer = new \Spatie\NlpTools\Tokenizer();
$tokens = $tokenizer->tokenize("Hello, world! How are you?"); // → ['Hello', 'world', 'How', 'are', 'you']
如果必须复现 php-nlp-tools 的老逻辑
它的核心功能其实只有三块:Tokenizer(空格+标点切分)、StopWordFilter(硬编码英文停用词表)、Stemmer(Porter Stemmer 纯 PHP 实现)。这些逻辑现在都能用几行代码重写,且更可控:
- 分词:用
preg_split('/[^\p{L}\p{N}]+/u', $text, -1, PREG_SPLIT_NO_EMPTY)比原库的preg_split('/\W+/', ...)更准(支持 Unicode 字母数字) - 停用词:把原库的
stopwords.txt内容转成数组,用array_diff($tokens, $stopwords)即可,无需类封装 - 词干:直接 require
porterstemmer/porterstemmer(独立小包,5KB,仍在维护)
这样组合后,代码更短、无废弃依赖、能跑在 PHP 8.3 上。
警惕 composer.lock 中残留的旧引用
即使你没主动 require 过 php-nlp-tools,某些老旧的 composer.lock 文件可能还锁着它(尤其从 Laravel 5.x 早期模板继承下来的项目)。运行 composer install 时若报 package not found,先检查 lock 文件里是否存在 "mltshp/php-nlp-tools" 条目 —— 有就手动删掉整段,再删 vendor/ 和 composer.lock,重新 composer install。
真正麻烦的不是“怎么装”,而是“为什么装不上还查不到原因”——很多人卡在这一步,反复试命令却忽略 lock 文件本身已是过期快照。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











