hanlp源码解析之中文分词算法
词图
词图指的是句子中所有词可能构成的图。如果一个词A的下一个词可能是B的话,那么A和B之间具有一条路径E(A,B)。一个词可能有多个后续,同时也可能有多个前驱,它们构成的图我称作词图。
需要稀疏2维矩阵模型,以一个词的起始位置作为行,终止位置作为列,可以得到一个二维矩阵。例如:“他说的确实在理”这句话
图词的存储方法:一种是的DynamicArray法,一种是快速offset法。Hanlp代码中采用的是第二种方法。
1、DynamicArray(二维数组)法
在词图中,行和列的关系:col为n 的列中所有词可以与row为n 的所有行中的词进行组合。例如“的确”这个词,它的col =5,需要和它计算平滑值的有两个,分别是row =5的两个词:“实”和“实在”。但是在遍历和插入的时候,需要一个个比较col和row的关系,复杂度是O(N)。
2、快速offset
一个一维数组,每个元素是一个单链表
“的确”的行号是4,长度是2,4+2=6,于是第六行的两个词“实/实在”就是“的确”的后续。
同时这种方法速度非常快,插入和查询的时间都是O(1)。
Hanlp核心词典:
最短路径算法—viterbi(动态规划路径)
Frequency:核心词典中的词频
nTwoWordsFreq:共现词频
intMAX_FREQUENCY= 25146057
double dTemp =(double) 1 / MAX_FREQUENCY +0.00001
dSmoothingPara =0.1
Viterbi最短路径有向图
1、计算过程从上至下,根据计算出的权重值
变更前驱结点,保证前驱结点唯一(动态规划路径)
2、计算结束后,从最后一个结点开始取出term
,依次取出该结点的前驱结点即可
分词结果:理,在,确实,的,说,他
文章来源于亚当-adam的博客
转载于:https://www.cnblogs.com/tiantiankong/p/10365575.html
hanlp源码解析之中文分词算法相关推荐
- Zbar源码解析——实现中文解码|2021SC@SDUSC
2021SC@SDUSC 修改文件 zbar/qrcode/qrdectxt.c: latin1_cd=iconv_open("GB18030","UTF-8" ...
- 中文分词算法工具hanlp源码解析
词图 词图指的是句子中所有词可能构成的图.如果一个词A的下一个词可能是B的话,那么A和B之间具有一条路径E(A,B).一个词可能有多个后续,同时也可能有多个前驱,它们构成的图我称作词图. 需要稀疏2维 ...
- 中文分词算法python代码_中文分词算法之最大正向匹配算法(Python版)
最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...
- 以太坊Geth 共识算法源码解析
共识算法 目前以太坊中有两个公式算法的实现,分别为clique和ethash.其中clique是PoA共识的实现,ethash是PoW共识的实现,其相应的代码位于go-ethereum/consens ...
- 《Attention is all you need》源码解析+算法详解
Attention is all you need 源码解析 最近学习Transformer模型的时候,并且好好读了一下Google的<Attention is all you need> ...
- 【深度学习模型】智云视图中文车牌识别源码解析(二)
[深度学习模型]智云视图中文车牌识别源码解析(二) 感受 HyperLPR可以识别多种中文车牌包括白牌,新能源车牌,使馆车牌,教练车牌,武警车牌等. 代码不可谓不混乱(别忘了这是职业公司的准产品级代码 ...
- Mmseg中文分词算法解析
Mmseg中文分词算法解析 @author linjiexing 开发中文搜索和中文词库语义自己主动识别的时候,我採用都是基于mmseg中文分词算法开发的Jcseg开源project.使用场景涉及搜索 ...
- weiler-atherton多边形裁剪算法_EAST算法超详细源码解析:数据预处理与标签生成...
作者简介 CW,广东深圳人,毕业于中山大学(SYSU)数据科学与计算机学院,毕业后就业于腾讯计算机系统有限公司技术工程与事业群(TEG)从事Devops工作,期间在AI LAB实习过,实操过道路交通元 ...
- [Vue源码解析] patching算法
[Vue源码解析] patching算法 pathching算法:通过对比新旧VNode的不同,然后找出需要更新的节点进行更新 操作:1.创建新增节点 2.删除废弃节点 3.修改需要更新的节点 创建节 ...
最新文章
- OpenCV最经典的3种颜色空间(cv2.cvtColor)及互相转换
- 立体相机开发|几何感知的实例分割
- 生成唯一字符串算法_面试官问:在分布式场景,生成唯一ID,你有几种方案?...
- 德信创业系2014版
- 并行执行 Job - 每天5分钟玩转 Docker 容器技术(134)
- python cookies过期_Python3中关于cookie的创建与保存
- Shared Event-loop for Same-Origin Windows(译)
- python中常用的序列化模块_python 序列化,常用模块
- python hdf5 —— h5py
- Codeforces 436D Pudding Monsters
- 小程序开发,不现实用户的头像!
- 网络框架分析-全是套路
- linux运维工程师的发展,Linux运维工程师发展前景
- 服装制版师用软件代替手工_楚天都市报_多媒体报
- AI将png图片转换为矢量图并上传到阿里云iconfont
- DVWA 跨站请求伪造(CSRF)
- 【Suffix Array】后缀数组详解
- Win10 卸载 Cortana
- 什么是 知足者常乐?
- HTML5期末大作业:汉堡美食网站设计——餐饮美食-汉堡美食(6页) HTML+CSS+JavaScript 汉堡美食 咖啡主题HTM5网页设计作业成品
热门文章
- 使用Canvas扩展绘制动态ASP.NET Core Blazor条形图
- NET的JIRA活动时间线REST API
- Kong 1.0 GA 版本正式发布,微服务 API 网关
- 百度地图手机和电脑不一致_手机能下载北斗星导航吗?比高德地图和百度地图好用吗?...
- 微服务springCloud初识
- java中两个xml文件内容拼接_比较Java中2个XML文档的最佳方法
- redis常用命令getex_Redis常用命令
- php星期和时间获取
- canvas读取图片,输入文字,调整文字属性,拖拽文字位置,并保存图片
- Android 8.0 linux内核,在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序---Android8.0版本实现-对照老罗版本...