ICTCLAS分词系统研究(九)--对最终结果做优化调整

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

在研究(八)中,我们得到了最终的分词结果了,好兴奋呀。不过,还有临门一脚不能忘了,对一些特殊情况做处理。主要是对叠词(相邻的两个字或词一样)及个别词性进行合并处理。

比如,以“一片片的白云很好看”,他的最终分词结果是:

 经过优化后的分词结果:

序号分词结果
0一/m 片/q 片/q 的/uj 白云/n 很/d 好看/a

很显然,“一片片”应该为一个整体,没有拆分的必要,看源代码的调整过程:

//Adjust the result with some rules
bool CResult::Adjust(PWORD_RESULT pItem,PWORD_RESULT pItemRet)
{
    
int i=0,j=0;
    unsigned 
int nLen;
    
char sSurName[10],sSurName2[10],sGivenName[10];
    
bool bProcessed=false;//Have been processed
    while(pItem[i].sWord[0]!=0)
    
{
        nLen
=strlen(pItem[i].sWord);
        bProcessed
=false;
        
        
//Rule1: adjust person name
        if(pItem[i].nHandle==28274&&ChineseNameSplit(pItem[i].sWord,sSurName,sSurName2,sGivenName,m_uPerson.m_dict)&&strcmp(pItem[i].sWord,"叶利钦")!=0)//'nr'
        {//Divide name into surname and given name
            
            
if(sSurName[0])
            
{
                strcpy(pItemRet[j].sWord,sSurName);
                pItemRet[j
++].nHandle=28274;
            }

            
if(sSurName2[0])
            
{
                strcpy(pItemRet[j].sWord,sSurName2);
                pItemRet[j
++].nHandle=28274;
            }

            
if(sGivenName[0])
            
{
                strcpy(pItemRet[j].sWord,sGivenName);
                pItemRet[j
++].nHandle=28274;
            }

            bProcessed
=true;
        }

        
//Rule2 for overlap words ABB 一段段、一片片
        else if(pItem[i].nHandle==27904&&strlen(pItem[i+1].sWord)==2&&strcmp(pItem[i+1].sWord,pItem[i+2].sWord)==0)
        
{//(pItem[i+1].nHandle/256=='q'||pItem[i+1].nHandle/256=='a')&&
            strcpy(pItemRet[j].sWord,pItem[i].sWord);
            strcat(pItemRet[j].sWord,pItem[i
+1].sWord);
            strcat(pItemRet[j].sWord,pItem[i
+2].sWord);
            pItemRet[j].nHandle
=27904;
            j
+=1;
            i
+=2;
            bProcessed
=true;
        }

        
//Rule3 for overlap words AA
        else if(nLen==2&&strcmp(pItem[i].sWord,pItem[i+1].sWord)==0)
        
{
            strcpy(pItemRet[j].sWord,pItem[i].sWord);
            strcat(pItemRet[j].sWord,pItem[i
+1].sWord);
             
//24832=='a'*256
            pItemRet[j].nHandle=24832;//a
            if(pItem[i].nHandle/256=='v'||pItem[i+1].nHandle/256=='v')//30208='v'8256
            {
                pItemRet[j].nHandle
=30208;
            }

            
if(pItem[i].nHandle/256=='n'||pItem[i+1].nHandle/256=='n')//30208='v'8256
            {
                pItemRet[j].nHandle
='n'*256;
            }
            
            i
+=1;
            
if(strlen(pItem[i+1].sWord)==2)
            
{//AAB:洗/洗/脸、蒙蒙亮
                if((pItemRet[j].nHandle==30208&&pItem[i+1].nHandle/256=='n')||
                   (pItemRet[j].nHandle
==24832&&pItem[i+1].nHandle/256=='a')
                   )
                
{
                    strcat(pItemRet[j].sWord,pItem[i
+1].sWord);
                    i
+=1;
                }

            }

            j
+=1;
            bProcessed
=true;
        }


        
//Rule 4: AAB 洗/洗澡
        else if(nLen==2&&strncmp(pItem[i].sWord,pItem[i+1].sWord,2)==0&&strlen(pItem[i+1].sWord)==4&&(pItem[i].nHandle/256=='v'||pItem[i].nHandle==24832))//v,a
        {
            strcpy(pItemRet[j].sWord,pItem[i].sWord);
            strcat(pItemRet[j].sWord,pItem[i
+1].sWord);
             
//24832=='a'*256
            pItemRet[j].nHandle=24832;//'a'
            if(pItem[i].nHandle/256=='v'||pItem[i+1].nHandle/256=='v')//30208='v'8256
            {
                pItemRet[j].nHandle
=30208;
            }


            i
+=1;
            j
+=1;
            bProcessed
=true;
        }

        
else if(pItem[i].nHandle/256=='u'&&pItem[i].nHandle%256)//uj,ud,uv,uz,ul,ug->u
            pItem[i].nHandle='u'*256;
        
else if(nLen==2&&strncmp(pItem[i].sWord,pItem[i+1].sWord,2)==0&&strlen(pItem[i+1].sWord)==4&&strncmp(pItem[i+1].sWord+2,pItem[i+2].sWord,2)==0)
        
{//AABB 朴朴素素 枝枝叶叶
                strcpy(pItemRet[j].sWord,pItem[i].sWord);
                strcat(pItemRet[j].sWord,pItem[i
+1].sWord);
                strcat(pItemRet[j].sWord,pItem[i
+2].sWord);
                pItemRet[j].nHandle
=pItem[i+1].nHandle;
                i
+=2;
                j
+=1;
                bProcessed
=true;
        }

        
else if(pItem[i].nHandle==28275)//PostFix
        {
            
if(m_uPlace.m_dict.IsExist(pItem[i+1].sWord,4))
            
{
                strcpy(pItemRet[j].sWord,pItem[i].sWord);
                strcat(pItemRet[j].sWord,pItem[i
+1].sWord);
                pItemRet[j].nHandle
=28275;
                i
+=1;
                j
+=1;
                bProcessed
=true;
            }

            
else if(strlen(pItem[i+1].sWord)==2&&CC_Find("队",pItem[i+1].sWord))
            
{
                strcpy(pItemRet[j].sWord,pItem[i].sWord);
                strcat(pItemRet[j].sWord,pItem[i
+1].sWord);
                pItemRet[j].nHandle
=28276;
                i
+=1;
                j
+=1;
                bProcessed
=true;
            }

            
else if(strlen(pItem[i+1].sWord)==2&&CC_Find("语文字杯",pItem[i+1].sWord))
            
{
                strcpy(pItemRet[j].sWord,pItem[i].sWord);
                strcat(pItemRet[j].sWord,pItem[i
+1].sWord);
                pItemRet[j].nHandle
=28282;
                i
+=1;
                j
+=1;
                bProcessed
=true;
            }

            
else if(strlen(pItem[i+1].sWord)==2&&CC_Find("裔",pItem[i+1].sWord))
            
{
                strcpy(pItemRet[j].sWord,pItem[i].sWord);
                strcat(pItemRet[j].sWord,pItem[i
+1].sWord);
                pItemRet[j].nHandle
=28160;
                i
+=1;
                j
+=1;
                bProcessed
=true;
            }

        }

        
else if(pItem[i].nHandle==30208||pItem[i].nHandle==28160)//v
        {
            
if(strlen(pItem[i+1].sWord)==2&&CC_Find("员",pItem[i+1].sWord))
            
{
                strcpy(pItemRet[j].sWord,pItem[i].sWord);
                strcat(pItemRet[j].sWord,pItem[i
+1].sWord);
                pItemRet[j].nHandle
=28160;
                i
+=1;
                j
+=1;
                bProcessed
=true;
            }

        }

        
else if(pItem[i].nHandle==28280)
        
{//www/nx ./w sina/nx; EIM/nx  -601/m 
            strcpy(pItemRet[j].sWord,pItem[i].sWord);
            pItemRet[j].nHandle
=28280;
            
while(pItem[i+1].nHandle==28280||strstr("..",pItem[i+1].sWord)||(pItem[i+1].nHandle==27904&&IsAllNum((unsigned char *)pItem[i+1].sWord)))
            
{
                strcat(pItemRet[j].sWord,pItem[i
+1].sWord);
                i
+=1;
            }

            j
+=1;
            bProcessed
=true;
        }


        
if(!bProcessed)
        
{//If not processed,that's mean: not need to adjust;
         
//just copy to the final result
            strcpy(pItemRet[j].sWord,pItem[i].sWord);
            pItemRet[j
++].nHandle=pItem[i].nHandle;
        }

        i
++;
    }

    pItemRet[j].sWord[
0]=0;//Set ending
    return true;
}

 

