百度的分词算法

动手玩转Scratch资源 动手玩转Scratch是一本Scratch入门和进阶的书,介绍了Scratch的各种原理。本资源是该书使用的源代码。 立即下载

这篇文章主要参考中科院软件所张俊林先生在2005年11月写作的《搜索引擎设计实用教程》的分词部分,提供的查询关键词范例也源于该文。


搜索引擎本身并不提供信息,因此用户需要在搜索引擎的搜索框键入关键词进行查询以获取信息,然而由于中文信息检索存在的自身特点,比如中文语词之间没有空格,中文的语法分析和语义理解与英语相比更为困难。因此搜索引擎在信息索引前都要对用户所查询的语词进行切分。


并非任何一个查询词百度都会进行切分,如果关键词组仅仅包含小于等于3个中文字符就保留不进行切分,大于4个中文字符的时候,百度的分词程序便会开始运行,这时候才是百度分词的真正时机。当然,如果是完全匹配的话,不管几个词,一般情况看起来都似乎没有进行切分,这是因为百度拥有一个全世界最庞大的中文分词词库,这个词库不断增加用户最新的查询词,比如“我是谁的谁”,这个原本要进行分词,但是因为词库中存在,百度就知道这是黄征的一首歌,于是就不予切分,但其实仍然是有进行切分的,只是百度将切分后的结果当做一个短语进行查询,看到的效果就跟没有切分是一样的。


分词算法也有简单难易之分,比如正向最大匹配、反向最大匹配、双向最大匹配、语言模型方法、最短路径算法等等。


张俊林先生假设百度因为考虑到速度问题,不会采取比较复杂的算法,因此判断百度采用的是双向最大匹配算法。他提交了一个查询“毛泽东北京华烟云”以测试百度的分词是如何消歧以及是否有词典未登录词的识别功能。我们知道这个查询如果是正向最大匹配算法的话,那么应该输出为“毛泽东/北京/华/烟云”,反向最大匹配算法的话,则会输出“毛/泽/东北/京华烟云”,百度分词结果却是“毛泽东/北/京华烟云”,因此有可能是双向最大匹配算法。


这个分词结果还告诉我们百度分词可以识别人名,也可以识别“京华烟云”这种词典未登录词的功能。

 


我们一起来看下具体的百度分词过程:


1,先查找内部的特殊分词词典,专用词典先切分,剩余关键词再交由普通词典来切分。


百度的这个词典应该包含了一些独有的人名、部分地名以及一些普通词典没有的新词。按照这样的方法,“毛泽东”被首先解析出来,剩下“北京华烟云”,通过反向最大匹配的分词结果,再次分为“北/京华烟云”。为了证明这时候百度分词采用了反向最大匹配,作者再次提交查询了“发毛泽东北”,百度没有输出正向最大匹配的“发毛,泽,东北”,而是输出“发,毛泽东,北”。而有时候比如查询“古巴比伦理”,则输出为正向最大匹配的结果“古巴比伦,理”,而非反向最大匹配的“古巴,比,伦理”,因此我们判断百度可能采用双向最大匹配分词算法。


这里附加说下,根据张俊林先生后来写的补充文章,结论应该是百度采取了正向最大匹配算法。例子说明见下:


从例子“山东京城”百度切分为“山东,京城”说明“东京”是在普通词典里,再次查询“陈晓东京华烟云”,这两个词汇都在专有词典里面,因此百度切分为“陈晓东,京华烟云”。


说明对于专有词典词汇,百度分词算法采取正向最大匹配或者双向最大匹配。
查询“陈晓东方不败”,关键词“陈晓东”“东方不败”都在专有词典,正向切分应为“陈晓东,方,不败”,反向切分则应为“陈,晓,东方不败”,百度切分结果是第一种,说明还是采用正向最大匹配。


2,当正向和反向匹配分词结果一致时,百度直接输出切词结果,不一致的则采用最短路径方法,即切分的片断越少越好,比如“古巴,比,伦理”和“古巴比伦,理”相比选择后者,“北京,华,烟云”和“北,京华烟云”相比选择后者。


