ICTCLAS初步分词之原子分词

全切分分词 全切分分词 如果在分词的时候本着"宁可错杀三千,不可放过一个"的原则,将句子中所有在词典中出现的词汇都找出来,这样的分词算法就叫做全切分词。 全切分词是很多种分词算法的前处理环节,利用全切分词生成有限无环图DAG,然后利用不同的算法求出一条或多条不同的路径,是很多分词算法的一部分。 算法 1. 根据字典建立state dict/pdict Input: 字典dict={w 阅读详情

再说到原子分词前,我们先来说下什么是原子。我举个例子就一目了然了:始##始他说的确实在理末##末-->始##始 他 说 的 确 实 在 理 末##末,其中始##始是开始的标志。ICTCLAS分词大约分为:

1)初步分词;

2)词性标注;

3)人名、地名识别;

4)重新分词;

5)重新词性标注这五步。

 就第一步分词而言,又细分成:1)原子切分;2)找出原子之间所有可能的组词方案;3)N-最短路径中文词语粗分三步。

现在来学习下原子切分:

1):就“三星SHX-123型号的手机”而言,原子切分第一步我们就叫它原子分隔处理,处理后的结果:三  星  S  H  X  -  1  2  3  型  号  的  手  机 

代码参考如下:

/**
	 * 对字符串进行原子分隔,比如:解放军第101医院----解 放 军 第 1 0 1 医 院
	 * 
	 * @param str
	 * @return
	 */
	public static String[] atomSplit(String str) {
		String[] result = null;
		if (str != null) {
			result = new String[str.length()];
			String temp = str + " ";
			for (int i = 0; i < temp.length() - 1; i++) {
				result[i] = temp.substring(i, i + 1);
			}
		}

		return result;
	}


2):对第一步原子分隔的结果进行进一步处理经过这一步第一步中“三  星  S  H  X  -  1  2  3  型  号  的  手  机 ”就变成了三  星   SHX-123   型  号  的  手  机 

处理过程大致是对result 数组进行遍历,遍历中会分为以下几种情况:

*如果是汉子,分隔符等则作为一个单独原子

*如果是数字、字母、单字节符号则把相邻的作为一个原子如:SHX-123

*其中还有一种特殊的情况如“。”

核心代码:

for (int i = index; i < ss.length; i++) {
				if (Utility.SENTENCE_END.equals(str.substring(i))) {
					Atom atom = new Atom();
					atom.setWord(Utility.SENTENCE_END);
					atom.setLen(Utility.SENTENCE_END.length());
					atom.setPos(Utility.CT_SENTENCE_END);
					result.add(atom);
					break;
				}

				String s = ss[i];
				sAtom += s;
				int curType = Utility.charType(s);
				if (".".equals(s)
						&& (i + 1 < ss.length && (Utility.charType(ss[i + 1]) == Utility.CT_NUM || GFString
								.isNumeric(ss[i+1]))))
					curType = Utility.CT_NUM;

				// 如果是汉字、分隔符等
				if (curType == Utility.CT_CHINESE || curType == Utility.CT_INDEX || curType == Utility.CT_DELIMITER
						|| curType == Utility.CT_OTHER) {

					Atom atom = new Atom();
					atom.setWord(s);
					atom.setLen(s.length());
					atom.setPos(curType);
					result.add(atom);
					sAtom = "";
				}
				// 如果是数字、字母、单字节符号,则把相邻的这些做为一个原子。比如:三星SHX-123型号的手机,则其中的SHX-123就是一个原子
				else {
					int nextType = 255;// 下一个字符的类型
					if (i < ss.length - 1)
						nextType = Utility.charType(ss[i + 1]);
					if (nextType != curType || i == ss.length - 1) {
						Atom atom = new Atom();
						atom.setWord(sAtom);
						atom.setLen(sAtom.length());
						atom.setPos(curType);
						result.add(atom);
						sAtom = "";
					}
				}
			}