调整合并后的最终分词结果为:

一片片/m 的/u 白云/n 很/d 好看/a

至此,我们终于完成了整个分词的流程,得到了正确的切分结果^_^

ICTCLAS中文分词工具Java版实现与优化 ICTCLAS(Institute of Computing Technology, Chinese Lexical Analysis System)是由中国科学院计算技术研究所研发的高效中文分词工具,自2002年发布以来广泛应用于自然语言处理领域。该系统基于隐马尔可夫模型(HMM)和最大熵模型实现未登录词识别与精确切分,支持词性标注、新词发现等核心功能。CRF的优势来源于其灵活的特征函数设计。 阅读详情

相关推荐

Vue 实现华视身份证读卡器功能

在www.downcc.com下载“华视cvr100驱动”安装程序; 华视电子官网有相应的文档说明和程序下载 一、服务安装 选择安装目录: 启动读卡服务: 安装成功会有如图所示: 注意事项: 安装开发包必须使用管理员权限,因为windows服务和读卡器设备驱动程序均需要管理员权限,否则会安装失败。 win10需要修改组策略才有管理员权限。 二、服务的使用 打开浏览器,输入地址http://127.0.0.1:19196/mainpage,回车 点击openDevice: 点.

zyqgt960812的博客 6503

细说中文分词