3,当正向反向匹配分词不一致,并且最短路径也相同时,比如提交查询“遥远古古巴比伦”,这个查询被百度切分为“遥远,古古,巴比伦”,说明词典里面有“巴比伦”,但是否有“古巴比伦”这个词汇不确定,此时看不出是正向切分还是反向切分得出的结果。换查询“遥远古巴比伦”,此时被切分为“遥远/古巴比伦”,说明词典里面有“古巴比伦”这个词汇,这说明“遥远古古巴比伦”是正向最大匹配的结果。为什么“遥远古古巴比伦”不会被反向切分为“遥/远古/古巴比伦”呢?百度在这种情况下,可能选择单字少的那组切分结果。


4,当切分后单字也一样多,比如查询“王强大小”,百度的分词结果是“王/强大/小”,是正向切分的结果,而非反向的“王/强/大小”,这说明有歧义而且单字也相同则选择正向切分结果。


我们来看下张俊林先生对百度分词算法的总结:首先查询专用词典(人名、部分地名等),将专有名称切出,剩下的部分采取双向分词策略。如果两者切分结果相同,说明没有歧义,直接输出分词结果;如果不一致,则输出最短路径的那个结果;如果长度相同,则选择单字词少的那一组切分结果;如果单字也相同,则选择正向分词结果。


如果百度是采用正向匹配的话,那么我们应该重新归纳一下百度的分词系统:首先用专有词典采用最大正向匹配分词,切分出部分结果;剩余没有切分交给普通词典,同样采取正向最大匹配分词,最后输出结果。这样更为简单,不过文章中的观点距离现在已经有4年多,目前百度的分词算法我们应该通过自己的SEO实践重新得出。


判断一个分词系统好不好,关键看两点:一个是消除歧义能力;一个是词典未登录词的识别,比如人名、地名、机构名等。百度的分词算法仍然未能非常好地消除歧义,不过其庞大的分词词典在业内确是没有任何一家搜索引擎能够领先,虽然从第一来看百度的分词算法似乎并不像其在宣传中的“你不知道我知道”的高深莫测,但由于其拥有的庞大分词词典,我们仍然可以说百度的分词算法是目前所有搜索引擎最为成熟的。

 

分词程序 (高效准确),可直接使用 高效较准确的中英文分词程序(源代码),可直接在VS上使用,并有与其他分析算法的比较分析,好! 立即下载

相关推荐

百度分词算法详解第1/2页

搜索分词算法分析,不建议大家恶意作弊

搜索分词算法

上面那个是一个ugc的标题,下面的是搜索词 1)title会在离线进行分词,并且对分词得到的每个term进行id化(就是转换成一个个uint32de term_id) 2) query进来之后,也会分词,然后term_id化 3)最后遍历结果,两个term_id 值相等,就匹配上了 靳东主演的电视剧我们的爱情 term咋生成的?这个term是对query和title进行小粒度分词得到的 query_term_index_map 最优index的选择原则:item的index必须在前一个ite

疯批美人 890

TLSR8258蓝牙Mesh实战:从SDK下载到自定义通信指令全流程(附避坑指南)

本文详细介绍了TLSR8258蓝牙Mesh开发的完整流程,从SDK下载、环境搭建到自定义通信指令的实现。通过实战案例和避坑指南,帮助开发者快速掌握低功耗蓝牙Mesh网络构建技巧,适用于智能家居、工业监控等物联网场景。

weixin_29176179的博客 198

Scratch 实现一个分词算法

名词解释 分词:按照空格拆分单词 涉及知识点 循环 条件判断 字符操作 难点 遇到空格则表明一个完整的词结束 最后一个单词末尾没有空格,需要特殊处理 运行效果 源码 代码包下载:https://mianbaoduo.com/o/bread/mbd-Z5mZk5c= ...

dodo 的专栏 1076

WPS专业版自带字体

WPS专业版其中一个好处就是自带了部分有版权的字体,就算你安装了没买授权,他也会给你在系统里面安装上这些字体,至于没授权继续用合不合规我不知道。但是带来的实实在在的好处就是有些子他支持的全啊。 /usr/share/fonts/wps-office/FZWBK.TTF: 方正魏碑_GBK,FZWeiBei\-S03:style=Regular /usr/share/fonts/wps-office/FZFSK.TTF: 方正仿宋_GBK,FZFangSong\-Z02:style=Regular /us

chenqioulin的博客 5696

内存学习(3):DRAM的基础存储结构(存储层级、读写过程,刷新与暂存)

