四、数据库设计
sql
文章表
CREATE TABLE articles (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
分类表
CREATE TABLE categories (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL UNIQUE
);
关键词-分类映射表
CREATE TABLE keyword_category (
keyword VARCHAR(50) NOT NULL,
category_id INT NOT NULL,
weight INT DEFAULT 1, 权重(可选)
FOREIGN KEY (category_id) REFERENCES categories(id)
);
文章-分类关联表(多对多)
CREATE TABLE article_category (
article_id INT NOT NULL,
category_id INT NOT NULL,
PRIMARY KEY (article_id, category_id),
FOREIGN KEY (article_id) REFERENCES articles(id),
FOREIGN KEY (category_id) REFERENCES categories(id)
);
五、PHP实现思路
1、关键词提取(示例代码)
php
function extractKeywords($content, $keywords) {
// 简单匹配预定义关键词(可替换为NLP库)
$matches = [];
foreach ($keywords as $keyword) {
if (stripos($content, $keyword) !== false) {
$matches[] = $keyword;
}
}
return array_unique($matches);
}
// 示例调用
$keywords = ['PHP', 'JavaScript', 'Python'];
$content = This is a PHP tutorial about Laravel framework.;
$extracted = extractKeywords($content, $keywords); // 输出: ['PHP']
2、自动归档逻辑
php
function autoArchive($articleId, $keywords) {
global $pdo; // 假设已建立PDO连接
// 查询所有匹配的分类
$stmt = $pdo-prepare(
SELECT category_id
FROM keyword_category
WHERE keyword IN (:keywords)
);
$stmt-execute([':keywords' = implode(',', $keywords)]);
$categories = $stmt-fetchAll(PDO::FETCH_COLUMN);
// 插入文章-分类关联
foreach ($categories as $categoryId) {
$pdo-exec(
INSERT INTO article_category (article_id, category_id)
VALUES ($articleId, $categoryId)
ON DUPLICATE KEY UPDATE article_id=article_id
);
}
}
3、分类管理(CRUD示例)
php
// 添加新分类
function addCategory($name) {
global $pdo;
$stmt = $pdo-prepare(INSERT INTO categories (name) VALUES (?));
$stmt-execute([$name]);
return $pdo-lastInsertId();
}
// 绑定关键词到分类
function bindKeywordToCategory($keyword, $categoryId, $weight = 1) {
global $pdo;
$stmt = $pdo-prepare(
INSERT INTO keyword_category (keyword, category_id, weight)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE weight=?
);
$stmt-execute([$keyword, $categoryId, $weight, $weight]);
}