如果想下载代码的话http://ishare.iask.sina.com.cn/download/explain.php?fileid=12821600

如果想进一步学习的话也可以看看http://www.cnblogs.com/zhenyulu/articles/668035.html

ICTCLAS分词系统研究(一)         ICTClAS分词系统是由中科院计算所的张华平、刘群所开发的一套获得广泛好评的分词系统,难能可贵的是该版的Free版开放了源代码,为我们很多初学者提供了宝贵的学习材料。      但有一点不完美的是,该源代码没有配套的文档,阅读起来可能有一定的障碍,尤其是对C/C++不熟的人来说.本人就一直用Java/VB作为主要的开发语言,C/C++上大学时倒是学过,不过工作之后一直没有再使 阅读详情

相关推荐

ICTCLAS分词系统研究(四)--初次切分

    经过原子分词后,源字符串成了一个个独立的最小语素单位。下面的初次切分,就是把原子之间所有可能的组合都先找出来。算法是用两个循环来实现,第一层遍历整个原子单位,第二层是当找到一个原子时,不断把后面相邻的原子和该原子组合到一起,访问词典库看它能否构成一个有意义有词组。用数学方法可以做如下描述:有一个原子序列:A(n)(0用伪码表示:for(int I=0;I  Stri

张新波的技术随笔 1万+

ICTCLAS分词系统研究(三)--原子切分

 ICTCLAS分词的第一步就是原子分词。但在进行原子切分之前,首先要进行断句处理。所谓断句,就是根据分隔符、回车换行符等语句的分隔标志,把源字符串分隔成多个稍微简单一点的短句,再进行分词处理,最后再把各个分词结果合起来,形成最终的分词结果。分成短句之后,即可进行原子分词,所谓原子,是指该短句中不可分割的最小语素单位。一个汉字、短句前后的开始结束标识字段、全角标点符号、连在一起的数字字母单字节

张新波的技术随笔 1万+

从‘平行’到‘鱼骨’:手把手拆解AlGaN/GaN HEMT多栅指结构的布局优化实战

本文深入探讨了AlGaN/GaN HEMT多栅指结构的布局优化,从传统的平行栅结构到创新的鱼骨栅结构,详细解析了如何通过优化信号路径和热管理提升功率器件的性能。文章结合实测数据和EDA工具,展示了鱼骨栅结构在相位一致性、热阻和版图利用率方面的显著改进,为射频功率放大器设计提供了实用指导。

weixin_27061475的博客 442

中文分词原理和实现

三大主流分词方法:基于词典的方法、基于规则的方法和基于统计的方法。1、基于规则或词典的方法 定义:按照一定策略将待分析的汉字串与一个“大机器词典”中的词条进行匹配,若在词典中找到某个字符串,则匹配成功。按照扫描方向的不同:正向匹配和逆向匹配 按照长度的不同:最大匹配和最小匹配 1.1正向最大匹配思想MM 从左向右取待切分汉语句的m个字符作为匹配字段,m为大机器词典中最长词条个数。 查找大机器词

狮子座明仔知识集散场 3万+

船舶轨迹预测中的5个常见坑:基于LSTM单步预测的避坑实践

本文针对船舶轨迹预测中LSTM单步预测的常见问题,系统总结了五个典型陷阱及避坑实践。重点分析了如何正确处理AIS数据的非均匀采样与清洗、对航向角进行周期性编码、采用轨迹级归一化策略、缓解单步滚动预测的误差累积,并设计贴合业务的评估指标。这些实践能有效提升预测模型的准确性与实用性。

cnn8visionary的博客 633

TMC5130/TMC5160步进电机驱动芯片深度解析与工程实践

步进电机驱动芯片是精密运动控制系统的物理执行核心,其性能直接决定定位精度、运行噪声与系统鲁棒性。基于电流闭环控制与电压前馈调制的混合驱动原理,现代智能驱动芯片如TMC51X0系列实现了微步插补、堵转检测和片上运动规划等关键技术突破。这类芯片通过SPI寄存器级配置实现StealthChop静音驱动与SpreadCycle高动态响应模式的无缝切换,在3D打印、CNC、机器人关节等场景中显著提升能效比与控制带宽。本文围绕TMC5130与TMC5160的硬件架构差异、寄存器操作时序、驱动模式物理机制及FreeRTO

weixin_35797963的博客 410

基于隐马尔科夫模型的中文分词研究

                                                             基于隐马尔科夫模型的中文分词研究                                                                             魏晓宁                                                (南通大学计算机科学与技术学院,江苏南通226019)摘要:一直以来,汉语自动分词是公认的汉语信息处理

lengyuhong的专栏 8777

NVMe-MI --- Message Servicing Model(消息服务模型)

本文主要介绍NVMe-MI消息服务模型,两个主要类别是请求消息和响应消息。并介绍带外机制消息服务状态机。

智小星的博客 2014

开源分词软件

由于中文文本词与词之间没有像英文那样有空格分隔,因此很多时候中文文本操作都涉及切词,这里整理了一些中文分词工具。一般来说用CRF实现的分词工具的处理速度是比较慢的(训练CRF模型是非常耗时的),但是精度高,涉及CRF的分词工具有CRF++,Stanford分词工具。 Bakeoff是一个国际中文处理比赛,有多个语料,所以每个语料都有排名。只有部分优秀的Bak...

aigui1439的博客 958

UVM环境复位--stop_sequences()

在UVM验证环境中, stop_sequences是一个用于强制终止所有正在运行的 Sequence 的方法,通常用于动态控制激励生成流程。1.通过uvm_config_db传递事件和严格的同步机制,此方案符适用于复杂复位场景和动态测试控制。组件耦合:Driver 和 Sequence 不再直接依赖env,通过标准接口通信。竞争条件:确保 Driver 完成清理后再终止 Sequence。代码健壮性:使用非阻塞操作和事件监听,避免死锁。

qq_42779035的博客 3015

YOLOv8改进 | Conv篇:基于FasterBlock与C2f结构的二次创新,参数量下降70万【附保姆级代码】

通过引入FasterBlock二次创新C2f结构,我们成功地对YOLOv8模型进行了优化,显著降低了其参数量,并提升了推理速度,而精度保持不变甚至有所提升。该模型在多个实际应用场景中展现出了优异的性能,尤其是在嵌入式设备、移动端和自动驾驶等领域,具有广泛的应用潜力。未来的研究将进一步优化模型结构,探索更多的应用场景,为目标检测技术的发展做出贡献。

一键难忘的博客 3215

SharpICTCLAS分词系统简介(2)初步分词

ICTCLAS初步分词包括:1)原子切分;2)找出原子之间所有可能的组词方案;3)N-最短路径中文词语粗分三步。 例如:“他说的确实在理”这句话。 1)原子切分的目的是完成单个汉字的切分。经过原子切分后变成“始##始/他/说/的/确/实/在/理/末##末”。 2)然后根据“词库字典”找出所有原子之间所有可能的组词方案。经过词库检索后,该句话变为“始##始/他/说/的/的确/确/确实/实/实在