DRAM,全称为 Dynamic Random Access Memory ,中文名是“动态随机存取存储器”。所谓“动态”是和“静态”相对应的,芯片世界里还有一种 SRAM 静态随机存取存储器的存在。笼统地说,DRAM 的结构比 SRAM 更简单,面积占用更小,适合制作大容量的存储芯片;而 SRAM 结构复杂一些,一般使用六个晶体管,面积消耗大,但是读写速度快,而且因为 SRAM 只用到晶体管,所以在工艺上和逻辑芯片相兼容,我们可以在逻辑芯片上直接集成 SRAM。

呆呆象呆呆的博客 2万+

关于百度中文分词

了解搜索引擎分词技术对于我们的SEO工作有着重大的意义,不管是我们的关键词布局还是链接架构,都跟分词有莫大的关联。这里萧涵给大家谈下一百度的中文分词(当然也不局限于百度,其他搜索引擎也是差不多的)。本文分两个部分,首先是摘取已有的关于分词的解释,另外再加入我自己对分词的扩展思路。 什么是中文分词? 我们都知道,英文句子都是由一个一个单词按空格分开组成,所以在分词方面就方便多了,但我们中文是一个

zhoubl668的专栏:远帆,梦之帆! 1675

MoveIt避坑指南:UR机械臂编程中常见的5个错误及解决方法

本文针对UR机械臂与MoveIt集成开发中的常见问题,总结了五个典型错误及其解决方案,包括关节限位设置、坐标系混淆、规划器选择、运动学求解器配置以及线程资源管理。重点分析了正逆运动学求解错误的原因,并提供了调整容忍度、显式指定坐标系、选择合适规划器及优化IK配置等实用代码示例,帮助开发者提升编程效率与系统稳定性。

root9的博客 433

小记java实现的几种分词算法

本屌已经在创业公司打拼了四年,随着公司的发展,个人的技术局限性越来越明显,意识到这一点之后,打算重筑算法功底,好好的充一次电,为下次突破做准备 分词算法是几年前刚开始接触搜索时接触到,打算先从这里切入,下班前整理了一下思路,小写了一番,记录如下,储备之: 分词有单字分词、字典分词、统计分词等,这里用最常用的字典分词 先定义一个词典,并初始化之: private static Set di

TDCQ的专栏 1742

爆肝整理:微信公众号文章HTML编写完整规范,运营必备手册

微信公众号文章排版总是出错?📱 这份完整的HTML编写规范文档帮你彻底解决!文档包含所有支持的标签、CSS属性、实用代码模板和注意事项 📋,让你快速掌握微信文章的HTML编写技巧,告别第三方编辑器依赖 ✅

XiaoqiangClub的博客 2301

FLUENT Meshing Watertight Geometry工作流入门 - 9 生成体网格

总结一下我们学到的东西。讨论体积网格的重要性,并了解生成体积网格的不同方法。还了解体积网格质量的重要性,并学习如何改进它。

B_etter_Man的博客 1万+

分词常见算法-----小整理

