首页 > 编程语言 >使用ICTCLAS分词器 Java版

使用ICTCLAS分词器 Java版

时间:2023-08-08 22:37:56浏览次数:53  
标签:词法 中文 文本 Java nx 汉语 分词器 ICTCLAS 识别



    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啦。

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

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





标签:词法,中文,文本,Java,nx,汉语,分词器,ICTCLAS,识别
From: https://blog.51cto.com/u_16218512/7013068

相关文章

  • java读写txt
    新建项目类得到结构如下:TestIo类中的代码:packageTest;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.FileWrite......
  • perl基本语言语法(与java,c#不同的地方积累)
    连接字符串 perl用.  “hello”+"hello" 可用x号 "hello"*3 “hellohellohello”java,c#用+"hello"+"hello"运算符perl等待输入:$line=<STDIN>;或者$line=<>;未定义的字符值undef--不会报错当作数字使用时为0当作字符串使用时为空判断是否为空用defined()数组......
  • 遇到的问题------------时间格式转化时java.text.ParseException: Unparseable date:
    -时间格式转化时java.text.ParseException:Unparseabledate:""异常把String time=2013-09-22用 privatefinalstaticSimpleDateFormatsimpleDateFormat=newSimpleDateFormat("yyyy-MM-ddhh:mm:ss");simpleDateFormat.parse(time.trim()));转化时报错java.text.......
  • java解析json
    {"status":0,"message":"ok","total":2,"results":[{"name":"蓝光COCO金沙","location":{"lat":30.68754......
  • java调用百度地图web服务api-----该方法可用在js跨域请求上
    百度地图Web服务API为开发者提供http接口,即开发者通过http形式发起检索请求,获取返回json或xml格式的检索数据。用户可以基于此开发JavaScript、C#、C++、Java等语言的地图应用。api官网说明链接:http://developer.baidu.com/map/webservice.htm可用接口列举:获取相关地址提示place......
  • 学好Elasticsearch系列-分词器
    本文已收录至Github,推荐阅读......
  • Spring-1-深入理解Spring XML中的依赖注入(DI):简化Java应用程序开发
    学习目标前两篇文章我们介绍了什么是Spring,以及Spring的一些核心概念,并且快速快发一个Spring项目,以及详细讲解IOC,今天详细介绍一些DI(依赖注入)能够配置setter方式注入属性值能够配置构造方式注入属性值能够理解什么是自动装配一、依赖注入(DI配置)1依赖注入方式【重点】......
  • Spring-2-深入理解Spring 注解依赖注入(DI):简化Java应用程序开发
    今日目标掌握纯注解开发依赖注入(DI)模式学习使用纯注解进行第三方Bean注入1注解开发依赖注入(DI)【重点】问题导入思考:如何使用注解方式将Bean对象注入到类中1.1使用@Autowired注解开启自动装配模式(按类型)@ServicepublicclassStudentServiceImplimplementsStuden......
  • 【JavaScript27】关于Function
    js中所有的函数都是通过Function构建的.在没有修改过原型链的情况下.以下等式是成立的.console.log(fn.proto.constructor===Function.prototype.constructor);console.log(fn.proto.constructor===Function);varfn=newFunction("console.log(123456);");//Funct......
  • 【JavaScript26】继承
    JS中实现继承,只需要改变函数的原型链即可示例functionCat(name){this.name=name;}Cat.prototype.eat_fish=function(fish){console.log(this.name,"在吃",fish);};functionBosiCat(name){this.name=name;}BosiCat.prototype.dance=functi......