python二级题库 760

Linux安装Docker(图文解说详细版)

第一步,下载docker 下载地址: https://download.docker.com/linux/static/stable/x86_64/ 这次的演示我们使用docker-18.06.3-ce.tgz 这个版本 第二步,上传到云服务器上面 使用rz命令上传或者fltp工具进行上传 第三步,解压文件 第四步,将解压出来的docker文件复制到 /usr/bin/ 目录下 这么做的目的是将docker交给linux自己去管理,类似spring中的ioc(猜测,非正经知识) cp docker

编码人生 1万+

ICTCLAS分词系统

ICTCLAS分词系统研究(一) ICTCLAS分词系统研究(二)--词典结构 ICTCLAS分词系统研究(三)--原子切分 2007年06月04日 ICTCLAS分词系统研究(十)--后记ictclas研究历程阅读全文>发表于 @ 2007年06月04日 14:25:00 | 评论( 7 ) | 举报| 收藏 ICTCLAS分词系统

yanyongshan的专栏 1075

一站式讲解Wireshark网络抓包分析的若干场景、过滤条件及分析方法

本文详细讲解常用的抓包工具、抓包分析的网络场景、分析抓包时的多种过滤条件以及如何结合常用的协议去分析排查问题,给大家提供一个借鉴或参考。