1 单字分词     public static void  tokennizer(String a){              for(int i=0;i               System.out.prinltn(a.charAt[i]);          }     }    2  二元分词     public static void split(S

单向街的夏天 1704

22h2版本的win10安装Docker Desktop时页面空白

摘要:Windows10 22H2系统重装Docker时出现安装界面卡死问题,通过管理员CMD执行静默安装命令解决。命令指定了WSL-2后端及多个自定义数据存储路径(安装目录、Hyper-V数据、Windows容器数据、WSL数据),安装需等待几分钟。最终验证安装成功。

猿小白的博客 650

百度(baidu)分词算法分析

一篇老文,好多内容均已变化,不过思路可以参考,内容转自http://blog.sina.com.cn/s/blog_5c4e87070100au2c.html 之前在广州点石茶话会上也有重点讨论过百度分词算法,那时很多SEOer都认为百度在测试分词技术中,有些关键词带公司字眼的关键词,在搜索结果内容时基本上跟关键词不乎核。下面是中科院软件所张俊林一篇百度分词算法的三步曲,希望能帮SEOer解...

空山新雨后 670

车载软件架构 —— AUTOSAR Vector SIP包(三)

### 上一篇文章中介绍了AUTOSAR基础软件供应商Vector公司的开发工具链,本文将继续介绍Vector公司的AUTOSAR产品。 ### -> 1、Vector SIP包中的StartApplication ### -> 2、StartApplication如何开始使用

Soly_kun的博客 827

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

百度(baidu)分词算法分析(一)

   百度(baidu)分词算法分析(一) 发布:xueshitianqian | 分类:SEO技术 | 评论:1 | 引用:0 | 浏览:107<!-- strBatchCount+="spn229=229,"// -->

中转站 764

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

百度分词算法

百度分词算法分析一 分词又叫,切词,划词等 我感觉是seo中应该仔细学好的技术。 我有个实验站1000左右ip的站,首页是按照分词写的,每天可以在 百度得到100~200的ip 效果还是很明显的。 网上这类详细讲解的文章比较少 我找了几篇转过来,大家可以学下看。 --------------------------------------------------------- 查询处理以及分词

静心编程-java-php-jsp-数据库-网站-我们一起成长 2960

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

百度(baidu)分词算法分析(二)

二、中文分词首先,讲讲百度的分词时机或者条件问题,是否是个中文字符串百度就拿来切一下呢?非也,要想被百度的分词程序荣幸的切割一下也是要讲条件的,哪能是个字符串就切割啊?你当百度是卖锯条的么?那么什么样的字符串才满足被切割的条件呢?简单说来,如果字符串只包含小于等于3个中文字符的话,那就保留不动,当字符串长度大于4个中文字符的时候,百度的分词程序才出马大干快上,把这个字符串肢解掉。怎么证

seajean Code 568

baidu分词算法研究一

 中科院软件所 张俊林 查询处理以及分词技术随着搜索经济的崛起,人们开始越加关注全球各大搜索引擎的性能、技术和日流量。作为企业,会根据搜索引擎的知名度以及日流量来选择是否要投放广告 等;作为 普通网民,会根据搜索引擎的性能和技术来选择自己喜欢的引擎查找资料;作为技术人员,会把有代表性的搜索引擎作为研究对象。 搜索引擎经济的崛起,又一次向人们证明了网络所蕴藏的巨大商机。网络离开了搜索

我是IT人士 645

转百度(baidu)中文分词算法分析(二)

百度(baidu)中文分词算法分析(二) 下文是百度对用户查询关键词分词做了一个实践分析,百度这个搜索引擎对关键词如何切分呢?下面是中科院软件所张俊林一篇百度分词算法,转载一个SEOer的整理部分,希望更多seoer有帮助。二、中文分词首先,讲讲百度的分词时机或者条件问题,是否是个中文字符串百度就拿来切一下呢?非也,要想被百度的分词程序荣幸的切割一下也是要讲条件的,哪能是个字符串就

中转站 850

baidu分词算法研究三

面说过,经过分析得出百度的分词系统采用双向最大匹配分词,但是后来发现推理过程中存在一个漏洞,而且推导出来的百度分词算法步骤还是过于繁琐,所以进一步进行分析,看看是否前面的推导有错误.那么以前的分析有什么漏洞呢?我们推导百度分词有反向最大匹配的依据是百度将"北京华烟云"分词为,从这里看好像采用 了反向最大匹配,因为正向最大匹配的结果应该是,但是由此就推论说百度采用了双向最大匹配还是太仓促了,前面

我是IT人士 503

baidu分词算法分析之三

之三:对百度分词算法的进一步分析 上面说过,经过分析得出百度的分词系统采用双向最大匹配分词,但是后来发现推理过程中存在一个漏洞,而且推导出来的百度分词算法步骤还是过于繁琐,所以进一步进行分析,看看是否前面的推导有错误. 那么以前的分析有什么漏洞呢?我们推导百度分词有反向最大匹配的依据是百度将"北京华烟云"分词为,从这里看好像采用了反向最大匹配,因为正向最大匹配的结果应该是,但是由此就推论说

思索的蜗牛的专栏 661

百度分词算法详解

本文通过搜索结果归纳分析+切词通用算法分析的方式对百度预处理阶段的查询处理和中文分词两项技术进行了阐述、总结,如果你对数据结构、算法有一定了解的话,理解起来会相对容易些;个人感觉,得出正向最大匹配算法不够准确,无论是专用词典还是普通词典里的词,都是有不同权重的,这根搜索频率应该有一定关系,基于这点,在出现多个专用词典里的词时,是需要采用双向最大匹配算法来检测到底哪一个专有词汇应该先被切出来

hexiankun的专栏 1071
上一篇: google眼睛源代码
下一篇: Google Hilltop算法
Java2King
博客等级 码龄18年 221粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值