完整的中文自然语言处理过程一般包括以下五种中文处理核心技术:分词、词性标注、命名实体识别、依存句法分析、语义分析。其中,分词是中文自然语言处理的基础,搜素引擎、文本挖掘、机器翻译、关键词提取、自动摘要生成等等技术都会用到中文分词,包括最近在学习的聊天机器人、文本相似性等。可以说分词是自然语言大厦的地基,下面就让我们从它开始谈起。 什么是中文分词 中文分词就是将中文语句中的词汇按照使用时的...

一起记录GIS学习 6270

雷达信号处理——恒虚警检测(CFAR)

上图展示的是同时在距离维和多普勒维进行恒虚警检测的原理,如果只是在距离维或多普勒维做CFAR,检测单元的左右两侧均有设定好数量的保护单元和参考单元。不同的CFAR检测器适用于不同的场景,CA-CFAR算法适用于均匀环境中的单目标或彼此相距较远的多目标环境,在邻近多目标环境会发生目标的遮蔽效应,在杂波边缘会发生杂波边缘效应。从图中也可以看到,根据阈值的选择不同,有不同的检测器,其中CA-CFAR是取的参考单元的均值,SO-CFAR取的是参考单元的最小值,而GO-CFAR是取的参考单元的最大值。

诚朴勇毅 3万+

06 | jieba分词:如何基于感情色彩进行单词数量统计?

在涉及运营、市场的工作中,我们经常需要根据产品评论的情感分析,来了解某一产品的口碑。所谓的情感分析,就是指根据用户对产品的评论,分析出用户对产品的喜好程度。最简单的,我们会的,然后根据反馈结果改变产品的特性。稍微复杂一点的,我们会。如果靠人工对产品评价进行辨析,有很大的局限性:一个是不够公平,因为每个人对词语感情色彩的理解并不是完全一致的;另一个是产品评价有很多,而且还会不定期增加,人工分析很难保证及时性。

qq_37756660的博客 1364

wintab开发例程

 タブレットとスタイラスペンを使うと、パソコンに手書きの線を入力できます。筆圧を入力することができるので毛筆のような表現も可能です。ペンの傾きを入力できる機種もあり、アイデア次第で面白いことに使えそうです。  私は昔(94年頃)、WACOMのタブレットを用いたプログラム開発をしたことがあります。当初A3版ほどの大きさのUDというタブレットを使っていて、その後 ArtPad という小さいサイズの

