在文本搜索、自然語言處理、智能推薦等場景中,「分詞」 是一個基礎但至關重要的技術點。無論是用數據庫做模糊查詢,還是構建搜索引擎,分詞都是提高效率和準確度的核心手段。
🔍 一、什么是分詞?
分詞(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