- 浏览: 1013169 次
- 性别:
- 来自: 福州
最新评论
-
guanxin2012:
大神,您好。非常感谢您贡献了IKExpression。我们现在 ...
分享开源表达式解析器IK-Expression2.0 -
qqgigas:
LZ,public boolean createUser(LD ...
Sun Directory Server/LDAP学习笔记(二)——API说明及代码样例 -
gao_shengxian:
Hibernate: update T_GX_TEST set ...
优雅Java编程 之 使用Hibernate存储Oracle Spatial对象 -
a78113534:
感谢大神,在安卓里面调用成功了。
发布IK Expression开源表达式解析器 V2.1.0 -
majiedota:
加油
来自开源支持者的第一笔捐赠
最新版IKAnalyzer 3.0已发布,详细请浏览:http://linliangyi2007.iteye.com/blog/429960
客户词典扩展API,补充说明:
类 : org.mira.lucene.analysis.dict.Dictionary
方法 :public static void loadExtendWords(List wordList)
(PS:实际上该API一直存在于v2.0.2,都怪俺没做好API文档,自己汗一下 )
使用说明:
IKAnalyzer基于lucene2.0版本API开发,实现了以词典分词为基础的正反向全切分算法,是Lucene Analyzer接口的实现,代码使用例子如下:
分词效果测试,命令行如下:
java -classpath IKAnalyzer.jar;lucene-core-2.0.0.jar org.mira.lucene.analysis.IK_CAnalyzer 中华人民共和国香港特别行政区
性能与特性:
1. 正向全切分算法,42万汉字字符/每秒的处理能力(IBM ThinkPad 酷睿I 1.6G 1G内存 WinXP)
2. 对数量词、地名、路名的优化处理
3. 对未知词汇采用自识别结合二元切分算法,确保搜索召回率
V 2.0.2 修订 Bata版对二元切分的缺陷
正向全切分分词器:org.mira.lucene.analysis.IK_CAnalyzer(适合建索引时使用)
正向最大全切分分词器:org.mira.lucene.analysis.MIK_CAnalyzer(适合用户输入检索时使用)
下面演示“正向最大全切分分词器”效果:
例子:中华人民共和国香港特别行政区
0 - 7 = 中华人民共和国
7 - 14 = 香港特别行政区
例子:据路透社报道,印度尼西亚社会事务部一官员星期二(29日)表示,日惹市附近当地时间27日晨5时53分发
生的里氏6.2级地震已经造成至少5427人死亡?,20000余人受伤,近20万人无家可归。
1 - 4 = 路透社
4 - 6 = 报道
7 - 12 = 印度尼西亚
12 - 14 = 社会
14 - 17 = 事务部
17 - 18 = 一
18 - 20 = 官员
20 - 23 = 星期二
24 - 27 = 29日
28 - 30 = 表示
31 - 34 = 日惹市
34 - 36 = 附近
36 - 40 = 当地时间
40 - 43 = 27日
43 - 44 = 晨
44 - 46 = 5时
46 - 49 = 53分
48 - 50 = 分发
49 - 51 = 发生
52 - 54 = 里氏
54 - 58 = 6.2级
58 - 60 = 地震
60 - 62 = 已经
62 - 64 = 造成
64 - 66 = 至少
66 - 71 = 5427人
71 - 73 = 死亡
74 - 79 = 20000
79 - 81 = 余人
81 - 83 = 受伤
84 - 85 = 近
85 - 89 = 20万人
89 - 93 = 无家可归
一年后才发现没有上传jar包,汗到火星鸟!!
linliangyi2007 写道
herrapfel 写道
我把字典都转换成  \u661f 这种格式后,在WINDOWS下测试不能分词,比如说,测试中文是 "\u4E2D\u56FD\u4EBA\u52A0\u6CB9" 输出还是:  =====je analyzer====中国人加油没有进行任何分词请问该如何解决????你试试直接写中文吧你的java开发环境是什么编码的?UTF-8还是GBK?
中文也是一样的
ECLIPSE的编译环境原来是GBK,我刚改成UTF-8是了一下,同样也是不分词的.
你把读取字典的编码修改一下吧,尝试不用编码的读取,或者使用iso-8859-1,目前的症状更像你的字典没有载入成功
herrapfel 写道
我把字典都转换成  \u661f 这种格式后,在WINDOWS下测试不能分词,比如说,测试中文是 "\u4E2D\u56FD\u4EBA\u52A0\u6CB9" 输出还是:  =====je analyzer====中国人加油没有进行任何分词请问该如何解决????你试试直接写中文吧你的java开发环境是什么编码的?UTF-8还是GBK?
中文也是一样的
ECLIPSE的编译环境原来是GBK,我刚改成UTF-8是了一下,同样也是不分词的.
我把字典都转换成 \u661f 这种格式后,在WINDOWS下测试不能分词,比如说,测试中文是 "\u4E2D\u56FD\u4EBA\u52A0\u6CB9"
输出还是:
=====je analyzer====
中国人加油
没有进行任何分词
请问该如何解决????
你试试直接写中文吧
你的java开发环境是什么编码的?UTF-8还是GBK?
请教两个问题:
1.new String( str.getBytes("gbk"),"utf-8"); 这种方式可以转成 \u661f\ 这种格式的UTF-8吗?
2.另外如果我将字典里的文字写成 据这种UTF-8的话,需要修改哪个类才能让分词的时候不出现这种分词结果.
2 - 3 = x
3 - 6 = 636
6 - 7 = e
10 - 11 = x
11 - 12 = 8
12 - 15 = def
1.字符窜可以转成UTF-8编码,但编码本身是不会被输出的。
2.那个是分词器对数字和字母的切分算法,跟词典没有关系,修改词典是没有用的。IK2.0.2版本是将字母和数字进行切分了
herrapfel 写道
linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”dic文件都转成了这种内容的\u4e00\u5c0f\u5f04\u4e00\u90fd\u9547\u4e01\u4ed4\u5df7\u4e03\u661f\u4e95Dictionary类中所有的字典load方法,将InputStreamReader中的编码也修改为了UTF-8,但是通过public static String transJe(String testString,String c1,String c2) {String result = "";try { Analyzer analyzer = new MIK_CAnalyzer(); Reader r = new StringReader(testString); TokenStream ts = (TokenStream)analyzer.tokenStream("", r); System.out.println("=====je analyzer===="); Token t;while ((t = ts.next()) != null) {result += t.termText()+",";}}catch(Exception e){e.printStackTrace();}return result;} 你先试着在windows下面看看能不能分词。windows下在eclipse里是可以正常分词的那就是你在unix下读取的待分词的文字,其编码不是UTF-8的了,需要进行转换
请教两个问题:
1.new String( str.getBytes("gbk"),"utf-8"); 这种方式可以转成 \u661f\ 这种格式的UTF-8吗?
2.另外如果我将字典里的文字写成 据这种UTF-8的话,需要修改哪个类才能让分词的时候不出现这种分词结果.
2 - 3 = x
3 - 6 = 636
6 - 7 = e
10 - 11 = x
11 - 12 = 8
12 - 15 = def
linliangyi2007 写道
herrapfel 写道
linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”dic文件都转成了这种内容的\u4e00\u5c0f\u5f04\u4e00\u90fd\u9547\u4e01\u4ed4\u5df7\u4e03\u661f\u4e95Dictionary类中所有的字典load方法,将InputStreamReader中的编码也修改为了UTF-8,但是通过public static String transJe(String testString,String c1,String c2) {String result = "";try { Analyzer analyzer = new MIK_CAnalyzer(); Reader r = new StringReader(testString); TokenStream ts = (TokenStream)analyzer.tokenStream("", r); System.out.println("=====je analyzer===="); Token t;while ((t = ts.next()) != null) {result += t.termText()+",";}}catch(Exception e){e.printStackTrace();}return result;} 你先试着在windows下面看看能不能分词。
windows下在eclipse里是可以正常分词的
那就是你在unix下读取的待分词的文字,其编码不是UTF-8的了,需要进行转换
herrapfel 写道
linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”dic文件都转成了这种内容的\u4e00\u5c0f\u5f04\u4e00\u90fd\u9547\u4e01\u4ed4\u5df7\u4e03\u661f\u4e95Dictionary类中所有的字典load方法,将InputStreamReader中的编码也修改为了UTF-8,但是通过public static String transJe(String testString,String c1,String c2) {String result = "";try { Analyzer analyzer = new MIK_CAnalyzer(); Reader r = new StringReader(testString); TokenStream ts = (TokenStream)analyzer.tokenStream("", r); System.out.println("=====je analyzer===="); Token t;while ((t = ts.next()) != null) {result += t.termText()+",";}}catch(Exception e){e.printStackTrace();}return result;} 你先试着在windows下面看看能不能分词。
windows下在eclipse里是可以正常分词的
linliangyi2007 写道
herrapfel 写道
linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”
dic文件都转成了这种内容的
\u4e00\u5c0f\u5f04
\u4e00\u90fd\u9547
\u4e01\u4ed4\u5df7
\u4e03\u661f\u4e95
Dictionary类中所有的字典load方法,将InputStreamReader中的编码也修改为了UTF-8,但是通过
public static String transJe(String testString,String c1,String c2)
{
String result = "";
try
{
Analyzer analyzer = new MIK_CAnalyzer();
Reader r = new StringReader(testString);
TokenStream ts = (TokenStream)analyzer.tokenStream("", r);
System.out.println("=====je analyzer====");
Token t;
while ((t = ts.next()) != null)
{
result += t.termText()+",";
}
}
catch(Exception e)
{
e.printStackTrace();
}
return result;
}
你先试着在windows下面看看能不能分词。
Exception in thread "main" java.lang.NoSuchMethodError
这个异常可能是你使用的jdk版本同我打包时用的jdk版本不同的原因
linliangyi2007 写道
herrapfel 写道 linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8” dic文件都转成了这种内容的 \u4e00\u5c0f\u5f04 \u4e00\u90fd\u9547 \u4e01\u4ed4\u5df7 \u4e03\u661f\u4e95 Dictionary类中所有的字典load方法,将InputStreamReader中的编码也修改为了UTF-8,但是通过 public static String transJe(String testString,String c1,String c2) { String result = ""; try { Analyzer analyzer = new MIK_CAnalyzer(); Reader r = new StringReader(testString); TokenStream ts = (TokenStream)analyzer.tokenStream("", r); System.out.println("=====je analyzer===="); Token t; while ((t = ts.next()) != null) { result += t.termText()+","; } } catch(Exception e) { e.printStackTrace(); } return result; }
还是没有调用成功用刚才发的方法,还是没有分词
herrapfel 写道
linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”
dic文件都转成了这种内容的
\u4e00\u5c0f\u5f04
\u4e00\u90fd\u9547
\u4e01\u4ed4\u5df7
\u4e03\u661f\u4e95
Dictionary类中所有的字典load方法,将InputStreamReader中的编码也修改为了UTF-8,但是通过
public static String transJe(String testString,String c1,String c2)
{
String result = "";
try
{
Analyzer analyzer = new MIK_CAnalyzer();
Reader r = new StringReader(testString);
TokenStream ts = (TokenStream)analyzer.tokenStream("", r);
System.out.println("=====je analyzer====");
Token t;
while ((t = ts.next()) != null)
{
result += t.termText()+",";
}
}
catch(Exception e)
{
e.printStackTrace();
}
return result;
}
herrapfel 写道
linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”nativetoascii.exelinliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”IK_CAnalyzer在重新编译的时候报 import org.mira.lucene.lib.TokenTree; 没有这个类找遍了整个源代码文件夹也没有找到这个类和目录.不好意思,那个是我做实验的类,去掉那行就好,没有用的,呵呵已经去掉了,但是我执行 Dictionary 的main方法后报下面的错Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:22)at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:31)at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:31)at org.mira.lucene.analysis.dict.Dictionary.<init>(Dictionary.java:61)at org.mira.lucene.analysis.dict.Dictionary.load(Dictionary.java:66)at org.mira.lucene.analysis.dict.Dictionary.main(Dictionary.java:536)我做的改动是BufferedReader br = new BufferedReader(new InputStreamReader(is , "UTF-8"), 512);IK分词器词典有22w,自身启动的时候,在GBK情况下需要有45-50M的内存空间占用,估计你的jvm内存设置是默认的64M,编码改变后,对存储空间占用可能变大,请改变一下jvm的运行参数吧 -Xms128M -Xmx256M
内存改后可以调试了,但我将我改过后的 Dictionary.class 覆盖了IKAnalyzer2.0.2OBF.jar 后,用这个方法测试
Analyzer analyzer = new MIK_CAnalyzer();
Reader r = new StringReader(testString);
TokenStream ts = (TokenStream)analyzer.tokenStream("", r);
System.out.println("=====je analyzer====");
Token t;
while ((t = ts.next()) != null)
{
result += t.termText()+",";
//System.out.println(t.termText());
}
后报下面的错误,如果方便的话 加我QQ:356104
Exception in thread "main" java.lang.NoSuchMethodError: org.mira.lucene.analysis.dict.Dictionary.a()Lorg/mira/lucene/analysis/dict/Dictionary;
at org.mira.lucene.analysis.a.<init>(Unknown Source)
at org.mira.lucene.analysis.MIK_CAnalyzer.tokenStream(Unknown Source)
at com.sohu.wm.search.JeAnalyzer.transJe(JeAnalyzer.java:90)
at com.sohu.wm.search.JeAnalyzer.main(JeAnalyzer.java:119)
linliangyi2007 写道
herrapfel 写道
linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”nativetoascii.exelinliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”IK_CAnalyzer在重新编译的时候报 import org.mira.lucene.lib.TokenTree; 没有这个类找遍了整个源代码文件夹也没有找到这个类和目录.不好意思,那个是我做实验的类,去掉那行就好,没有用的,呵呵
已经去掉了,但是我执行 Dictionary 的main方法后报下面的错
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:22)
at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:31)
at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:31)
at org.mira.lucene.analysis.dict.Dictionary.<init>(Dictionary.java:61)
at org.mira.lucene.analysis.dict.Dictionary.load(Dictionary.java:66)
at org.mira.lucene.analysis.dict.Dictionary.main(Dictionary.java:536)
我做的改动是
BufferedReader br = new BufferedReader(new InputStreamReader(is , "UTF-8"), 512);
IK分词器词典有22w,自身启动的时候,在GBK情况下需要有45-50M的内存空间占用,估计你的jvm内存设置是默认的64M,编码改变后,对存储空间占用可能变大,请改变一下jvm的运行参数吧 -Xms128M -Xmx256M
herrapfel 写道
linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”nativetoascii.exelinliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”IK_CAnalyzer在重新编译的时候报 import org.mira.lucene.lib.TokenTree; 没有这个类找遍了整个源代码文件夹也没有找到这个类和目录.不好意思,那个是我做实验的类,去掉那行就好,没有用的,呵呵
已经去掉了,但是我执行 Dictionary 的main方法后报下面的错
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:22)
at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:31)
at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:31)
at org.mira.lucene.analysis.dict.Dictionary.<init>(Dictionary.java:61)
at org.mira.lucene.analysis.dict.Dictionary.load(Dictionary.java:66)
at org.mira.lucene.analysis.dict.Dictionary.main(Dictionary.java:536)
我做的改动是
BufferedReader br = new BufferedReader(new InputStreamReader(is , "UTF-8"), 512);
linliangyi2007 写道
herrapfel 写道
linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”
nativetoascii.exelinliangyi2007 写道
herrapfel 写道
linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”
IK_CAnalyzer
在重新编译的时候报
import org.mira.lucene.lib.TokenTree; 没有这个类
找遍了整个源代码文件夹也没有找到这个类和目录.
不好意思,那个是我做实验的类,去掉那行就好,没有用的,呵呵
客户词典扩展API,补充说明:
类 : org.mira.lucene.analysis.dict.Dictionary
方法 :public static void loadExtendWords(List wordList)
(PS:实际上该API一直存在于v2.0.2,都怪俺没做好API文档,自己汗一下 )
使用说明:
IKAnalyzer基于lucene2.0版本API开发,实现了以词典分词为基础的正反向全切分算法,是Lucene Analyzer接口的实现,代码使用例子如下:
import org.mira.lucene.analysis.IK_CAnalyzer <------- 引用类 import ..... public class IKAnalyzerTest extends TestCase { RAMDirectory directory; private IndexSearcher searcher; public void setUp() throws Exception { directory = new RAMDirectory(); IndexWriter writer = new IndexWriter(directory, new IK_CAnalyzer(), <------- 实例化类 true); Document doc = new Document(); doc.add(Field.Keyword("title", "中文分词测试")); doc.add(Field.Text("description", "Illidium Space Modulator")); writer.addDocument(doc); writer.close(); searcher = new IndexSearcher(directory); } public void testTermQuery() throws Exception { Query query = new TermQuery(new Term("title", "中文分词")); Hits hits = searcher.search(query); assertEquals(1, hits.length()); } }
分词效果测试,命令行如下:
java -classpath IKAnalyzer.jar;lucene-core-2.0.0.jar org.mira.lucene.analysis.IK_CAnalyzer 中华人民共和国香港特别行政区
性能与特性:
1. 正向全切分算法,42万汉字字符/每秒的处理能力(IBM ThinkPad 酷睿I 1.6G 1G内存 WinXP)
2. 对数量词、地名、路名的优化处理
3. 对未知词汇采用自识别结合二元切分算法,确保搜索召回率
V 2.0.2 修订 Bata版对二元切分的缺陷
正向全切分分词器:org.mira.lucene.analysis.IK_CAnalyzer(适合建索引时使用)
正向最大全切分分词器:org.mira.lucene.analysis.MIK_CAnalyzer(适合用户输入检索时使用)
下面演示“正向最大全切分分词器”效果:
例子:中华人民共和国香港特别行政区
0 - 7 = 中华人民共和国
7 - 14 = 香港特别行政区
例子:据路透社报道,印度尼西亚社会事务部一官员星期二(29日)表示,日惹市附近当地时间27日晨5时53分发
生的里氏6.2级地震已经造成至少5427人死亡?,20000余人受伤,近20万人无家可归。
1 - 4 = 路透社
4 - 6 = 报道
7 - 12 = 印度尼西亚
12 - 14 = 社会
14 - 17 = 事务部
17 - 18 = 一
18 - 20 = 官员
20 - 23 = 星期二
24 - 27 = 29日
28 - 30 = 表示
31 - 34 = 日惹市
34 - 36 = 附近
36 - 40 = 当地时间
40 - 43 = 27日
43 - 44 = 晨
44 - 46 = 5时
46 - 49 = 53分
48 - 50 = 分发
49 - 51 = 发生
52 - 54 = 里氏
54 - 58 = 6.2级
58 - 60 = 地震
60 - 62 = 已经
62 - 64 = 造成
64 - 66 = 至少
66 - 71 = 5427人
71 - 73 = 死亡
74 - 79 = 20000
79 - 81 = 余人
81 - 83 = 受伤
84 - 85 = 近
85 - 89 = 20万人
89 - 93 = 无家可归
一年后才发现没有上传jar包,汗到火星鸟!!
- ikanalyzer2.0.2_source.rar (770.9 KB)
- 描述: IKAanalyzer2.0.2源代码
- 下载次数: 3700
- IKAnalyzer2.0.2OBF.jar (852.2 KB)
- 下载次数: 1086
评论
74 楼
我的沉默你不懂
2012-03-07
您好!请问词典文件可以是utf16的吗?如何能让IK支持UTF-16【小头】编码的词典扩展呢?
73 楼
chennaid2
2011-09-06
谢谢 您 正缺这方面的学习资料;
另外想咨询您 IK_CAnalyzer和IKAnalyzer的区别???
另外想咨询您 IK_CAnalyzer和IKAnalyzer的区别???
72 楼
laizhiming1989
2009-08-26
71 楼
linliangyi2007
2009-04-07
herrapfel 写道
linliangyi2007 写道
herrapfel 写道
我把字典都转换成&amp;nbsp; \u661f 这种格式后,在WINDOWS下测试不能分词,比如说,测试中文是 "\u4E2D\u56FD\u4EBA\u52A0\u6CB9" 输出还是:&amp;nbsp; =====je analyzer====中国人加油没有进行任何分词请问该如何解决????你试试直接写中文吧你的java开发环境是什么编码的?UTF-8还是GBK?
中文也是一样的
ECLIPSE的编译环境原来是GBK,我刚改成UTF-8是了一下,同样也是不分词的.
你把读取字典的编码修改一下吧,尝试不用编码的读取,或者使用iso-8859-1,目前的症状更像你的字典没有载入成功
70 楼
herrapfel
2009-04-07
linliangyi2007 写道
herrapfel 写道
我把字典都转换成&nbsp; \u661f 这种格式后,在WINDOWS下测试不能分词,比如说,测试中文是 "\u4E2D\u56FD\u4EBA\u52A0\u6CB9" 输出还是:&nbsp; =====je analyzer====中国人加油没有进行任何分词请问该如何解决????你试试直接写中文吧你的java开发环境是什么编码的?UTF-8还是GBK?
中文也是一样的
ECLIPSE的编译环境原来是GBK,我刚改成UTF-8是了一下,同样也是不分词的.
69 楼
linliangyi2007
2009-04-07
herrapfel 写道
我把字典都转换成 \u661f 这种格式后,在WINDOWS下测试不能分词,比如说,测试中文是 "\u4E2D\u56FD\u4EBA\u52A0\u6CB9"
输出还是:
=====je analyzer====
中国人加油
没有进行任何分词
请问该如何解决????
你试试直接写中文吧
你的java开发环境是什么编码的?UTF-8还是GBK?
68 楼
herrapfel
2009-04-07
我把字典都转换成 \u661f 这种格式后,在WINDOWS下测试不能分词,比如说,测试中文是 "\u4E2D\u56FD\u4EBA\u52A0\u6CB9"
输出还是:
=====je analyzer====
中国人加油
没有进行任何分词
请问该如何解决????
输出还是:
=====je analyzer====
中国人加油
没有进行任何分词
请问该如何解决????
67 楼
linliangyi2007
2009-04-07
herrapfel 写道
请教两个问题:
1.new String( str.getBytes("gbk"),"utf-8"); 这种方式可以转成 \u661f\ 这种格式的UTF-8吗?
2.另外如果我将字典里的文字写成 &#x636e;这种UTF-8的话,需要修改哪个类才能让分词的时候不出现这种分词结果.
2 - 3 = x
3 - 6 = 636
6 - 7 = e
10 - 11 = x
11 - 12 = 8
12 - 15 = def
1.字符窜可以转成UTF-8编码,但编码本身是不会被输出的。
2.那个是分词器对数字和字母的切分算法,跟词典没有关系,修改词典是没有用的。IK2.0.2版本是将字母和数字进行切分了
66 楼
herrapfel
2009-04-07
linliangyi2007 写道
herrapfel 写道
linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”dic文件都转成了这种内容的\u4e00\u5c0f\u5f04\u4e00\u90fd\u9547\u4e01\u4ed4\u5df7\u4e03\u661f\u4e95Dictionary类中所有的字典load方法,将InputStreamReader中的编码也修改为了UTF-8,但是通过public static String transJe(String testString,String c1,String c2) {String result = "";try { Analyzer analyzer = new MIK_CAnalyzer(); Reader r = new StringReader(testString); TokenStream ts = (TokenStream)analyzer.tokenStream("", r); System.out.println("=====je analyzer===="); Token t;while ((t = ts.next()) != null) {result += t.termText()+",";}}catch(Exception e){e.printStackTrace();}return result;} 你先试着在windows下面看看能不能分词。windows下在eclipse里是可以正常分词的那就是你在unix下读取的待分词的文字,其编码不是UTF-8的了,需要进行转换
请教两个问题:
1.new String( str.getBytes("gbk"),"utf-8"); 这种方式可以转成 \u661f\ 这种格式的UTF-8吗?
2.另外如果我将字典里的文字写成 据这种UTF-8的话,需要修改哪个类才能让分词的时候不出现这种分词结果.
2 - 3 = x
3 - 6 = 636
6 - 7 = e
10 - 11 = x
11 - 12 = 8
12 - 15 = def
65 楼
linliangyi2007
2009-04-04
herrapfel 写道
linliangyi2007 写道
herrapfel 写道
linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”dic文件都转成了这种内容的\u4e00\u5c0f\u5f04\u4e00\u90fd\u9547\u4e01\u4ed4\u5df7\u4e03\u661f\u4e95Dictionary类中所有的字典load方法,将InputStreamReader中的编码也修改为了UTF-8,但是通过public static String transJe(String testString,String c1,String c2) {String result = "";try { Analyzer analyzer = new MIK_CAnalyzer(); Reader r = new StringReader(testString); TokenStream ts = (TokenStream)analyzer.tokenStream("", r); System.out.println("=====je analyzer===="); Token t;while ((t = ts.next()) != null) {result += t.termText()+",";}}catch(Exception e){e.printStackTrace();}return result;} 你先试着在windows下面看看能不能分词。
windows下在eclipse里是可以正常分词的
那就是你在unix下读取的待分词的文字,其编码不是UTF-8的了,需要进行转换
64 楼
herrapfel
2009-04-04
linliangyi2007 写道
herrapfel 写道
linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”dic文件都转成了这种内容的\u4e00\u5c0f\u5f04\u4e00\u90fd\u9547\u4e01\u4ed4\u5df7\u4e03\u661f\u4e95Dictionary类中所有的字典load方法,将InputStreamReader中的编码也修改为了UTF-8,但是通过public static String transJe(String testString,String c1,String c2) {String result = "";try { Analyzer analyzer = new MIK_CAnalyzer(); Reader r = new StringReader(testString); TokenStream ts = (TokenStream)analyzer.tokenStream("", r); System.out.println("=====je analyzer===="); Token t;while ((t = ts.next()) != null) {result += t.termText()+",";}}catch(Exception e){e.printStackTrace();}return result;} 你先试着在windows下面看看能不能分词。
windows下在eclipse里是可以正常分词的
63 楼
linliangyi2007
2009-04-03
herrapfel 写道
linliangyi2007 写道
herrapfel 写道
linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”
dic文件都转成了这种内容的
\u4e00\u5c0f\u5f04
\u4e00\u90fd\u9547
\u4e01\u4ed4\u5df7
\u4e03\u661f\u4e95
Dictionary类中所有的字典load方法,将InputStreamReader中的编码也修改为了UTF-8,但是通过
public static String transJe(String testString,String c1,String c2)
{
String result = "";
try
{
Analyzer analyzer = new MIK_CAnalyzer();
Reader r = new StringReader(testString);
TokenStream ts = (TokenStream)analyzer.tokenStream("", r);
System.out.println("=====je analyzer====");
Token t;
while ((t = ts.next()) != null)
{
result += t.termText()+",";
}
}
catch(Exception e)
{
e.printStackTrace();
}
return result;
}
你先试着在windows下面看看能不能分词。
62 楼
linliangyi2007
2009-04-03
herrapfel 写道
Exception in thread "main" java.lang.NoSuchMethodError
这个异常可能是你使用的jdk版本同我打包时用的jdk版本不同的原因
61 楼
herrapfel
2009-04-03
herrapfel 写道
linliangyi2007 写道
herrapfel 写道 linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8” dic文件都转成了这种内容的 \u4e00\u5c0f\u5f04 \u4e00\u90fd\u9547 \u4e01\u4ed4\u5df7 \u4e03\u661f\u4e95 Dictionary类中所有的字典load方法,将InputStreamReader中的编码也修改为了UTF-8,但是通过 public static String transJe(String testString,String c1,String c2) { String result = ""; try { Analyzer analyzer = new MIK_CAnalyzer(); Reader r = new StringReader(testString); TokenStream ts = (TokenStream)analyzer.tokenStream("", r); System.out.println("=====je analyzer===="); Token t; while ((t = ts.next()) != null) { result += t.termText()+","; } } catch(Exception e) { e.printStackTrace(); } return result; }
还是没有调用成功用刚才发的方法,还是没有分词
60 楼
herrapfel
2009-04-03
linliangyi2007 写道
herrapfel 写道
linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”
dic文件都转成了这种内容的
\u4e00\u5c0f\u5f04
\u4e00\u90fd\u9547
\u4e01\u4ed4\u5df7
\u4e03\u661f\u4e95
Dictionary类中所有的字典load方法,将InputStreamReader中的编码也修改为了UTF-8,但是通过
public static String transJe(String testString,String c1,String c2)
{
String result = "";
try
{
Analyzer analyzer = new MIK_CAnalyzer();
Reader r = new StringReader(testString);
TokenStream ts = (TokenStream)analyzer.tokenStream("", r);
System.out.println("=====je analyzer====");
Token t;
while ((t = ts.next()) != null)
{
result += t.termText()+",";
}
}
catch(Exception e)
{
e.printStackTrace();
}
return result;
}
59 楼
herrapfel
2009-04-03
Exception in thread "main" java.lang.NoSuchMethodError
linliangyi2007 写道
herrapfel 写道 linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”nativetoascii.exelinliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”IK_CAnalyzer在重新编译的时候报 import org.mira.lucene.lib.TokenTree; 没有这个类找遍了整个源代码文件夹也没有找到这个类和目录.不好意思,那个是我做实验的类,去掉那行就好,没有用的,呵呵已经去掉了,但是我执行 Dictionary 的main方法后报下面的错Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:22)at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:31)at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:31)at org.mira.lucene.analysis.dict.Dictionary.&amp;lt;init&amp;gt;(Dictionary.java:61)at org.mira.lucene.analysis.dict.Dictionary.load(Dictionary.java:66)at org.mira.lucene.analysis.dict.Dictionary.main(Dictionary.java:536)我做的改动是BufferedReader br = new BufferedReader(new InputStreamReader(is , "UTF-8"), 512);IK分词器词典有22w,自身启动的时候,在GBK情况下需要有45-50M的内存空间占用,估计你的jvm内存设置是默认的64M,编码改变后,对存储空间占用可能变大,请改变一下jvm的运行参数吧&nbsp;&nbsp; -Xms128M -Xmx256M 内存改后可以调试了,但我将我改过后的 Dictionary.class 覆盖了IKAnalyzer2.0.2OBF.jar 后,用这个方法测试 Analyzer analyzer = new MIK_CAnalyzer(); Reader r = new StringReader(testString); TokenStream ts = (TokenStream)analyzer.tokenStream("", r); System.out.println("=====je analyzer===="); Token t; while ((t = ts.next()) != null) { result += t.termText()+","; //System.out.println(t.termText()); } 后报下面的错误,如果方便的话 加我QQ:356104 Exception in thread "main" java.lang.NoSuchMethodError: org.mira.lucene.analysis.dict.Dictionary.a()Lorg/mira/lucene/analysis/dict/Dictionary; at org.mira.lucene.analysis.a.<init>(Unknown Source) at org.mira.lucene.analysis.MIK_CAnalyzer.tokenStream(Unknown Source) at com.sohu.wm.search.JeAnalyzer.transJe(JeAnalyzer.java:90) at com.sohu.wm.search.JeAnalyzer.main(JeAnalyzer.java:119)
明白了,你的源代码里的类和IKAnalyzer2.0.2OBF.jar 的类构造是不一样的.
只能把源代码再导成个新的JAR包了
herrapfel 写道
linliangyi2007 写道
herrapfel 写道 linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”nativetoascii.exelinliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”IK_CAnalyzer在重新编译的时候报 import org.mira.lucene.lib.TokenTree; 没有这个类找遍了整个源代码文件夹也没有找到这个类和目录.不好意思,那个是我做实验的类,去掉那行就好,没有用的,呵呵已经去掉了,但是我执行 Dictionary 的main方法后报下面的错Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:22)at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:31)at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:31)at org.mira.lucene.analysis.dict.Dictionary.&amp;lt;init&amp;gt;(Dictionary.java:61)at org.mira.lucene.analysis.dict.Dictionary.load(Dictionary.java:66)at org.mira.lucene.analysis.dict.Dictionary.main(Dictionary.java:536)我做的改动是BufferedReader br = new BufferedReader(new InputStreamReader(is , "UTF-8"), 512);IK分词器词典有22w,自身启动的时候,在GBK情况下需要有45-50M的内存空间占用,估计你的jvm内存设置是默认的64M,编码改变后,对存储空间占用可能变大,请改变一下jvm的运行参数吧&nbsp;&nbsp; -Xms128M -Xmx256M 内存改后可以调试了,但我将我改过后的 Dictionary.class 覆盖了IKAnalyzer2.0.2OBF.jar 后,用这个方法测试 Analyzer analyzer = new MIK_CAnalyzer(); Reader r = new StringReader(testString); TokenStream ts = (TokenStream)analyzer.tokenStream("", r); System.out.println("=====je analyzer===="); Token t; while ((t = ts.next()) != null) { result += t.termText()+","; //System.out.println(t.termText()); } 后报下面的错误,如果方便的话 加我QQ:356104 Exception in thread "main" java.lang.NoSuchMethodError: org.mira.lucene.analysis.dict.Dictionary.a()Lorg/mira/lucene/analysis/dict/Dictionary; at org.mira.lucene.analysis.a.<init>(Unknown Source) at org.mira.lucene.analysis.MIK_CAnalyzer.tokenStream(Unknown Source) at com.sohu.wm.search.JeAnalyzer.transJe(JeAnalyzer.java:90) at com.sohu.wm.search.JeAnalyzer.main(JeAnalyzer.java:119)
明白了,你的源代码里的类和IKAnalyzer2.0.2OBF.jar 的类构造是不一样的.
只能把源代码再导成个新的JAR包了
58 楼
herrapfel
2009-04-03
linliangyi2007 写道
herrapfel 写道
linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”nativetoascii.exelinliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”IK_CAnalyzer在重新编译的时候报 import org.mira.lucene.lib.TokenTree; 没有这个类找遍了整个源代码文件夹也没有找到这个类和目录.不好意思,那个是我做实验的类,去掉那行就好,没有用的,呵呵已经去掉了,但是我执行 Dictionary 的main方法后报下面的错Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:22)at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:31)at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:31)at org.mira.lucene.analysis.dict.Dictionary.&lt;init&gt;(Dictionary.java:61)at org.mira.lucene.analysis.dict.Dictionary.load(Dictionary.java:66)at org.mira.lucene.analysis.dict.Dictionary.main(Dictionary.java:536)我做的改动是BufferedReader br = new BufferedReader(new InputStreamReader(is , "UTF-8"), 512);IK分词器词典有22w,自身启动的时候,在GBK情况下需要有45-50M的内存空间占用,估计你的jvm内存设置是默认的64M,编码改变后,对存储空间占用可能变大,请改变一下jvm的运行参数吧 -Xms128M -Xmx256M
内存改后可以调试了,但我将我改过后的 Dictionary.class 覆盖了IKAnalyzer2.0.2OBF.jar 后,用这个方法测试
Analyzer analyzer = new MIK_CAnalyzer();
Reader r = new StringReader(testString);
TokenStream ts = (TokenStream)analyzer.tokenStream("", r);
System.out.println("=====je analyzer====");
Token t;
while ((t = ts.next()) != null)
{
result += t.termText()+",";
//System.out.println(t.termText());
}
后报下面的错误,如果方便的话 加我QQ:356104
Exception in thread "main" java.lang.NoSuchMethodError: org.mira.lucene.analysis.dict.Dictionary.a()Lorg/mira/lucene/analysis/dict/Dictionary;
at org.mira.lucene.analysis.a.<init>(Unknown Source)
at org.mira.lucene.analysis.MIK_CAnalyzer.tokenStream(Unknown Source)
at com.sohu.wm.search.JeAnalyzer.transJe(JeAnalyzer.java:90)
at com.sohu.wm.search.JeAnalyzer.main(JeAnalyzer.java:119)
57 楼
linliangyi2007
2009-04-03
herrapfel 写道
linliangyi2007 写道
herrapfel 写道
linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”nativetoascii.exelinliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”IK_CAnalyzer在重新编译的时候报 import org.mira.lucene.lib.TokenTree; 没有这个类找遍了整个源代码文件夹也没有找到这个类和目录.不好意思,那个是我做实验的类,去掉那行就好,没有用的,呵呵
已经去掉了,但是我执行 Dictionary 的main方法后报下面的错
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:22)
at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:31)
at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:31)
at org.mira.lucene.analysis.dict.Dictionary.<init>(Dictionary.java:61)
at org.mira.lucene.analysis.dict.Dictionary.load(Dictionary.java:66)
at org.mira.lucene.analysis.dict.Dictionary.main(Dictionary.java:536)
我做的改动是
BufferedReader br = new BufferedReader(new InputStreamReader(is , "UTF-8"), 512);
IK分词器词典有22w,自身启动的时候,在GBK情况下需要有45-50M的内存空间占用,估计你的jvm内存设置是默认的64M,编码改变后,对存储空间占用可能变大,请改变一下jvm的运行参数吧 -Xms128M -Xmx256M
56 楼
herrapfel
2009-04-03
linliangyi2007 写道
herrapfel 写道
linliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”nativetoascii.exelinliangyi2007 写道herrapfel 写道linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”IK_CAnalyzer在重新编译的时候报 import org.mira.lucene.lib.TokenTree; 没有这个类找遍了整个源代码文件夹也没有找到这个类和目录.不好意思,那个是我做实验的类,去掉那行就好,没有用的,呵呵
已经去掉了,但是我执行 Dictionary 的main方法后报下面的错
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:22)
at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:31)
at org.mira.lucene.analysis.dict.DictSegment.addWord(DictSegment.java:31)
at org.mira.lucene.analysis.dict.Dictionary.<init>(Dictionary.java:61)
at org.mira.lucene.analysis.dict.Dictionary.load(Dictionary.java:66)
at org.mira.lucene.analysis.dict.Dictionary.main(Dictionary.java:536)
我做的改动是
BufferedReader br = new BufferedReader(new InputStreamReader(is , "UTF-8"), 512);
55 楼
linliangyi2007
2009-04-03
herrapfel 写道
linliangyi2007 写道
herrapfel 写道
linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”
nativetoascii.exelinliangyi2007 写道
herrapfel 写道
linliangyi2007 写道herrapfel 写道是否可以解释一下,已经在XP的ECLIPSE下测试通过的代码,为什么在UNIX ,分词就不成功呢,谢谢.请赐教.这块可能是IK在字典上的处理不妥。IK采用了GBK的本地编码来存储字典,这个常常会造成在Linux和Unix环境下字典载入乱码,从而使的分词失败有什么办法可以解决吗? 1.获取IK的源码2.将字典目录下的dic文件,在Windows环境下使用jdk的nativetoascii.exe将格式从GBK转化成UTF-83.修改Dictionary类中所有的字典load方法,将InputStreamReader中的编码修改为“UTF-8”
IK_CAnalyzer
在重新编译的时候报
import org.mira.lucene.lib.TokenTree; 没有这个类
找遍了整个源代码文件夹也没有找到这个类和目录.
不好意思,那个是我做实验的类,去掉那行就好,没有用的,呵呵
发表评论
-
来自开源支持者的第一笔捐赠
2013-01-09 21:15 57812013年1月9号,一个平凡而又不平常的日子! IK中文分词 ... -
发布 IK Analyzer 2012 FF 版本
2012-10-23 17:50 25089首先感谢大家对IK分词器的关注。 最近一段时间正式公司事务最 ... -
发布 IK Analyzer 2012 版本
2012-03-08 11:23 36187新版本改进: 支持分词歧义处理 支持数量词合并 词典支持中英 ... -
CSDN发生严重用户账号泄密事件
2011-12-21 19:21 2566之前有在CSDN注册过的兄弟们,注意了。。。 如果你的邮箱, ... -
一个隐形的java int溢出
2011-08-30 09:44 7560故事的背景: 笔者最近在做一个类SNS的项目,其中 ... -
雷军 :互联网创业的葵花宝典
2011-05-04 10:35 3597博主评: 这片博客很短 ... -
Luci-mint站内搜索实测
2011-04-02 16:18 4144关于Luci-mint 服务器硬 ... -
发布 IK Analyzer 3.2.8 for Lucene3.X
2011-03-04 17:49 14259IK Analyzer 3.2.8版本修订 ... -
TIPS - XML CDATA中的非法字符处理
2011-02-17 15:03 3305XML解析过程中,常遇见CDATA中存在非法字符,尤其在火星文 ... -
对Cassandra的初体验
2010-10-13 17:58 9142作为“云计算”时代的架构设计人员而言,不懂K-V库会被 ... -
Spring + iBatis 的多库横向切分简易解决思路
2010-10-11 13:43 93641.引言 笔者最近在做一个互联网的“类SNS”应用,应用 ... -
发布 IK Analyzer 3.2.5 稳定版 for Lucene3.0
2010-09-08 14:43 5823新版本IKAnnlyzer3.2.8已发布! 地址: http ... -
关于Lucene3.0.1 QueryParser的一个错误
2010-05-21 21:33 2132表达式1: 引用 id:"1231231" ... -
发布 IK Analyzer 3.2.3 稳定版 for Lucene3.0
2010-05-15 14:13 6719IK Analyzer 3.2.3版本修订 在3.2.0版 ... -
windows平台上的nginx使用
2010-01-28 17:13 3407转载自:http://nginx.org/en/docs/wi ... -
发布IKAnnlyzer3.2.0稳定版 for Lucene3.0
2009-12-07 09:27 9584最新3.2.5版本已经推出,http://linliangyi ... -
在Tomcat下以JNDI方式发布JbossCache
2009-12-04 10:57 3835前言: 看过JbossCache的开发手册,发现在Jb ... -
Spring AOP小例子
2009-11-16 10:35 3406PS: 要注明一下,这个是转载滴,之前漏了说鸟,汗死 这里给 ... -
ActiveMQ 5.X 与 Tomcat 集成一(JNDI部署)
2009-11-10 15:15 5651原文地址:http://activemq.apache.org ... -
发布IKAnalyzer中文分词器V3.1.6GA
2009-11-08 23:10 11860IKAnalyzer3.2.0稳定版已经发布,支持Lucene ...
相关推荐
ikanalyzer2.0.2源码是针对中文分词任务设计的一个开源项目,它主要基于Java语言实现,广泛应用于搜索引擎、信息检索系统以及文本挖掘等领域。ikanalyzer的核心目标是为了解决中文在英文为主导的Lucene等全文检索...
IKAnalyzer2.0.2是基于Java开发的一款开源全文搜索引擎组件,主要应用于Lucene项目,为中文分词提供了解决方案。在理解IKAnalyzer之前,我们先了解一下全文搜索引擎和中文分词这两个概念。 全文搜索引擎是一种信息...
总的来说,这个压缩包提供了一套完整的Lucene环境,集成了IKAnalyzer分词器,可以用来构建具备中文处理能力的全文搜索引擎。开发者可以根据实际需求,选择合适的组件进行集成,实现更高效、更精准的文本搜索和处理。...
标题中的"C# 中文分词 LUCENE IKAnalyzer"是指使用C#语言实现的一个中文分词工具,它基于开源全文检索引擎Lucene,并且采用了IKAnalyzer(智能汉字分词系统)的Java版本进行移植。Lucene是一个强大的、高性能的信息...
ikanalyzer中文分词支持lucene7.1.0是一个针对Lucene搜索引擎的中文分词扩展,由林良益先生开发,旨在提供高效、精准的中文词汇拆解功能。Lucene是一个开源全文检索库,它提供了索引和搜索文本的强大工具。然而,...
IKAnalyzer继承Lucene的Analyzer抽象类,使用IKAnalyzer和Lucene自带的分析器方法一样,将Analyzer测试代码改为IKAnalyzer测试中文分词效果。 如果使用中文分词器ik-analyzer,就需要在索引和搜索程序中使用一致的...
IK Analyzer 是一个开源的,基于 java 语言开发的轻量级的中文分词工具包。从 2006年 12 月推出 1.0 版开始, IKAnalyzer 已经推出了 4 个大版本。最初,它是以开源项目Luence 为应用主体的,结合词典分词和文法分析...
提示:IKAnalyzer中文分词器支持Lucene6.0以上,IKAnalyzer中文分词器支持Lucene6.0以上。
IK Analyzer 3.0 是一个专为 Lucene 设计的开源中文分词器,它基于 Java 开发,提供轻量级且高效的分词功能。自2006年12月发布1.0版以来,IK Analyzer 经历了多次升级,3.0版已演变为独立于 Lucene 的通用分词组件,...
IKAnalyzer 是一个开源的、基于Java实现的中文分词器,专为全文检索和搜索引擎提供高效、快速的分词服务。这款工具广泛应用于Lucene、Elasticsearch、Solr等全文检索框架,以提高中文处理的性能。在给定的标题和描述...
亲测可用的中文分词器,也可以到IK Analyzer官网下载,网址如下: https://code.google.com/archive/p/ik-analyzer/downloads 在solrcode的schema.xml文件中的配置如下: 配置中文分词器的fieldType: ...
lucene3.5 IKAnalyzer3.2.5 实例中文分词通过,目前在网上找的lucene 和IKAnalyzer 的最新版本测试通过。内含:示例代码,以及最新jar包。 lucene lucene3.5 IKAnalyzer IKAnalyzer3.2.5 jar 中文 分词
在这个入门教程中,我们将使用Lucene 4.7版本,结合IK Analyzer,一个专门针对中文分词的开源分析器,来学习如何构建一个简单的搜索引擎。 首先,你需要下载Lucene 4.7和IK Analyzer 2012-FF Hotfix 1。Lucene的...
IKAnalyzer是一款广泛应用于Java环境中的开源中文分词器,尤其在搜索引擎、文本分析等领域有着重要的应用。6.5.0是其的一个版本,这个版本在前代基础上进行了优化和改进,提升了分词效率和准确度。 一、IKAnalyzer...
IK Analyzer 是一个开源的、基于Java实现的中文分词器,专为全文检索或信息提取等任务设计。它由尹力(Wu Li)在2006年发起,最初是为了改善Lucene的中文处理能力。自那时起,IK Analyzer已经发展成为一个广泛使用的...
ikanalyzer-solr6.5 是一个专门为Solr 6.5版本设计的中文分词器,它基于ikanalyzer,并且进行了优化以更好地适应Solr的索引和搜索需求。ikanalyzer是一个开源的、基于Java实现的中文分词库,主要用于解决中文文本...
适合Lucene5.x的IKAnalyzer-5.0分词器的jar包,重写了前面版本的IKAnalyzer,我已经试过,可以使用。