论坛首页 Java企业应用论坛

发布IK Analyzer 3.0 中文分词器

浏览 64775 次
该帖已经被评为精华帖
作者 正文
   发表时间:2009-07-25  
new IKAnalyzer();
jdk5.0 jdk6.0下都报一个错

java.lang.UnsupportedClassVersionError: Bad version number in .class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Exception in thread "main"
0 请登录后投票
   发表时间:2009-07-25  
什么问题啊,才下载下来的jar包,才新建的工程都报这个错,还未解决,编译器版本都改了
0 请登录后投票
   发表时间:2009-07-25  
sunjun 写道
new IKAnalyzer();
jdk5.0 jdk6.0下都报一个错

java.lang.UnsupportedClassVersionError: Bad version number in .class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Exception in thread "main"


你是不是用的是Eclipse里面的jdk版本不多啊。别急,排查一下系统环境吧,包括你是不是装了oracle之后,默认jdk的路径被改了。。。。
从错误上看,就是版本不支持造成的
0 请登录后投票
   发表时间:2009-07-27  
linliangyi2007 写道
sunjun 写道
new IKAnalyzer();
jdk5.0 jdk6.0下都报一个错

java.lang.UnsupportedClassVersionError: Bad version number in .class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Exception in thread "main"


你是不是用的是Eclipse里面的jdk版本不多啊。别急,排查一下系统环境吧,包括你是不是装了oracle之后,默认jdk的路径被改了。。。。
从错误上看,就是版本不支持造成的


我也遇到同样的问题.我是在Eclipse里做的,后来发现用的是JDK5,改成JDK6,重编译一下,就行了!
0 请登录后投票
   发表时间:2009-07-27  
以下我是写的测试IK分词的性能,请楼主指正.

		IKAnalyzer analyzer = new IKAnalyzer();
		String fileContent = "IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IK Analyzer 3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。 ";
		StringReader reader = new StringReader(fileContent);
		
		long startTime = System.currentTimeMillis();	//开始时间
		
		TokenStream ts = analyzer.tokenStream("*", reader);
		Token t = null;

		while ((t = ts.next()) != null) {
			System.out.print(t.termText() + "|");
		}
		System.out.println("");

		long endTime = System.currentTimeMillis();	//结束时间
		System.out.println("IK分词耗时" + new Float((endTime - startTime)) / 1000 + "秒!");


测试结果是:
ik|analyzer|是|一个|一|个|开源|的|基于|java|语言|开发|的|轻量级|量级|的|中文|分词|工具包|工具|从|2006|年|12|月|推出|1.0|版|开始|ikanalyzer|已经|推出|出了|3|个大|个|版本|最初|它是|以|开源|项目|luence|为|应用|主体|的|结合|词典|分词|和|文法|分析|算法|的|中文|分词|词组|组件|新版本|新版|版本|的|ik|analyzer|3.0|则|发展为|发展|面向|java|的|公用|分词|词组|组件|独立|立于|lucene|项目|同时|提供|了|对|lucene|的|默认|优化|实现|

IK分词耗时0.812秒!
多次测试都接近这个值,数数这里也没有多少字,怎么会耗时接近1秒的?
期待楼主指点!谢谢!
0 请登录后投票
   发表时间:2009-07-27  
rongxh7 写道
以下我是写的测试IK分词的性能,请楼主指正.

		IKAnalyzer analyzer = new IKAnalyzer();
		String fileContent = "IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IK Analyzer 3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。 ";
		StringReader reader = new StringReader(fileContent);
		
		long startTime = System.currentTimeMillis();	//开始时间
		
		TokenStream ts = analyzer.tokenStream("*", reader);
		Token t = null;

		while ((t = ts.next()) != null) {
			System.out.print(t.termText() + "|");
		}
		System.out.println("");

		long endTime = System.currentTimeMillis();	//结束时间
		System.out.println("IK分词耗时" + new Float((endTime - startTime)) / 1000 + "秒!");


测试结果是:
ik|analyzer|是|一个|一|个|开源|的|基于|java|语言|开发|的|轻量级|量级|的|中文|分词|工具包|工具|从|2006|年|12|月|推出|1.0|版|开始|ikanalyzer|已经|推出|出了|3|个大|个|版本|最初|它是|以|开源|项目|luence|为|应用|主体|的|结合|词典|分词|和|文法|分析|算法|的|中文|分词|词组|组件|新版本|新版|版本|的|ik|analyzer|3.0|则|发展为|发展|面向|java|的|公用|分词|词组|组件|独立|立于|lucene|项目|同时|提供|了|对|lucene|的|默认|优化|实现|

IK分词耗时0.812秒!
多次测试都接近这个值,数数这里也没有多少字,怎么会耗时接近1秒的?
期待楼主指点!谢谢!