grass168的专栏 3240

点击率预测的贝叶斯平滑

概述 电商领域中经常需要计算或预测一些转化率指标,如最典型的CTR(点击率,Click-Through Rate)。这些转化率可以是模型的预测值,也可以作为模型的特征(feature)使用。以商品点击率预测为例,CTR的值等于点击量(Click)除以曝光量(Impression或Exposure)。以rr表示点击率, r=CI(1)r=\frac{C}{I} \tag{1}. 但在实际应

小平子的专栏 3万+

举例说明IT分词器的分词粒度优化

IK分词器还具备新词发现的能力,可以根据大量的文本数据自动识别和添加新词到词库中,从而提高对新词的分词准确率。在这个例子中,“乒乓球拍”和“拍卖”都是合理的词,但根据上下文,ik_smart可能更倾向于将“乒乓球拍”作为一个整体来处理,而ik_max_word则会给出两种可能的分词结果。对于“卷积神经网络”这样的专业术语,IK分词器能够保持其完整性,避免将其拆分为“卷积”、“神经”和“网络”等单独的词。对于包含专业术语的文本,IK分词器通过内置的词库和算法,能够准确识别并保留这些术语,避免错误的切分。

DKPT的博客 505

解析vCard 3.0:提取电子名片中的姓名

N:LastName;FirstName;;;END:VCARD和END:VCARD标记数据块的开始和结束。N字段存储结构化姓名(分号分隔)。FN字段为直接可读的显示名称。其他字段如TELEMAIL等保存联系信息。

qq_45797625的博客 2778

ICTCLAS使用心得

最近毕设需要用到ICTCLAS分词系统,这个系统是中科院计算所研发的,搞文本的应该都知道吧。 这个系统有好多版本并且不同系统也有很多种版本。 1、首先下载ICTCLAS50_Windows_64_JNI.rar,解压之后把其中API文件夹下的所有文件拷贝到eclipse工程下。 2、把测试文件放到工程根目录下, 3.点击桌面开始->运行,键入cmd进入dos界面的命令行 4.进入到...

weixin_34310785的博客 374

手把手教你学 MATLAB 实战训练(6.5):基础实战实例

MATLAB 是一款强大的数学软件,广泛应用于工程计算、信号处理、控制系统设计、图像处理等领域。学习 MATLAB 不仅可以提高你的编程技能,还能帮助你解决实际的数学和工程问题。下面我将通过几个实战训练实例来教你如何使用 MATLAB。

xiaoheshang_123的博客 366

Vue - 最新详细实现滑块拖动拼图验证,网站登录验证滑块验证功能,拖动滑块到图片缺口的位置即为成功,滑块验证安全检测(详细示例代码,一键复制运行)

您一定见过很多系统都“配备”了滑块验证、拼图验证、找不同等,本质上都是为了验证登录系统的是人还是机器(代码),如下图所示效果: 您打开项目根目录,终端执行如下命令:拼图式拖动滑块验证 验证拖动滑块验证,滑动拼图/图片点选验证 接下来,在中加入以下代码: 如下图所示: 更多配置示例和参数详见官方文档,以下便是如上效果图的代码:.........

🏆 前端领域优质创作者 1万+

ICTCLAS代码学习笔记之Utility

Utility.h和Utility.cpp是一些常调用的公有函数的集合。声明了一些宏和字符串操作的一些函数,具体说明如下: 定义了句子开始标记CT_SENTENCE_BEGIN和结束标记CT_SENTENCE_END。定义了字符(包括单字节和双字节)的类型属性:单字节字符CT_SINGLE,一般为ASCII码范畴字符;分割符CT_DELIMITER主要为双字节情况,对于单字节的分割符在当前版本中

princes_fan的专栏 828

Qt入门教程【环境搭建篇】Qt6+Mingw+QMake+QtCreator

Qt Windows平台安装

小鱼酱的博客 2万+

ICTCLAS分词系统

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

yanyongshan的专栏 1075

IEM模型,地表粗糙度模拟

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

张新波的技术随笔 7965

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ICTCLAS分词系统研究(八)--生成最终分词结果

