Board logo

标题: 使用ICTCLAS分词器 Java版 [打印本页]

作者: look_w    时间: 2019-4-17 18:38     标题: 使用ICTCLAS分词器 Java版

ICTCLAS分词器  汉语词法分析系统ICTCLAS(Institute of Computing Technology, Chinese Lexical Analysis System),主要功能包括中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典。



    词是最小的能够独立活动的有意义的语言成分,但汉语是以字为基本的书写单位,词语之间没有明显的区分标记,因此,中文词法分析是中文信息处理的基础与关键。所有涉及中文内容处理的系统,如果没有一个好的中文词法分析系统支持,正确率都会受很大影响。汉语自动智能分词是中文信息处理的基础与关键。所有涉及中文内容处理的系统,如果没有一个好的中文词法分析系统支持,正确率都会受很大影响。具体来说,汉语自动智能分词的主要应用领域包括:

    中文输入输出技术:连续语音识别、小键盘智能拼音输入、高自然度语音合成、视频文字识别、OCR;自动校对;高性能的汉字编码识别、简繁体智能转换
    语言学分析:重复串分析、新词识别、句法分析、篇章分析、语义理解与歧义消解
    文本挖掘:自动文摘、命名实体识别与信息抽取、文本分类、文本聚类、信息过滤、自动问答
    Web挖掘:信息检索(搜索引擎、问答式搜索引擎、面向行业的专业搜索引擎)、查询扩展
    智能应用:机器翻译、外语辅助写作、用户兴趣发现、情报分析、垃圾邮件与垃圾短信过滤、有害(垃圾、诈骗、色情、反动)信息监控等
    信息增值服务:商情信息自动抽取与统计分析,如房地产信息、产品采购与销售信息


    中文词法分析又是一个非常困难的问题,其难点主要体现在以下几方面:

    词语切分:由于汉语词语之间没有空格分开,需要从连续的汉字串中正确辨认汉语的词语,常见的歧义现象如:“的确切”可能是“的确/切”或者“的/确切”, “马上”可能是一个词表示很快,也可能是两个词“马/上”表示位置;这些类型的歧义现象在汉语中非常常见,会对汉语词语切分造成极大的干扰
    未定义词识别:词典中不可能收录所有的词语,大量的人名、地名、机构名、外来语译名、新词语等等,如“王小山、十里堡、北京计算机研究所、瓦杰帕依、非典”等等,都需要通过软件来自动识别,而在汉语中这些未定义词没有空格作为边界,其组成成分又是有意义的普通汉字,因此识别难度很大
    词性标注:汉语中词语兼类情况非常常见,比如说“领导”可以是动词、也可以是名词,要正确标注出每个词的词性,也有很多困难


    虽然汉语词法分析的研究已经有了很长的历史,但在很多应用系统中,速度快的系统分词准确性不能达到实用化要求,准确率高的系统往往使用了大量的知识库,速度不能达到大规模应用的要求。


本次使用的是纯Java版本的ICTCLAS,下载地址在http://ictclas.org/Down_OpenSrc.asp

好,假设你已经下载了我们需要使用的Java版本ictclas4j,现在把它解压缩,然后把Data文件夹整个拷贝到Eclipse项目的文件夹下,而bin目录下的org文件夹整个拷贝到你Eclipse项目的bin目录下,把src目录下的org文件夹整个拷贝到Eclipse项目的src目录下(最简单快捷的使用方式,或者你自己打成jar包,这样无论放到哪里,都可以在build path里面导入这个jar包啦)。

现在就可以在你的项目里新建一个类来试试。我新建了一个类,代码如下:

    import org.ictclas4j.bean.SegResult;
     
    import org.ictclas4j.segment.SegTag;
     
    public class OneMain {
     
        public static void main(String[] args) {
     
            System.out.println("This is OneMain");
     
            SegTag st = new SegTag(1);
     
            SegResult sr = st
     
            .split("一块勤奋地漂亮的一块钱,/打造经济的航空母舰。ABCD.#$% Hello World!\n又一段文本123辆 !3.0");
     
            System.out.println(sr.getFinalResult());
     
        }
     
    }



很显然文本“一块勤奋地漂亮的一块钱,/打造经济的航空母舰。ABCD.#$% Hello World!"n又一段文本123辆 !3.0”就是我们用来测试的文本,其中包含了中文,英文,标点符号,乱七八糟符号(笑)及阿拉伯数字。

我们运行刚才的程序,看下输出结果:

This is OneMain

一块/s 勤奋/a 地/u 漂亮/a 的/u 一/m 块/q 钱/n ,/w //nx 打造/v 经济/n 的/u 航空母舰/n 。/w ABCD.#$%/nx Hello/nx World/nx !/w 又/d 一/m 段/q 文本/n 123/m 辆/q

看到了么,分词的结果是一个长长的String类数据,用空格区分出每个词,每个词还用/后面的英文标号标出了词性。一起来看看几个有趣的地方。

原文中其实有两个“一块”,一处是“一块勤奋”,这里很正确的识别为了副词,而后面的“一块钱”中的“一块”也正确的识别为数量词。

阿拉伯数字正确识别为数词,包括小数形式的“3.0”。而英文和乱七八糟符号(包括那个不可见的换行符,你找到它在哪了吗?)则都被划为一类——/nx!(因为我也不知道ICTCLAS内部人员管它叫什么啦,非法字符啊,还是无效字符啊,或者其它字符啊,名字可以自己取嘛)

测试文本中还有两个叹号,一个是英文半角的!,一个是中文全角的!,两者也都被正确识别为标点符号,但英文的句号“.“就被认为是/nx啦。

测试文本中的空格被完全忽略。

好,十分简单对不对?去玩玩吧。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0