本文目录导读:

在 PHP 项目中实现情感分析(判断文本正负倾向),通常有以下几种主流方法,按复杂度从低到高排列:
基于词典的情感分析(最常用,适合中小项目)
原理
使用预先构建的正负面情感词典,对文本分词后计算情感得分。
步骤
-
准备情感词典
- 正面词:开心、喜欢、优秀、完美
- 负面词:讨厌、差劲、糟糕、失望
- 可包含程度副词(非常、稍微)和否定词(不、没)
-
实现流程
function sentimentAnalysis($text, $posDict, $negDict) { // 简单分词(可用explode或中文分词库) $words = preg_split('/[\s,,。!?!?]+/u', $text); $score = 0; foreach ($words as $word) { if (in_array($word, $posDict)) $score++; if (in_array($word, $negDict)) $score--; } // 加入否定词反转逻辑 // "不" + 正面词 → 负面 if ($score > 0) return 'positive'; if ($score < 0) return 'negative'; return 'neutral'; }
优缺点
- ✅ 简单快速,无需外部API
- ❌ 对复杂语料(反讽、上下文)准确率低
- 推荐中文词典:BosonNLP情感词典、大连理工大学情感词汇本体库
调用第三方API(高精度,适合生产环境)
推荐服务
- 百度AI情感分析(免费额度充足)
- 腾讯云自然语言处理
- 阿里云NLP
- Google Cloud Natural Language
PHP调用示例(百度AI)
require_once 'AipNlp.php'; // 百度SDK $client = new AipNlp(APP_ID, API_KEY, SECRET_KEY); $result = $client->sentimentClassify($text); $sentiment = $result['items'][0]['sentiment']; // 0负面 1中性 2正面 $confidence = $result['items'][0]['confidence'];
优缺点
- ✅ 准确度高,支持上下文理解
- ❌ 有调用次数限制/费用,依赖网络
朴素贝叶斯分类器(需要训练数据)
原理
基于机器学习,用已标注的正负面语料训练模型。
PHP实现
use Phpml\Classification\NaiveBayes;
use Phpml\FeatureExtraction\TfIdfTransformer;
// 1. 准备训练数据
$samples = [
'这个产品很棒',
'质量太差了',
'非常满意',
'完全不能用'
];
$labels = ['pos', 'neg', 'pos', 'neg'];
// 2. 向量化文本
$tokenizer = new WordTokenizer();
$samples = array_map(function($text) use ($tokenizer) {
return $tokenizer->tokenize($text);
}, $samples);
// 3. 训练模型
$classifier = new NaiveBayes();
$classifier->train($samples, $labels);
// 4. 预测
$newText = '不算太好但也不差';
$tokenized = $tokenizer->tokenize($newText);
echo $classifier->predict($tokenized); // 输出 pos/neg
优缺点
- ✅ 可针对特定领域定制
- ❌ 需要大量标注数据,训练过程有学习成本
使用PHP-ML库(集成多种算法)
安装
composer require php-ai/php-ml
示例(支持向量机SVM)
use Phpml\Classification\SVC; use Phpml\SupportVectorMachine\Kernel; $model = new SVC(Kernel::RBF, 1.0, 3); $model->train($trainSamples, $trainLabels); $predicted = $model->predict($textVector);
实际项目建议
| 场景 | 推荐方案 |
|---|---|
| 简单Demo / 少量文本 | 词典法(10分钟搞定) |
| 商业应用(准确率优先) | 第三方API(百度/腾讯) |
| 特殊领域(如金融评论) | 自训练朴素贝叶斯 |
中文处理关键点
- 需要结合分词工具:
scws扩展、jieba-php、phpanalysis - 处理否定词:
不漂亮、不是很满意 - 处理程度副词:
极其讨厌(权重5)、有点失望(权重5)
如果有具体的技术实现细节(如分词库集成、词典文件格式)需要帮助,可以进一步沟通。