dvlinker的技术专栏 5万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

中科院中文分词系统ICTCLAS之CSegment的GenerateWord()详细分析

一、简介这次分析的是ICTCLAS中的//Generate Word according the segmentation routebool CSegment::GenerateWord(int **nSegRoute, int nIndex)本来这个函数没有必要详细分析,但是我注意到中科院论文中并没有描述这个函数、而Sinboy和吕震宇也基本上跳过这个函数不讲了,所以这个函数还

DanceFire的专栏 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ICTCLAS分词系统研究(十)--后记

     FreeICTCLAS中文分词系统从2006年3月就开始接触,之后通过研读相关论文和源代码,写了一系列的学习笔记,给很多同样的中文分词爱好者提供了一个可参考的文档资料。但因为工作及其它原因(嘿嘿,说白就了就是比较偷懒,没有坚持下去),把该项目做成一个java版的原始想法一度中断。之后,也曾多次尝试重新拾起,完成我的一个心愿,但复杂的工作都让我半途而费。       4月份的时候,一个

张新波的技术随笔 7965

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ICTCLAS4J源代码示例(-)

 题记:经过几个月断断续续的学习,终于把ICTCLAS的源代码搞清楚了一部分,关试着用JAVA按原作者的意图实现了一个,目前已经可以实现分词的第一步,但人名、地名和未登录词的处理以及词性标记还没有彻底搞清楚。本来想早点拿出来和大家分享,但又怕太丑陋不敢见人。近几个星期工作一直特别忙,也无暇照顾它并做进一步的实现。思付良久,还是决心先把自已的理解和实现拿出来和大家共享,欢迎各位指正拍砖!

张新波的技术随笔 8512

中文分词软件包的使用

中文分词 (Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂的多、困难的多。下面

qianwenhong 1万+

分词系统研究完整版

ICTClAS分词系统是由中科院计算所的张华平、刘群所开发的一套获得广泛好评的分词系统,难能可贵的是该版的Free版开放了源代码,为我们很多初学者提供了宝贵的学习材料。 但有一点不完美的是,该源代码没有配套的文档,阅读起来可能有一定的障碍,尤其是对C/C++不熟的人来说.本人就一直用Java/VB作为主要的开发语言,C/C++上大学时倒是学过,不过工作之后一直没有再使用...

deform0032的博客 184

中文分词之姓名标注

中科院中文分词系统ICTCLAS之人名识别词典分析

axuanwu的专栏 5026

SharpICTCLAS分词系统简介(1)读取词典库

ICTCLAS分词的总体流程包括:1)初步分词;2)词性标注;3)人名、地名识别;4)重新分词;5)重新词性标注这五步。就第一步分词而言,又细分成:1)原子切分;2)找出原子之间所有可能的组词方案;3)N-最短路径中文词语粗分三步。 在所有内容中,词典库的读取是最基本的功能。ICTCLAS中词典存放在Data目录中,常用的词典包括coreDict.dct(词典库)、BigramDict.dct(

python二级题库 1045

ictclas4j分词模块

         ictclas4j中文分词模块ms也是采用了Viterbi算法进行切词,在切词基础上进行词性标注。具体可参阅其代码:   package org.ictclas4j.segment; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt...

summerbell 219
上一篇: ICTCLAS 2分法查询词典库
下一篇: ICTCLAS分词之所有可能的组词情况
Refluxer
博客等级 码龄14年 2粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值