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

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

🔍 一、什么是分词?

分词(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 ngramElasticsearchJieba 分词
中文支持
安装复杂度简单中等简单
精度一般
可扩展性
搜索效率极高

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

📚 延伸阅读

  • MySQL 官方文档:ngram 分词器

  • Elasticsearch 中文分词:IK Analyzer

  • Jieba 中文分词 GitHub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

transformers:打造的先进的自然语言处理

github地址:https://github.com/huggingface/transformers Transformers 提供了数以千计的预训练模型,支持 100 多种语言的文本分类、信息抽取、问答、摘要、翻译、文本生成。它的宗旨是让NLP 技术人易用。 Transformers 提供了便于快速下载和使用的API…

Spring Boot 集成 MongoDB 时自动创建的核心 Bean 的详细说明及表格总结

以下是 Spring Boot 集成 MongoDB 时自动创建的核心 Bean 的详细说明及表格总结: 核心 Bean 列表及详细说明 1. MongoClient 类型:com.mongodb.client.MongoClient作用: MongoDB 客户端核心接口,负责与 MongoDB 服务器建立连接、…

113. 在 Vue 3 中使用 OpenLayers 实现鼠标移动显示坐标信息

✨ 写在前面 在地图类项目开发中,一个常见需求就是:实时获取用户鼠标在地图上的经纬度坐标,并展示在地图上。 本文将通过一个简单的案例,手把手带大家在 Vue 3 项目中集成 OpenLayers 地图库,并实现以下功能&#xf…

docker配置redis容器时搭载哨兵节点的情况下配置文件docker-compose.yml示例

1.配置数据节点(主从节点) version: 3.7 services:master:image: redis:5.0.9container_name: redis-masterrestart: alwayscommand: redis-server --appendonly yesports:- 6379:6379slave1:image: redis:5.0.9container_name: redis-slave1restart: a…

C++建造者模式进化论

还在为 C 对象那 长得令人发指 的构造函数参数列表抓狂吗?🤯 是不是经常在 int hp, int mp, int strength, int faith... 这样的参数“连连看”中迷失自我,一不小心就把法力值传给了血量,或者力量值填到了信仰栏?&…

在Ubuntu内网环境中为Gogs配置HTTPS访问(通过Apache反向代理使用IP地址)

一、准备工作 确保已安装Gogs并运行在HTTP模式(默认端口3000) 确认服务器内网IP地址(如192.168.1.100) 二、安装Apache和必要模块 sudo apt update sudo apt install apache2 -y sudo a2enmod ssl proxy proxy_http rewrite headers 三、创建SSL证书 1. 创建证书存储目录…

数据中台、BI业务访谈(二):组织架构梳理的坑

这是数据中台、BI业务访谈系列的第二篇文章,在上一篇文章中,我重点介绍了在给企业的业务部门、高层管理做业务访谈之前我们要做好行业、业务知识的功课。做好这些功课之后,就到了实际的访谈环节了。 业务访谈关键点 那么在具体业务访谈的时…

spark集群,Stand alone,Hadoop集群有关启动问题

你的问题是因为 start-all.sh 是 Hadoop 的启动脚本(用于启动 HDFS 和 YARN),而不是 Spark 的启动脚本。而你已经通过 start-cluster.sh 启动了 Hadoop 相关服务(HDFS/YARN),再次执行 start-all.sh 会导致服…

Kotlin 通用请求接口设计:灵活处理多样化参数

在 Kotlin 中设计一个通用的 ControlParams 类来处理不同的控制参数,有几种常见的方法:方案1:使用密封类(Sealed Class) sealed class ControlParamsdata class LightControlParams(val brightness: Int,val color: S…

aspark 配置2

编写Hadoop集群启停脚本 1.建立新文件,编写脚本程序 在hadoop101中操作,在/root/bin下新建文件:myhadoop,输入如下内容: 2.分发执行权限 保存后退出,然后赋予脚本执行权限 [roothadoop101 ~]$ chmod x /r…

Webstorm 使用搜不到node_modules下的JS内容 TS项目按Ctrl无法跳转到函数实现

将node_modules标记为不排除,此时要把内存改大,不然webstorm中途建立索引时,会因为内存不足,导致索引中途停止,造成后续搜索不出来 更改使用内存设置 内存调为4096 若出现搜不出来js内容时,请直接重启下该项…

vue-element-plus-admin的安装

文档链接:开始 | vue-element-plus-admin 之前尝试按照官方文档来安装,运行npm run dev命令却不能正常打开访问浏览器,换一个方式 首先在目录下打开命令窗口 1、克隆项目 从 GitHub 获取代码 # clone 代码 git clone https://github.com…

【windows10】基于SSH反向隧道公网ip端口实现远程桌面

【windows10】基于SSH反向隧道公网ip端口实现远程桌面 1.背景2.SSH反向隧道3.远程连接电脑 1.背景 ‌Windows 10远程桌面协议的简称是RDP(Remote Desktop Protocol)‌。 RDP是一种网络协议,允许用户远程访问和操作另一台计算机。 远程桌面功…

软考系统架构设计师之大数据与人工智能笔记

一、大数据架构设计 1. 核心概念与挑战 大数据特征:体量大(Volume)、多样性(Variety)、高速性(Velocity)、价值密度低(Value)。传统数据库问题:数据过载、性…

【数据结构 · 初阶】- 单链表

目录 一.相关指针知识点 二.链表 1.为什么学了顺序表还要学链表 2.优点 三.实现 1.链表的打印 —— 理解链表结构 (2) 物理结构图 2.链表的尾插 —— 入门 错误写法:tail ! NULL 总结: 正确代码物理图解: (2) 尾插整体代码 (思考…

按键消抖(用状态机实现)

基于状态机的设计代码 module key_filter(clk,rst,key,key_p_flag,key_r_flag,key_state);input clk,rst;input key;output reg key_p_flag;output reg key_r_flag;output reg key_state;reg [1:0]r_key; //后面用来判断什么时候pedge,什么时候nedgealways…

大数据(7.2)Kafka万亿级数据洪流下的架构优化实战:从参数调优到集群治理

目录 一、海量数据场景下的性能之殇1.1 互联网企业的数据增长曲线1.2 典型性能瓶颈分析 二、生产者端极致优化2.1 批量发送黄金法则2.1.1 分区选择算法对比 2.2 序列化性能突破 三、消费者端并发艺术3.1 多线程消费模式演进3.1.1 消费组Rebalance优化 3.2 位移管理高阶技巧 四、…

MyBatis深度解析与实战指南:细节完整,从入门到精通

MyBatis深度解析与实战指南:细节完整,从入门到精通 整理这份笔记,是因为学习 MyBatis 时发现很多教程要么只讲基础 CRUD,要么直接跳到 Spring 整合,对 MyBatis 核心特性讲解不全面,基础部分也不够完整。实…

【科学技术部政务服务平台-用户注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

【Audio开发三】音频audio中帧frameSize ,周期大小periodsize,缓冲区buffer原理详解以及代码流程分析

一、基础概述 在分析获取最小帧数前,我们先来了解几个相关的概念。 1,帧 帧(frame):表示一个完整的声音单元,所谓的声音单元是指一个采样样本。如果是双声道,那么一个完整的声音单元就是 2 个样…