你的测试有两个问题,第一,你把词典加载初始化的时间算在分词时间内了;第二,你使用了System.out.print()输出分词结果的时候,打印也是很耗时间的。;第三,建议你把测试用的文字使用for循环累加100次后,再做测试,这样的结果更准确。
一下是我自己的性能测试代码:
		String testString = "";
      
		for (int i = 0; i <300; i++) {
			testString += "xxxx此处忽略4000字的文章";
		}

		System.out.println("Length = " + testString.length());
		IKSegmentation ikSeg = new IKSegmentation(new StringReader(testString));
		
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		long begin = System.currentTimeMillis();   
		try {
			while( ikSeg.next()!= null);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        long end = System.currentTimeMillis();
        System.out.println("耗时 : " + (end - begin) + "ms");

		System.out.println("***************");	

这里我需要得出的是算法本身对速度的影响,就必须排除字典加载和输出的时间消耗。

0 请登录后投票
   发表时间:2009-07-27  
linliangyi2007 写道
rongxh7 写道
以下我是写的测试IK分词的性能,请楼主指正.

		IKAnalyzer analyzer = new IKAnalyzer();
		String fileContent = "IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IK Analyzer 3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。 ";
		StringReader reader = new StringReader(fileContent);
		
		long startTime = System.currentTimeMillis();	//开始时间
		
		TokenStream ts = analyzer.tokenStream("*", reader);
		Token t = null;

		while ((t = ts.next()) != null) {
			System.out.print(t.termText() + "|");
		}
		System.out.println("");

		long endTime = System.currentTimeMillis();	//结束时间
		System.out.println("IK分词耗时" + new Float((endTime - startTime)) / 1000 + "秒!");


测试结果是:
ik|analyzer|是|一个|一|个|开源|的|基于|java|语言|开发|的|轻量级|量级|的|中文|分词|工具包|工具|从|2006|年|12|月|推出|1.0|版|开始|ikanalyzer|已经|推出|出了|3|个大|个|版本|最初|它是|以|开源|项目|luence|为|应用|主体|的|结合|词典|分词|和|文法|分析|算法|的|中文|分词|词组|组件|新版本|新版|版本|的|ik|analyzer|3.0|则|发展为|发展|面向|java|的|公用|分词|词组|组件|独立|立于|lucene|项目|同时|提供|了|对|lucene|的|默认|优化|实现|

IK分词耗时0.812秒!
多次测试都接近这个值,数数这里也没有多少字,怎么会耗时接近1秒的?
期待楼主指点!谢谢!



你的测试有两个问题,第一,你把词典加载初始化的时间算在分词时间内了;第二,你使用了System.out.print()输出分词结果的时候,打印也是很耗时间的。;第三,建议你把测试用的文字使用for循环累加100次后,再做测试,这样的结果更准确。
一下是我自己的性能测试代码:
		String testString = "";
      
		for (int i = 0; i <300; i++) {
			testString += "xxxx此处忽略4000字的文章";
		}

		System.out.println("Length = " + testString.length());
		IKSegmentation ikSeg = new IKSegmentation(new StringReader(testString));
		
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		long begin = System.currentTimeMillis();   
		try {
			while( ikSeg.next()!= null);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        long end = System.currentTimeMillis();
        System.out.println("耗时 : " + (end - begin) + "ms");

		System.out.println("***************");	

这里我需要得出的是算法本身对速度的影响,就必须排除字典加载和输出的时间消耗。



楼主能对 string=“1/++” 或者string ="xxxx1/++" 分词吗?
这是一个bug吗?
java.lang.IllegalArgumentException: length < 0
at org.wltea.analyzer.Lexeme.<init>(Lexeme.java:37)
at org.wltea.analyzer.seg.QuantifierSegmenter.outputNumLexeme(QuantifierSegmenter.java:507)
at org.wltea.analyzer.seg.QuantifierSegmenter.processNumber(QuantifierSegmenter.java:186)
at org.wltea.analyzer.seg.QuantifierSegmenter.nextLexeme(QuantifierSegmenter.java:104)
at org.wltea.analyzer.IKSegmentation.next(IKSegmentation.java:70)
at org.wltea.analyzer.lucene.IKTokenizer.next(IKTokenizer.java:38)
at org.apache.lucene.analysis.TokenStream.next(TokenStream.java:91)



0 请登录后投票
   发表时间:2009-07-27  

引用

楼主能对 string=“1/++” 或者string ="xxxx1/++" 分词吗?
这是一个bug吗?
java.lang.IllegalArgumentException: length < 0
at org.wltea.analyzer.Lexeme.<init>(Lexeme.java:37)
at org.wltea.analyzer.seg.QuantifierSegmenter.outputNumLexeme(QuantifierSegmenter.java:507)
at org.wltea.analyzer.seg.QuantifierSegmenter.processNumber(QuantifierSegmenter.java:186)
at org.wltea.analyzer.seg.QuantifierSegmenter.nextLexeme(QuantifierSegmenter.java:104)
at org.wltea.analyzer.IKSegmentation.next(IKSegmentation.java:70)
at org.wltea.analyzer.lucene.IKTokenizer.next(IKTokenizer.java:38)
at org.apache.lucene.analysis.TokenStream.next(TokenStream.java:91)





非常感谢,这确实是个bug,会在下版本中修订,应该8月初就能推出
0 请登录后投票
   发表时间:2009-07-27  
我把源代码下载下来自己在JDK5。0的环境中编译了一下,就好了
0 请登录后投票
   发表时间:2009-07-27  
sunjun 写道
我把源代码下载下来自己在JDK5。0的环境中编译了一下,就好了


直接编译源码是最好的方式,还能学习和修改,这也是开源的目的
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics