ICTCLAS分词系统研究(六)--得到初分结果

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

仍然以“他说的确实在理”为例,经过NshortPath的处理后,我们可以得到N条最短二叉分词路径,如下:

初次生成的分词图表:

 123456789
0始##始        
1 他       
2  说      
3   的的确    
4    确确实   
5     实实在  
6      在在理 
7       理 
8        末##末

初次生成的二叉分词图表:

 123456789101112
0始##始@他           
1 他@说          
2  说@的说@的确        
3    的@确的@确实      
4      的确@实的确@实在    
5      确@实确@实在    
6        确实@在确实@在理  
7        实@在实@在理  
8          实在@理 
9          在@理 
10           在理@末##末
11           理@末##末

初次生成的二叉分词路径:

序号二叉分词路径
00 1 2 3 6 9 11 12 
10 1 2 4 7 9 11 12 
20 1 2 3 5 7 9 11 12 

0 1 2 3 6 9 11 12 指的是针对上图二叉分词图表,得出的分词路径的列下标,其实图表中的列对应的是@后面的词,行对应的是@前面的词在分词图表中的位置。得到了二叉分词路径,其实我们就可以得到真正的分词路径,只需要根据分词图表和二叉分词图表之间的对应关系进行一个简单的转换即可。

源代码中是通过这一段代码来实现的:

    while(i<m_nSegmentCount)
    
{
        
//把二叉分词路径转成分词路径
        BiPath2UniPath(nSegRoute[i]);
        
//根据分词路径生成分词结果
        GenerateWord(nSegRoute,i); 
        i
++;
    }

初次生成的分词结果:

序号分词结果
0他/ 说/ 的/ 确实/ 在/ 理/
1他/ 说/ 的确/d 实/ 在/ 理/
2他/ 说/ 的/ 确/ 实/ 在/ 理/

需要注意的是,在generateWord()函数里对一些特殊情况做一些处理,然后再生成分词结果。主要是对涉及到数字、时间、日期的结果进行合并、拆分,

 

//Generate Word according the segmentation route
bool CSegment::GenerateWord(int **nSegRoute, int nIndex)
{
    unsigned 
int i=0,k=0;
    
int j,nStartVertex,nEndVertex,nPOS;
    
char sAtom[WORD_MAXLENGTH],sNumCandidate[100],sCurWord[100];
    ELEMENT_TYPE fValue;
    
while(nSegRoute[nIndex][i]!=-1&&nSegRoute[nIndex][i+1]!=-1&&nSegRoute[nIndex][i]<nSegRoute[nIndex][i+1])
    
{
        nStartVertex
=nSegRoute[nIndex][i];
        j
=nStartVertex;//Set the start vertex
        nEndVertex=nSegRoute[nIndex][i+1];//Set the end vertex
        nPOS=0;
        m_graphSeg.m_segGraph.GetElement(nStartVertex,nEndVertex,
&fValue,&nPOS);
        sAtom[
0]=0;
        
while(j<nEndVertex)
        
{//Generate the word according the segmentation route
            strcat(sAtom,m_graphSeg.m_sAtom[j]);
            j
++;
        }

        m_pWordSeg[nIndex][k].sWord[
0]=0;//Init the result ending
        strcpy(sNumCandidate,sAtom);
        
//找出连续的数字串
        while(sAtom[0]!=0&&(IsAllNum((unsigned char *)sNumCandidate)||IsAllChineseNum(sNumCandidate)))
        
{//Merge all seperate continue num into one number
         
//sAtom[0]!=0: add in 2002-5-9
            strcpy(m_pWordSeg[nIndex][k].sWord,sNumCandidate);
            
//Save them in the result segmentation
            i++;//Skip to next atom now 
            sAtom[0]=0;
            
            
while(j<nSegRoute[nIndex][i+1])
            
{//Generate the word according the segmentation route
                strcat(sAtom,m_graphSeg.m_sAtom[j]);
                j
++;
            }

            strcat(sNumCandidate,sAtom);
        }

        unsigned 
int nLen=strlen(m_pWordSeg[nIndex][k].sWord);
        
if(nLen==4&&CC_Find("第上成±—+∶·./",m_pWordSeg[nIndex][k].sWord)||nLen==1&&strchr("+-./",m_pWordSeg[nIndex][k].sWord[0]))
        
{//Only one word
            strcpy(sCurWord,m_pWordSeg[nIndex][k].sWord);//Record current word
            i--;
        }

        
else if(m_pWordSeg[nIndex][k].sWord[0]==0)//Have never entering the while loop
        {
            strcpy(m_pWordSeg[nIndex][k].sWord,sAtom);
            
//Save them in the result segmentation
            strcpy(sCurWord,sAtom);//Record current word
        }

        
else
        
{//It is a num
            
            
if(strcmp("--",m_pWordSeg[nIndex][k].sWord)==0||strcmp("—",m_pWordSeg[nIndex][k].sWord)==0||m_pWordSeg[nIndex][k].sWord[0]=='-'&&m_pWordSeg[nIndex][k].sWord[1]==0)//The delimiter "--"
            {
                nPOS
=30464;//'w'*256;Set the POS with 'w'
                i--;//Not num, back to previous word
            }

            
else
            
{//Adding time suffix

                
char sInitChar[3];
                unsigned 
int nCharIndex=0;//Get first char
                sInitChar[nCharIndex]=m_pWordSeg[nIndex][k].sWord[nCharIndex];
                
if(sInitChar[nCharIndex]<0)
                
{
                    nCharIndex
+=1;
                    sInitChar[nCharIndex]
=m_pWordSeg[nIndex][k].sWord[nCharIndex];
                }

                nCharIndex
+=1;
                sInitChar[nCharIndex]
='
使用ICTCLAS2015进行分词 使用ICTCLAS2015进行分词 在今年的Imagine Cup中使用到了语义分析的部分,其中需要分词作为基础,我是用的是中科院的ICTCLA2015,本篇博客我来讲讲如何使用ICTCLAS2015进行分词 ICTCLAS2015简介中文词法分析是中文信息处理的基础与关键。中国科学院计算技术研究所在多年研究工作积累的基础上,研制出了汉语词法分析系统ICTCLAS(Institute of Co 阅读详情

相关推荐

关于中科院分词系统ictclas java版本 ICTCLAS50_Windows_32_JNI 的使用

关于中科院分词系统ictclas java版本 ICTCLAS50_Windows_32_JNI 的使用问题 首先下载 ictclas的官方网站http://ictclas.org/ictclas_download.aspx  http://ictclas.org/ictclas_download.asp 下载所需的ictclas版本,我使用的是ICTCLAS50_

2034

几款开源的中文分词系统

PhpanAlysis分词系统是基于字符串匹配的分词方法 ,这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。ICTCLAS 3.0 商业版是收费的,而免费提供的 ICTCLAS 3.0 共享版不开源,词库是根据人民日报一个月的语料得出的,很多词语不存在。功能:盘古分词提供中文人名识别,简繁混合分词,多元分词,英文词根化,强制一元分词,词频优先分词,停用词过滤,英文专名提取等一系列功能。

草根上的须子 2469

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

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

张新波的技术随笔 1万+

ICTCLAS

ICTCLAS分词系统是由中科院计算所的张华平、刘群所开发的一套获得广泛好评的分词系统,该版的Free版开放了源代码,为初学者提供了宝贵的学习材料。我们可以在“http://sewm.pku.edu.cn/QA/”找到FreeICTCLASLinux.tar的C++代码。可是目前该版本的ICTCLAS并没有提供完善的文档,所以阅读起来有一定的难度,所幸网上可以找到一些对ICTCLAS进行代码分

peter1_jiang的专栏 1744

NLPIR/ICTCLAS 2015 分词系统使用

自然 言的处理的第一步是分词。近期使用了中科院分词系统NLPIR/ICTCLAS 2016。在2014版本以及之前称为ICTCLAS,之后的版本都更名为NLPIR。 新版简介如下:        词法分析是自然语言处理的基础与关键。 张华平博士在多年研究工作积累的基础上, 研制出了 NLPIR 分词系统, 主要功能包括中文分词; 英文分词; 词性标注; 命名实体识别;

Gatherfly 的博客 1万+

ICTCLAS分词系统研究(五)--N最短路径

 ICTCLAS和别的分司系统不一样的地方就是于--N最短路径分词算法。所谓N最短路径其实就是最短路径和最大路径的折中,保留前N个最优路径。这样做的目的就是对这两种方法取长补短,既能达到一个比较理解的分词不达意效果,又能保证分词不达意速度。在此处,我们中国人的中庸思想被完美体现:)。在N-最短路径求解之前,ICTCLAS首先通过二叉分词图表(邻接表,如下图一所示)表示出了每个词组之间的耦合

张新波的技术随笔 1万+

中文分词工具探析(一):ICTCLAS (NLPIR)

【开源中文分词工具探析】系列: 开源中文分词工具探析(一):ICTCLAS (NLPIR) 开源中文分词工具探析(二):Jieba 开源中文分词工具探析(三):Ansj 开源中文分词工具探析(四):THULAC 开源中文分词工具探析(五):FNLP 开源中文分词工具探析(六):Stanford CoreNLP 开源中文分词工具探析(七):LTP 1. 前言 ICTCLAS是张华平老师推出的...

weixin_34228662的博客 616

ICTCLAS中文分词系统

中关村开发的中文分词系统,版本为当前最新,支持32位操作系统

词性标注

(纯属为了记录自己学习的点滴过程,99%都是复制别人的东西,引用资料都附在参考列表) 1 基本概念 什么是词性 在语言学上,词性(Par-Of-Speech, Pos )指的是单词的语法分类,也称为词类。同一个类别的词语具有相似的语法性质,所有词性的集合称为词性标注集。不同的语料库采用了不同的词性标注集,一般都含有形容词、动词、名词等常见词性。下图就是HanLP输出的一个含有词性的结构化句子。 词性的用处 词性的作用是提供词语的抽象表示,词的数量是无穷的,但词性的数量是有限的。词性支撑着许多高级应用,当下游

runing 6230

ICTCLAS2016分词系统

最好的中文分词算法,新鲜出炉,不过里面的文件是2014的

基于NLPIR(ICTCLAS2013)的中文分词C#实例

NLPIR(ICTCLAS2013)是由张华平博士发布的中文分词系统,可用多种语言进行二次开发,该资源是用C#语言在VS2010环境下在http://www.nlpir.org/提供的原示例基础上进行改进后的示例程序。

中文分词器ICTCLAS使用方法(Java)

http://www.cnblogs.com/CheeseZH/archive/2012/11/27/2791037.html 吃水不忘挖井人,这篇文章给了我很大帮助:http://blog.youkuaiyun.com/caimo/article/details/7686872,这篇文章写的蛮详细,不过是ICTCLAS在web项目中的应用,于是我借花献佛,把它整理了一下成为java项目的应用。 1、到I...

weixin_34055787的博客 1438

ICTCLAS50_Windows_64_C(2).rar

中文分词标记软件,很好用的哦,特别适合有分词需求的用户

ICTCLAS分词系统Java调用接口在Eclipse中的安装

ICTCLAS分词系统Java调用接口在Eclipse中的安装 实验环境:JDK1.5、Eclipse3.1、XP操作系统 分词系统Java接口解压包:d:/fenci(http://www.nlp.org.cn中查找下载) 导入步骤: 在Eclipse中新建Java项目,名称为:WordSpli,目录结构如下所示:  右击WordSplit项目,选择“导入”,将弹出导入窗口,选

淡泊明智 宁静志远 1万+

ictclas分词系统

中科院的分词系统,非常有用。不过需要安装java才能运行。适合win32位系统使用。如有使用错误,请联系作者。

Mac上安装Label Studio

以上步骤详细说明了如何在Mac上通过Anaconda安装Label Studio。记得根据你的具体需求选择是否创建新的环境,并使用conda或pip进行安装。安装完成后,务必验证Label Studio是否成功运行。

g2526的博客 1958

中科院分词系统ICTCLAS50 (Linux)

1. 首先将需要用到的文件拷到相应目录下,包括: Data(文件夹) Configure.xml ICTCLAS50.h libICTCLAS50.a libICTCLAS50.so user.lic 2. 示例代码如下: #ifndef OS_LINUX #include #pragma comment(lib, "ICTCLAS50.lib") //ICTCLAS50.l

~菜鸟学飞~的专栏 2754

Stm32L0 STM32CUBE中UART和使用LPUART1以及串口不进中断问题解决

/* 开启串口1中断 */ LL_USART_EnableIT_RXNE(LPUART1); /* 开启串口2中断 */ LL_USART_EnableIT_RXNE(USART2);

シ❤゛甜虾的个人博客 7686

ICTCLAS分词系统

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

yanyongshan的专栏 1075

JSP期末考试复习习题及答案

以下习题是对于平时课堂小测的整理,如有错误敬请指正! 欢迎一起交流~ 预祝各位小伙伴们考试顺利! Test1 一. 单选题 – 1.(单选题)当用户请求jsp页面时,JSP引擎就会执行该页面的字节码文件响应客户的请求,执行字节码文件的结果是() A. 发送一个JSP源文件到客户端 B. 发送一个Java文件到客户端 C. 发送一个HTML页面到客户端 D. 什么都不做 – 2.(单选题)下列动态网页和静态网页的根本区别描述错误的是( D) A. 静态网页服务器端返回的HTML文件是事先存储好的 B. 动.

技术小白 2万+

科普:Frenet坐标

理想情况下,描述这种常见驾驶行为在数学上应该很容易。一种方法是使用新的坐标系。现在,而不是放下一个正常的笛卡尔网格,我们做一些事情,就像你看到下面…Frenet Coordinates是一种以比传统x,y笛卡尔坐标更直观的方式表示道路位置的方式。如果我们想要方程式来描述这个动作,那就不容易了!想象一下像下面这样一条弯曲的道路,笛卡尔坐标系就位于它的上面…使用这些笛卡尔坐标,我们可以尝试描述车辆通常在路上行驶的路径…那么在Frenet坐标系下呈现的典型轨迹是什么样的?在这里,我们定义了一个新的坐标系统。

OceanStar的博客 1万+
上一篇: 在网络中使用IO流进行数据收发
下一篇: ICTCLAS分词系统研究(八)--生成最终分词结果
sinboy
博客等级 码龄25年 239粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值