浅谈「分词」:原理 + 方案对比 + 最佳实践

在文本搜索、自然语言处理、智能推荐等场景中,「分词」 是一个基础但至关重要的技术点。无论是用数据库做模糊查询,还是构建搜索引擎,分词都是提高效率和准确度的核心手段。

一、什么是分词?

分词(Tokenization) 是指将一段连续的文本切分为有意义的「词语」或「短语」的过程。
它是 NLP(自然语言处理)和全文搜索的第一步。

举个例子:

原始文本:

“我爱自然语言处理”

分词结果(中文)

我 / 爱 / 自然语言 / 处理

英文文本通常以空格分词,而中文、日文、韩文等语言需要使用特定算法来切割词边界。


️ 二、为什么分词很重要?

在以下场景中都需要高质量的分词:

场景 分词作用
✅ 全文搜索 提升检索准确率,支持模糊查询
✅ 推荐系统 理解用户搜索意图或商品名称
✅ 智能问答 理解提问背后的关键词
✅ 文本分类 提取核心词汇构建向量表示
✅ 数据分析 对用户输入进行关键词提取

三、常见分词方案对比

方案 适用语言 是否支持中文 特点 使用场景
MySQL FULLTEXT 英文 ❌ 不支持中文 内置分词器基于空格、标点 英文搜索
MySQL FULLTEXT + ngram 所有语言 ✅ 支持中文 固定长度 n-gram 切词,能识别 N3-2016 中文、混合语言搜索
Elasticsearch + ik_smart / ik_max_word 所有语言 ✅ 强大中文支持 支持最细粒度 & 智能分词 搜索引擎
Lucene / Solr 所有语言 ✅ 强大中文支持 高级分词、多语言支持 企业级搜索系统
Jieba 分词(Python) 中文 精度高,支持自定义词典 NLP 开发、爬虫分析
HanLP、THULAC、NLPIR 中文 学术/工业级分词工具 AI/NLP

四、MySQL 中的分词方案

1. LIKE 查询(最基础)

SELECT * FROM articles WHERE title LIKE '%分词%';

✅ 简单
❌ 性能差、不支持分词、不适合大数据量


2. FULLTEXT(默认分词器)

ALTER TABLE articles ADD FULLTEXT(title);
SELECT * FROM articles WHERE MATCH(title) AGAINST('token' IN BOOLEAN MODE);

✅ 支持全文索引,适合英文
❌ 不支持中文、符号(如 “N3-2016”)


3. FULLTEXT + ngram 分词器

ALTER TABLE articles ADD FULLTEXT(title) WITH PARSER ngram;

✅ 支持中文、符号和短词搜索
✅ 轻量级,适合小中型系统
⚠️ 需 MySQL 5.7.6+(推荐 8.0+)


五、如何选择分词方案?

应用场景 推荐方案
小型项目 / 中文搜索 MySQL + ngram
高性能全文搜索 Elasticsearch + IK 分词器
数据分析 / 自然语言处理 Jieba、HanLP
多语言搜索服务 Lucene / Solr
日志搜索、文档系统 OpenSearch / ES

✅ 六、分词实践建议(Best Practices)

1. 明确使用目的

是为了搜索?还是为了 NLP?目标不同,分词策略也不同。

2. 中文必须用支持分词的工具

MySQL 默认不支持中文分词,必须使用 ngram 或换用专业搜索引擎。

3. 统一处理符号、大小写

对输入内容进行规范化(去除符号、统一大小写)可提升命中率。

4. 结合业务词库

例如:“N3-2016”、“语法7” 这类业务词汇可加入自定义词典(如在 Jieba、HanLP 中)。

5. 分词 + 索引结合使用

仅分词不够,必须结合索引使用才能实现高性能查询。


✍️ 七、小结

维度 MySQL ngram Elasticsearch Jieba 分词
中文支持
安装复杂度 简单 中等 简单
精度 一般
可扩展性
搜索效率 极高

对于大多数中小项目,如果你不想引入 ES,MySQL + ngram 是轻量又高效的选择。

延伸阅读

  • MySQL 官方文档:ngram 分词器

  • Elasticsearch 中文分词:IK Analyzer

  • Jieba 中文分词 GitHub

你可能感兴趣的:(其他,数据,搜索)