经过人名、地名等未登陆词的识别之后,再次生成二叉分词图表,求取N-最短路径。为何再次执行这样的循环,是因为在得到初分结果后又增加了新的节点(比如:人名或地名)到结果链表中,需要再次求取最短路径:经过优化后的二叉分词图表:   1 2 3

张新波的技术随笔 7196

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

THULAC性能大揭秘:与LTP、ICTCLAS、结巴分词的全面对比

THULAC作为一款高效的中文词法分析工具,在自然语言处理领域备受关注。本文将深入剖析THULAC的性能表现,并与LTP、ICTCLAS、结巴分词等主流中文分词工具进行全面对比,为您揭示THULAC的核心优势。 ## 🌟 评测环境与标准 为确保对比的公正性和准确性,所有测试均在统一环境下进行。评测环境采用Intel Core i5 2.4 GHz处理器,操作系统为Windows。测试标准严格

gitblog_01078的博客 966

在DNN中集成ICTCLAS中文分词功能

DNN中默认的分词功能是根据空格来分词,不支持中文和其他语言的分词功能。具体解释可以参看:DNN搜索引擎研究 http://www.cnblogs.com/Athos/archive/2007/01/19/624979.html 我这里不多说,因为时间关系,我通过简单的修改DNN中的Provider.Search.DataStore工程中的Split处为ICTCLAS的分词功能来实现中文分

埃秒人生(MicroDream Soft) 1627

在lucene中使用ictclas算法 实现对中文分词索引

在lucene中使用ictclas算法<br />分词研究2010-03-29 16:38:51阅读132评论0  字号:大中小 订阅给Lucene加入性能更好的中文分词 <br />      Lucene本身的StandardAnalyzer提供了中文分词接口,不过其采用的为1-gram. 这种分词方法虽然不会损失任何索引信息,但是造成的索引垃圾太多,用户得到的查询结果中垃圾也是很多. 经过认真研究了Lucene的Analysis包,我写了一个TjuChineseAnalyzer,效果不错. <br /

华工智能计算实验室评论挖掘团队的专栏 904

商品搜索引擎---分词(插件介绍与入门实例)

最近刚好在学习搜索引擎分词,有了解一些分词插件,在这里给各位猿友分享一下。本文主要介绍四个分词插件(ICTCLAS、IKAnalyzer、Ansj、Jcseg)和一种自己写算法实现的方式,以及一些词库的推荐。一、ICTCLAS1.1、介绍中文词法分析是中文信息处理的基础与关键。中国科学院计算技术研究所在多年研究工作积累的基础上,研制出了汉语词法分析系统ICTCLAS(Institute of Com

小宝鸽 1万+

ictclas4j 分词工具包 安装流程

首先把 ictclasj解压缩,然后 1.把 Data文件夹整个拷贝到 Eclipse项目的文件夹下, 2.而 bin目录下的 org文件夹整个拷贝到你 Eclipse项目的 bin目录下,(将class文件存进去) 3.把src目录下的org文件夹整个拷贝到 Eclipse项目 的src目录下。 4.把目录中commons-lang-2.4.jar 加到项目中(右键新建fold...

weixin_30445169的博客 237

java分词标注工具_分词工具比较(转)

IKAnalyzerIKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IKAnalyzer3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。...

weixin_28836875的博客 817

商品搜索分词java_商品搜索引擎---分词(插件介绍与入门实例)

最近刚好在学习搜索引擎分词,有了解一些分词插件,在这里给各位猿友分享一下。本文主要介绍四个分词插件(ICTCLAS、IKAnalyzer、Ansj、Jcseg)和一种自己写算法实现的方式,以及一些词库的推荐。一、ICTCLAS1.1、介绍中文词法分析是中文信息处理的基础与关键。中国科学院计算技术研究所在多年研究工作积累的基础上,研制出了汉语词法分析系统ICTCLAS(Institute of Co...

weixin_32262089的博客 774
上一篇: ICTCLAS分词系统研究(八)--生成最终分词结果
下一篇: ICTCLAS分词系统研究(十)--后记
sinboy
博客等级 码龄25年 239粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值