- 浏览: 1014430 次
- 性别:
- 来自: 福州
最新评论
-
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:
加油
来自开源支持者的第一笔捐赠
IK Analyzer 3.2.8版本修订
以下对新增的查询表达式做详细说明:
IK3.2.8版本为简化用户对查询逻辑的处理,提供了基于表达式的搜索逻辑处理。它与Lucene自带表达式的不同之处,在于它采用了IKQueryParser对中文分词歧义处理的算法。相对Lucene QueryParser而言,用它生成的Query对象也许更能命中搜索结果。
表达式样例:
下载地址:
IK分词器3.2.8发布包
IK分词器3.2.8源码包
PS:如果您使用的是Solr1.3或者v2.9之前的Lucene,请下载IK Analyzer3.1.6GA使用! IK Analyzer3.2.X仅支持Lucene3.0以上版本。
分词效果示例
IK Analyzer 3.2.8版本支持 细粒度切分 和 最大词长切分,以下是两种切分方式的演示样例。
文本原文1:
IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了3个大版本。
最大词长分词结果:
最细粒度分词结果:
文本原文2:
作者博客:linliangyi2007.iteye.com 电子邮件:linliangyi2005@gmail.com
最大词长分词结果:
最细粒度分词结果:
文本原文3
古田县城关六一四路四百零五号
最大词长分词结果:
最细粒度分词结果:
文本原文4
曙光天阔 I620r-G /A950r-F 夏普SH9020C
最大词长分词结果:
最细粒度分词结果:
建议使用数据库like匹配吧,你的要求根本不需要用lucene啊
林老师,你好,但是我要做的是全文检索呀,我不能将全文都放到数据库的,现在面临的难题是,我要实现先进行模糊检索,然后在结果中精确检索,费脑子啊!不知道林老师有没有好的指点。(其中在结果中检索我是用BooleanQuery实现的,英文的精确检索我用的是PhraseQuery,但是中文的精确检索(不分词的状态下我可以用WildCardQuery实现,但是如果不分词模糊检索又不行了)实现不了了,求指点!)
索引使用单字索引,StandardAnalyzer就好,搜索使用PhraseQuery就OK
ok,我试试,3q!
建议使用数据库like匹配吧,你的要求根本不需要用lucene啊
林老师,你好,但是我要做的是全文检索呀,我不能将全文都放到数据库的,现在面临的难题是,我要实现先进行模糊检索,然后在结果中精确检索,费脑子啊!不知道林老师有没有好的指点。(其中在结果中检索我是用BooleanQuery实现的,英文的精确检索我用的是PhraseQuery,但是中文的精确检索(不分词的状态下我可以用WildCardQuery实现,但是如果不分词模糊检索又不行了)实现不了了,求指点!)
索引使用单字索引,StandardAnalyzer就好,搜索使用PhraseQuery就OK
建议使用数据库like匹配吧,你的要求根本不需要用lucene啊
林老师,你好,但是我要做的是全文检索呀,我不能将全文都放到数据库的,现在面临的难题是,我要实现先进行模糊检索,然后在结果中精确检索,费脑子啊!不知道林老师有没有好的指点。(其中在结果中检索我是用BooleanQuery实现的,英文的精确检索我用的是PhraseQuery,但是中文的精确检索(不分词的状态下我可以用WildCardQuery实现,但是如果不分词模糊检索又不行了)实现不了了,求指点!)
建议使用数据库like匹配吧,你的要求根本不需要用lucene啊
词库只是放中文词语的,对E文字符是无效的。
跟是不是web应用无关,放在类的根目录下就好
1.从中文的分词效果看,你的词典没有被正确读取,请确定你的词典编码是UTF-8,以及词典放置在classes的根路径下。
2.词典负责中文词语切分,所有英文字符在词典中都是无效的。
- 1.优化了英文字符处理,支持如:C++ 等带符号单词输出
- 2.简化了数词处理,使输出结果更符合用户观感
- 3.改进了最大词长切分,使输出结果更符合用户观感
- 4.性能优化,目前IK分词器的速度为约85万字/秒(1600K字节/S)
- 5.新增IK简易查询表达式,简化用户使用
以下对新增的查询表达式做详细说明:
IK3.2.8版本为简化用户对查询逻辑的处理,提供了基于表达式的搜索逻辑处理。它与Lucene自带表达式的不同之处,在于它采用了IKQueryParser对中文分词歧义处理的算法。相对Lucene QueryParser而言,用它生成的Query对象也许更能命中搜索结果。
表达式样例:
id='1231' && (title:'文档标题'|| content:'内容') – author='helloworld'
- 1.表达式使用 属性名<->属性值 键值对的形式,属性值使用”’”单引号标识。
- 2.在键值对中使用 “=”等号,表示对该属性的精确搜索(不分词),适用于对ID、编号、分类等精确值属性搜索;使用“: ”冒号表示对属性的模糊搜索(分词搜索),适用于文本内容的全文搜索。
- 3.在使用“: ”时,连续的搜索关键字将解析为 AND 逻辑,如果关键字中带有空格,这解析为OR逻辑。如:title:'文档标题' 表示搜索title中同时包含“文档”AND“标题“的数据,title:'文档_标题' 表示搜索title中包含“文档”OR“标题“。(这个例子中,我们默认你使用的IK分词器能将”文档标题“切分为”文档“和”标题“两个词)
- 4.表达式支持“&&”与 “||” 或“-”非的逻辑操作,以及“( )”括号优先级定义。注意“-”非逻辑不能单独使用,即 “– author='helloworld'” 是非法表达式。
- 5.目前就是这么简单,暂不支持更复杂的搜索逻辑:).
下载地址:
IK分词器3.2.8发布包
IK分词器3.2.8源码包
PS:如果您使用的是Solr1.3或者v2.9之前的Lucene,请下载IK Analyzer3.1.6GA使用! IK Analyzer3.2.X仅支持Lucene3.0以上版本。
分词效果示例
IK Analyzer 3.2.8版本支持 细粒度切分 和 最大词长切分,以下是两种切分方式的演示样例。
文本原文1:
IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了3个大版本。
最大词长分词结果:
引用
ikanalyzer | 是 | 一个 | 开源 | 的 | 基于 | java | 语言 | 开发 | 的 | 轻量级 | 的 | 中文 | 分词 | 工具包 | 从 | 2006 | 年 | 12 | 月 | 推出 | 1.0 | 版 | 开始 | ikanalyzer | 已经 | 推出 | 出了 | 3 | 个 | 大 | 版本
最细粒度分词结果:
引用
ikanalyzer | 是 | 一个 | 一 | 个 | 开源 | 的 | 基于 | java | 语言 | 开发 | 的 | 轻量级 | 量级 | 的 | 中文 | 分词 | 工具包 | 工具 | 从 | 2006 | 年 | 12 | 月 | 推出 | 1.0 | 版 | 开始 | ikanalyzer | 已经 | 推出 | 出了 | 3 | 个 | 大 | 版本
文本原文2:
作者博客:linliangyi2007.iteye.com 电子邮件:linliangyi2005@gmail.com
最大词长分词结果:
引用
作者 | 博客 | linliangyi2007.iteye.com | 电子邮件 | linliangyi2005@gmail.com
最细粒度分词结果:
引用
作者 | 博客 | linliangyi2007.iteye.com | linliangyi | 2007 | javaeye | com | 电子邮件 | linliangyi2005@gmail.com | linliangyi | 2005 | gmail | com
文本原文3
古田县城关六一四路四百零五号
最大词长分词结果:
引用
古田县 | 县城 | 城关 | 六一四 | 路 | 四百零五 | 号
最细粒度分词结果:
引用
古田县 | 古田 | 县城 | 城关 | 六一四 | 六一 | 四 | 路 | 四百零五 | 四 | 百 | 零 | 五 | 号
文本原文4
曙光天阔 I620r-G /A950r-F 夏普SH9020C
最大词长分词结果:
引用
曙光 | 天 | 阔 | i620r-g | a950r-f | 夏普 | sh9020c
最细粒度分词结果:
引用
曙光 | 天 | 阔 | i620r-g | i | 620 | r | g | a950r-f | a | 950 | r | f | 夏普 | sh9020c | sh | 9020 | c
评论
44 楼
gujie890411
2012-06-06
linliangyi2007 写道
gujie890411 写道
linliangyi2007 写道
gujie890411 写道
林前辈,你好!请教您一个问题!
我想要做中文检索的精确查询,比如
Document doc = new Document();
Field field = new Field("content","我们的中国客户是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc.add(field);
Document doc1 = new Document();
Field field1 = new Field("content","我们的外国客户和中国客户都是是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc1.add(field1);
输入关键词“我们的中国客户”,我希望的结果是只获得第一个doc的内容,即“我们的中国客户是很好的!”
我想要做中文检索的精确查询,比如
Document doc = new Document();
Field field = new Field("content","我们的中国客户是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc.add(field);
Document doc1 = new Document();
Field field1 = new Field("content","我们的外国客户和中国客户都是是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc1.add(field1);
输入关键词“我们的中国客户”,我希望的结果是只获得第一个doc的内容,即“我们的中国客户是很好的!”
建议使用数据库like匹配吧,你的要求根本不需要用lucene啊
林老师,你好,但是我要做的是全文检索呀,我不能将全文都放到数据库的,现在面临的难题是,我要实现先进行模糊检索,然后在结果中精确检索,费脑子啊!不知道林老师有没有好的指点。(其中在结果中检索我是用BooleanQuery实现的,英文的精确检索我用的是PhraseQuery,但是中文的精确检索(不分词的状态下我可以用WildCardQuery实现,但是如果不分词模糊检索又不行了)实现不了了,求指点!)
索引使用单字索引,StandardAnalyzer就好,搜索使用PhraseQuery就OK
ok,我试试,3q!
43 楼
linliangyi2007
2012-06-06
gujie890411 写道
linliangyi2007 写道
gujie890411 写道
林前辈,你好!请教您一个问题!
我想要做中文检索的精确查询,比如
Document doc = new Document();
Field field = new Field("content","我们的中国客户是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc.add(field);
Document doc1 = new Document();
Field field1 = new Field("content","我们的外国客户和中国客户都是是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc1.add(field1);
输入关键词“我们的中国客户”,我希望的结果是只获得第一个doc的内容,即“我们的中国客户是很好的!”
我想要做中文检索的精确查询,比如
Document doc = new Document();
Field field = new Field("content","我们的中国客户是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc.add(field);
Document doc1 = new Document();
Field field1 = new Field("content","我们的外国客户和中国客户都是是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc1.add(field1);
输入关键词“我们的中国客户”,我希望的结果是只获得第一个doc的内容,即“我们的中国客户是很好的!”
建议使用数据库like匹配吧,你的要求根本不需要用lucene啊
林老师,你好,但是我要做的是全文检索呀,我不能将全文都放到数据库的,现在面临的难题是,我要实现先进行模糊检索,然后在结果中精确检索,费脑子啊!不知道林老师有没有好的指点。(其中在结果中检索我是用BooleanQuery实现的,英文的精确检索我用的是PhraseQuery,但是中文的精确检索(不分词的状态下我可以用WildCardQuery实现,但是如果不分词模糊检索又不行了)实现不了了,求指点!)
索引使用单字索引,StandardAnalyzer就好,搜索使用PhraseQuery就OK
42 楼
gujie890411
2012-06-04
linliangyi2007 写道
gujie890411 写道
林前辈,你好!请教您一个问题!
我想要做中文检索的精确查询,比如
Document doc = new Document();
Field field = new Field("content","我们的中国客户是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc.add(field);
Document doc1 = new Document();
Field field1 = new Field("content","我们的外国客户和中国客户都是是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc1.add(field1);
输入关键词“我们的中国客户”,我希望的结果是只获得第一个doc的内容,即“我们的中国客户是很好的!”
我想要做中文检索的精确查询,比如
Document doc = new Document();
Field field = new Field("content","我们的中国客户是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc.add(field);
Document doc1 = new Document();
Field field1 = new Field("content","我们的外国客户和中国客户都是是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc1.add(field1);
输入关键词“我们的中国客户”,我希望的结果是只获得第一个doc的内容,即“我们的中国客户是很好的!”
建议使用数据库like匹配吧,你的要求根本不需要用lucene啊
林老师,你好,但是我要做的是全文检索呀,我不能将全文都放到数据库的,现在面临的难题是,我要实现先进行模糊检索,然后在结果中精确检索,费脑子啊!不知道林老师有没有好的指点。(其中在结果中检索我是用BooleanQuery实现的,英文的精确检索我用的是PhraseQuery,但是中文的精确检索(不分词的状态下我可以用WildCardQuery实现,但是如果不分词模糊检索又不行了)实现不了了,求指点!)
41 楼
linliangyi2007
2012-06-04
gujie890411 写道
林前辈,你好!请教您一个问题!
我想要做中文检索的精确查询,比如
Document doc = new Document();
Field field = new Field("content","我们的中国客户是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc.add(field);
Document doc1 = new Document();
Field field1 = new Field("content","我们的外国客户和中国客户都是是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc1.add(field1);
输入关键词“我们的中国客户”,我希望的结果是只获得第一个doc的内容,即“我们的中国客户是很好的!”
我想要做中文检索的精确查询,比如
Document doc = new Document();
Field field = new Field("content","我们的中国客户是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc.add(field);
Document doc1 = new Document();
Field field1 = new Field("content","我们的外国客户和中国客户都是是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc1.add(field1);
输入关键词“我们的中国客户”,我希望的结果是只获得第一个doc的内容,即“我们的中国客户是很好的!”
建议使用数据库like匹配吧,你的要求根本不需要用lucene啊
40 楼
gujie890411
2012-06-03
林前辈,你好!请教您一个问题!
我想要做中文检索的精确查询,比如
Document doc = new Document();
Field field = new Field("content","我们的中国客户是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc.add(field);
Document doc1 = new Document();
Field field1 = new Field("content","我们的外国客户和中国客户都是是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc1.add(field1);
输入关键词“我们的中国客户”,我希望的结果是只获得第一个doc的内容,即“我们的中国客户是很好的!”
我想要做中文检索的精确查询,比如
Document doc = new Document();
Field field = new Field("content","我们的中国客户是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc.add(field);
Document doc1 = new Document();
Field field1 = new Field("content","我们的外国客户和中国客户都是是很好的!",Field.Store.YES, Field.Index.ANALYZED);
doc1.add(field1);
输入关键词“我们的中国客户”,我希望的结果是只获得第一个doc的内容,即“我们的中国客户是很好的!”
39 楼
eyeruby
2012-05-24
解放军 分词有2个 解放 解放军,在highlighter的时候得到
<font color='red'>解放</font><font color='red'>解放军</font>
这是不是不太合理?
<font color='red'>解放</font><font color='red'>解放军</font>
这是不是不太合理?
38 楼
eyeruby
2012-05-24
使用IK3.2.8 + Lucene 3.0.3,
questions:
1.
lucene3.0.3 使用Field field = new Field("content", new FileReader(f),Field.TermVector.WITH_POSITIONS_OFFSETS);
content 字段不会被存储,然后使用targetDoc.get("content")得到的是null.
后面在高亮的时候,调用highlighter.getBestFragment(TokenStream, text)
时,text是把文件再读一遍吗?
2.
TokenStream ts = new IKAnalyzer(true).tokenStream(searchField,
new FileReader(path)); //得到tokenstream
3.
highlighter.getBestFragments(ts,str, maxNumFragmentsRequired,fragmentSeparator);
str=readFile(doc.get("path"));//这样得到的
发现 搜索单个关键词(解放军)如果搜索的关键词在文章的开头(index=0)就出现,而且文章中有多处,这样第2个关键词(解放军)出现的地方的offset不对, 如果在关键词不在index=0的位置,第2个关键词的offset就对了
questions:
1.
lucene3.0.3 使用Field field = new Field("content", new FileReader(f),Field.TermVector.WITH_POSITIONS_OFFSETS);
content 字段不会被存储,然后使用targetDoc.get("content")得到的是null.
后面在高亮的时候,调用highlighter.getBestFragment(TokenStream, text)
时,text是把文件再读一遍吗?
2.
TokenStream ts = new IKAnalyzer(true).tokenStream(searchField,
new FileReader(path)); //得到tokenstream
3.
highlighter.getBestFragments(ts,str, maxNumFragmentsRequired,fragmentSeparator);
str=readFile(doc.get("path"));//这样得到的
发现 搜索单个关键词(解放军)如果搜索的关键词在文章的开头(index=0)就出现,而且文章中有多处,这样第2个关键词(解放军)出现的地方的offset不对, 如果在关键词不在index=0的位置,第2个关键词的offset就对了
37 楼
linliangyi2007
2011-11-23
trh3037 写道
林老师,你好。我发现ik好像对中英文混合,或者数字中文混合,无法分词啊。
比如有一段话“用户从2010年10月11号开始,申请宽带4M升级到10M”
我才用外部词库,
想要的结果是:用户|2010年10月11号|开始|申请宽带|4M升级到10M。
但是实际结果是:用户|2010|年|10|月|11|号|开始|申请宽带|4m|升级到|10m|
也就是说希望“4M升级到10M”是一起的。但是分词出来的,却变成:4M|升级到|10M。
就是说在分词的时候,能否以外部词库为主?。
比如有一段话“用户从2010年10月11号开始,申请宽带4M升级到10M”
我才用外部词库,
List<String> strs = new ArrayList<String>(); strs.add("用户"); strs.add("98升级到109"); strs.add("2010年10月11号"); strs.add("开始"); strs.add("申请宽带"); strs.add("4M升级到10M"); Dictionary.loadExtendWords(strs);
想要的结果是:用户|2010年10月11号|开始|申请宽带|4M升级到10M。
但是实际结果是:用户|2010|年|10|月|11|号|开始|申请宽带|4m|升级到|10m|
也就是说希望“4M升级到10M”是一起的。但是分词出来的,却变成:4M|升级到|10M。
就是说在分词的时候,能否以外部词库为主?。
词库只是放中文词语的,对E文字符是无效的。
36 楼
trh3037
2011-11-18
林老师,你好。我发现ik好像对中英文混合,或者数字中文混合,无法分词啊。
比如有一段话“用户从2010年10月11号开始,申请宽带4M升级到10M”
我才用外部词库,
想要的结果是:用户|2010年10月11号|开始|申请宽带|4M升级到10M。
但是实际结果是:用户|2010|年|10|月|11|号|开始|申请宽带|4m|升级到|10m|
也就是说希望“4M升级到10M”是一起的。但是分词出来的,却变成:4M|升级到|10M。
就是说在分词的时候,能否以外部词库为主?。
比如有一段话“用户从2010年10月11号开始,申请宽带4M升级到10M”
我才用外部词库,
List<String> strs = new ArrayList<String>(); strs.add("用户"); strs.add("98升级到109"); strs.add("2010年10月11号"); strs.add("开始"); strs.add("申请宽带"); strs.add("4M升级到10M"); Dictionary.loadExtendWords(strs);
想要的结果是:用户|2010年10月11号|开始|申请宽带|4M升级到10M。
但是实际结果是:用户|2010|年|10|月|11|号|开始|申请宽带|4m|升级到|10m|
也就是说希望“4M升级到10M”是一起的。但是分词出来的,却变成:4M|升级到|10M。
就是说在分词的时候,能否以外部词库为主?。
35 楼
ynyee
2011-11-07
大哥好,配置solr中使用IK的分词,但在ADMIN界面中测试的时候还是一个字一个字分出来的。
是不是下面的配置有问题:
是不是下面的配置有问题:
<fieldType name="text_general" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer" /> <analyzer type="index"> <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> <!-- in this example, we will only use synonyms at query time <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> --> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.PorterStemFilterFactory"/> <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="true"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.PorterStemFilterFactory"/> <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> </analyzer> </fieldType>
34 楼
gongzhe85
2011-11-01
谢谢林老师,另外还有个IKParser的困惑请教
我有如下查询语句,在域text中查询:
('铁路'||'火车')&&('事故'||'出轨')
('铁路' '火车')&&('事故' '出轨')
表达的逻辑您大概能明白,就是两组词一组是实体另一组是动作,无论出现哪种组合都符合查询条件。
但是我把这两个条件的query打印出来,如下
+text:铁路 +text:火车 +text:事故 +text:出轨
text:铁路 (+text:火车 +text:事故) text:出轨
两个好象都不太符合我本来的意思。
请林老师指导下,IK中||和空格的区别还有括号的作用,另外我那种逻辑IK是否支持,谢谢啦。
我有如下查询语句,在域text中查询:
('铁路'||'火车')&&('事故'||'出轨')
('铁路' '火车')&&('事故' '出轨')
表达的逻辑您大概能明白,就是两组词一组是实体另一组是动作,无论出现哪种组合都符合查询条件。
但是我把这两个条件的query打印出来,如下
+text:铁路 +text:火车 +text:事故 +text:出轨
text:铁路 (+text:火车 +text:事故) text:出轨
两个好象都不太符合我本来的意思。
请林老师指导下,IK中||和空格的区别还有括号的作用,另外我那种逻辑IK是否支持,谢谢啦。
33 楼
linliangyi2007
2011-10-31
gongzhe85 写道
林老师,您好!
我想请教一下自定义词典的路径配置问题。我的程序不是web程序,而是用jar包直接在控制台运行,我把IKAnalyzer.cfg.xml和dic文件都放在资源路径下,打包时就一起打进jar包了,dic文件就不能修改了。IKAnalyzer.cfg.xml里使用绝对路径找dic也不行,请问有什么好办法吗。
我想请教一下自定义词典的路径配置问题。我的程序不是web程序,而是用jar包直接在控制台运行,我把IKAnalyzer.cfg.xml和dic文件都放在资源路径下,打包时就一起打进jar包了,dic文件就不能修改了。IKAnalyzer.cfg.xml里使用绝对路径找dic也不行,请问有什么好办法吗。
跟是不是web应用无关,放在类的根目录下就好
32 楼
gongzhe85
2011-10-30
林老师,您好!
我想请教一下自定义词典的路径配置问题。我的程序不是web程序,而是用jar包直接在控制台运行,我把IKAnalyzer.cfg.xml和dic文件都放在资源路径下,打包时就一起打进jar包了,dic文件就不能修改了。IKAnalyzer.cfg.xml里使用绝对路径找dic也不行,请问有什么好办法吗。
我想请教一下自定义词典的路径配置问题。我的程序不是web程序,而是用jar包直接在控制台运行,我把IKAnalyzer.cfg.xml和dic文件都放在资源路径下,打包时就一起打进jar包了,dic文件就不能修改了。IKAnalyzer.cfg.xml里使用绝对路径找dic也不行,请问有什么好办法吗。
31 楼
elvishehai
2011-10-24
请问下.词库的管理上,有什么好的介意了,如先查询词库中是否存在,没有的话直接添加到词库中.
30 楼
confident_f
2011-10-08
林老师,你好。我想请教您一个问题,在一个项目里我想使用两个不同的ik分词器,简单来说,就是希望不同的ik分词器对应不同的xml配置文件,这样它们对应的扩展字典是不同的,分词的效果也就是不同的了。不知道这样能否实现,如何实现?多谢!
29 楼
privatemiao
2011-09-13
你好!
我刚开始研究 搜索引擎。
现在正在研究 solr
使用 ik 后
还能在 schema.xml 中配置 支持 dataimport 的数据库中的字段吗?
谢谢
我刚开始研究 搜索引擎。
现在正在研究 solr
使用 ik 后
还能在 schema.xml 中配置 支持 dataimport 的数据库中的字段吗?
谢谢
28 楼
mohenglyf
2011-09-07
林老师,你好,为什么我对"古田县城关六一四路四百零五号"分词,结果跟你的结果不一样呢?
最大词长结果:
1古田县
2县城
3城关
4六一四
5六一
6四
7路
8四百零五
9四
10百
11零
12五
13号
最细粒度结果:
1古田县
2古田
3县城
4城关
5六一四
6六一
7四
8路
9四百零五
10四
11百
12零
13五
14号
最大词长结果:
1古田县
2县城
3城关
4六一四
5六一
6四
7路
8四百零五
9四
10百
11零
12五
13号
最细粒度结果:
1古田县
2古田
3县城
4城关
5六一四
6六一
7四
8路
9四百零五
10四
11百
12零
13五
14号
27 楼
whht195444
2011-07-30
林老师:
刚才我看了一下,mydict.dic格式刚开始的时候我故意修改为GBK,结果没有分词成功,然后我将IKAnalyzer3.2.8 source里面的mydict.dic文件COPY到我的项目中,然后添加词组“固定床”,执行后,效果一样,对于“固定术”,程序分成了:固定 术 二个词组。
三个文件的目录我是放在src根目录下的,有办法测试,词库读取是否成功的方法吗?
刚才我看了一下,mydict.dic格式刚开始的时候我故意修改为GBK,结果没有分词成功,然后我将IKAnalyzer3.2.8 source里面的mydict.dic文件COPY到我的项目中,然后添加词组“固定床”,执行后,效果一样,对于“固定术”,程序分成了:固定 术 二个词组。
三个文件的目录我是放在src根目录下的,有办法测试,词库读取是否成功的方法吗?
26 楼
linliangyi2007
2011-07-30
whht195444 写道
林老师,我在扩展词库的时候为不成功呢?现先我的配置方法与内容粘在下面:
IK版本 3.2.8
现在IKAnalyzer.cfg.xml中进行配置内容如下:
mydict.dic内容如下:
分词代码如下:
想达到的效果是:固定术 复位术 aa cde四个词组
实际效果为:固定 术 复位 术 abcde 五个词组
mydict.dic、ext_stopword.dic、IKAnalyzer.cfg.xml放在同一目录下,进行DEBUG里面运行的,还没有进行部署,
IK版本 3.2.8
现在IKAnalyzer.cfg.xml中进行配置内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>IK Analyzer 扩展配置</comment> <!--用户可以在这里配置自己的扩展字典 --> <entry key="ext_dict">/mydict.dic;</entry> <!--用户可以在这里配置自己的扩展停止词字典 <entry key="ext_stopwords">/ext_stopword.dic</entry> --> </properties>
mydict.dic内容如下:
ab 固定术 复位术 cde
分词代码如下:
List<String> list = new ArrayList<String>(); StringReader input = new StringReader("固定术复位术abcde"); IKSegmentation ikSeg = new IKSegmentation(input, true); Lexeme lexeme; try { while ((lexeme = ikSeg.next()) != null) { System.out.println(lexeme.getLexemeText()); list.add(lexeme.getLexemeText()); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
想达到的效果是:固定术 复位术 aa cde四个词组
实际效果为:固定 术 复位 术 abcde 五个词组
mydict.dic、ext_stopword.dic、IKAnalyzer.cfg.xml放在同一目录下,进行DEBUG里面运行的,还没有进行部署,
1.从中文的分词效果看,你的词典没有被正确读取,请确定你的词典编码是UTF-8,以及词典放置在classes的根路径下。
2.词典负责中文词语切分,所有英文字符在词典中都是无效的。
25 楼
whht195444
2011-07-30
林老师,我在扩展词库的时候为不成功呢?现先我的配置方法与内容粘在下面:
IK版本 3.2.8
现在IKAnalyzer.cfg.xml中进行配置内容如下:
mydict.dic内容如下:
分词代码如下:
想达到的效果是:固定术 复位术 aa cde四个词组
实际效果为:固定 术 复位 术 abcde 五个词组
mydict.dic、ext_stopword.dic、IKAnalyzer.cfg.xml放在同一目录下,进行DEBUG里面运行的,还没有进行部署,
IK版本 3.2.8
现在IKAnalyzer.cfg.xml中进行配置内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>IK Analyzer 扩展配置</comment> <!--用户可以在这里配置自己的扩展字典 --> <entry key="ext_dict">/mydict.dic;</entry> <!--用户可以在这里配置自己的扩展停止词字典 <entry key="ext_stopwords">/ext_stopword.dic</entry> --> </properties>
mydict.dic内容如下:
ab 固定术 复位术 cde
分词代码如下:
List<String> list = new ArrayList<String>(); StringReader input = new StringReader("固定术复位术abcde"); IKSegmentation ikSeg = new IKSegmentation(input, true); Lexeme lexeme; try { while ((lexeme = ikSeg.next()) != null) { System.out.println(lexeme.getLexemeText()); list.add(lexeme.getLexemeText()); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
想达到的效果是:固定术 复位术 aa cde四个词组
实际效果为:固定 术 复位 术 abcde 五个词组
mydict.dic、ext_stopword.dic、IKAnalyzer.cfg.xml放在同一目录下,进行DEBUG里面运行的,还没有进行部署,
发表评论
-
来自开源支持者的第一笔捐赠
2013-01-09 21:15 57862013年1月9号,一个平凡而又不平常的日子! IK中文分词 ... -
发布 IK Analyzer 2012 FF 版本
2012-10-23 17:50 25141首先感谢大家对IK分词器的关注。 最近一段时间正式公司事务最 ... -
发布 IK Analyzer 2012 版本
2012-03-08 11:23 36236新版本改进: 支持分词歧义处理 支持数量词合并 词典支持中英 ... -
CSDN发生严重用户账号泄密事件
2011-12-21 19:21 2570之前有在CSDN注册过的兄弟们,注意了。。。 如果你的邮箱, ... -
一个隐形的java int溢出
2011-08-30 09:44 7565故事的背景: 笔者最近在做一个类SNS的项目,其中 ... -
雷军 :互联网创业的葵花宝典
2011-05-04 10:35 3599博主评: 这片博客很短 ... -
Luci-mint站内搜索实测
2011-04-02 16:18 4154关于Luci-mint 服务器硬 ... -
TIPS - XML CDATA中的非法字符处理
2011-02-17 15:03 3325XML解析过程中,常遇见CDATA中存在非法字符,尤其在火星文 ... -
对Cassandra的初体验
2010-10-13 17:58 9164作为“云计算”时代的架构设计人员而言,不懂K-V库会被 ... -
Spring + iBatis 的多库横向切分简易解决思路
2010-10-11 13:43 94151.引言 笔者最近在做一个互联网的“类SNS”应用,应用 ... -
发布 IK Analyzer 3.2.5 稳定版 for Lucene3.0
2010-09-08 14:43 5830新版本IKAnnlyzer3.2.8已发布! 地址: http ... -
关于Lucene3.0.1 QueryParser的一个错误
2010-05-21 21:33 2133表达式1: 引用 id:"1231231" ... -
发布 IK Analyzer 3.2.3 稳定版 for Lucene3.0
2010-05-15 14:13 6738IK Analyzer 3.2.3版本修订 在3.2.0版 ... -
windows平台上的nginx使用
2010-01-28 17:13 3413转载自:http://nginx.org/en/docs/wi ... -
发布IKAnnlyzer3.2.0稳定版 for Lucene3.0
2009-12-07 09:27 9604最新3.2.5版本已经推出,http://linliangyi ... -
在Tomcat下以JNDI方式发布JbossCache
2009-12-04 10:57 3856前言: 看过JbossCache的开发手册,发现在Jb ... -
Spring AOP小例子
2009-11-16 10:35 3410PS: 要注明一下,这个是转载滴,之前漏了说鸟,汗死 这里给 ... -
ActiveMQ 5.X 与 Tomcat 集成一(JNDI部署)
2009-11-10 15:15 5655原文地址:http://activemq.apache.org ... -
发布IKAnalyzer中文分词器V3.1.6GA
2009-11-08 23:10 11870IKAnalyzer3.2.0稳定版已经发布,支持Lucene ... -
设计模式感悟
2009-11-07 17:57 3700最近又把以前学习的模式过了一遍,感觉模式不是学出来的,是悟出来 ...
相关推荐
solr的IK分词器JAR及配置文件 jar包和配置文件的放置位置不一样,详情可搜索 IK Analyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包。...org.wltea.analyzer.lucene.IKAnalyzer jar
在压缩包内的 "IKAnalyzer3.2.8_jar_zip" 文件,可能是一个错误的文件名,因为正常情况下,IKAnalyzer的jar文件应该是直接命名为 "IKAnalyzer3.2.8.jar",而不会带有 "_jar_zip" 的后缀。这可能是上传时的误操作或者...
总之,IKAnalyzer3.2.8是一款强大的中文分词工具,它的出现极大地推动了中文信息处理技术的发展,为开发者提供了高效、便捷的中文分词解决方案。通过不断的优化和升级,IKAnalyzer将继续在中文信息处理领域发挥重要...
通过深入研究IKAnalyzer3.2.8的源码,开发者可以了解中文分词的基本原理,学习如何优化分词算法,以及如何在实际项目中与搜索引擎框架集成,提升信息检索系统的效能。同时,源码阅读也是提升Java编程技能和理解软件...
### 关于IKAnalyzer3.2.8扩展词典配置的个人心得和意见 #### 一、IKAnalyzer简介 IKAnalyzer是一款高性能的基于Java语言的中文分词组件,它被广泛应用于搜索引擎、内容管理系统以及各类需要进行中文文本处理的应用...
IK Analyzer 3.2.8特性 采用了特有的“正吐迭代最细粒度切分算法“,支持细粒度和最大词长两种切分模式;具有83万字/秒(1600KB/S)的高速处理能力。 采用了多子处理器分析模式,支持:英文字母、数字、中文词汇等...
IK Analyzer是基于lucene实现的分词开源框架 需要在项目中引入: IKAnalyzer.cfg.xml IKAnalyzer2012.jar lucene-core-4.3.0.jar stopword.dic
IKAnalyzer 的下载地址为:http://ik-analyzer.googlecode.com/files/IKAnalyzer3.2.8%20bin.zip。我们可以将其解压到 /usr/local/ 目录下,然后将其添加到 Solr 的配置文件中。 六、中文分词配置 在 Solr 的配置...
IKAnalyzer3.2.8版本支持两种不同的分词方式:细粒度切分和最大词长切分。以下是一些具体的例子: - **文本原文1**:“IKAnalyzer是一个开源的,基于java诧言开发的轻量级的中文分词工具包。从2006年12月推出1.0版...
3. IKAnalyzer3.2.8_bin.zip:这是版本号为3.2.8的二进制包,"bin"通常包含了可执行文件和其他运行所需文件,适合直接部署使用。 在使用这些IKAnalyzer版本时,你需要根据你的Solr版本和实际需求选择合适的版本进行...
#### 一、IKAnalyzer3.2.8系统架构 IKAnalyzer3.2.8是一款基于Java语言编写的开源分词组件,广泛应用于搜索引擎、文本处理等领域。它能够高效地对中文文本进行分词处理,并支持自定义词典扩展等功能。本文档旨在...
说明:依赖jar包:lucene-core-2.3.2.jar、IKAnalyzer3.2.8.jar。 一、LuceneUtil 工具类代码: package com.zcm.lucene; import java.io.File; import java.io.IOException; import java.io.StringReader; import...
尝试使用Nutch 0.9和IKAnalyzer 3.1.6GA组合,但由于版本兼容性问题导致失败,因此改用Nutch 1.2和IKAnalyzer 3.2.8,并将Tomcat升级到6.0.35版本。 在Nutch 1.2中集成IKAnalyzer,需要修改NutchAnalysis.jj文件,...
2. 集成IK分词器:在Lucene中集成IK,首先需要将IKAnalyzer的jar包添加到项目的类路径中。然后,在创建Analyzer时,使用IKAnalyzer类替换默认的Analyzer,这样在索引和搜索过程中就会使用IK进行分词。 三、使用步骤...
IKAnalyzer分词 2012版不支持,采用3.2.8版 在使用2012版时异常:ClassNotFoundException: org.apache.lucene.analysis.tokenattributes.CharTermAttribute 庖丁分词 使用 paoding-analysis-2.0.4-beta.zip 版时...
为了解决这个问题,我们转向了IKAnalyzer 3.2.8版本,并与Lucene 3.1.0版本搭配使用。在新的`analysisByIK3Point2`方法中,虽然基本步骤相似,但需要注意的是,与Lucene 2.x版本相比,部分接口名称和类型有所变化,...
IKAnalyzer3.2.8.jar lucene-analyzers-3.5.0.jar lucene-core-3.6.1.jar lucene-highlighter-3.5.0.jar lucene-memory-3.5.0.jar
自2006年首次发布以来,IKAnalyzer已经历了多个版本的迭代和完善,最新版本为3.2.8版。该工具包最初设计是为了与Lucene搜索引擎集成使用,但随着时间的发展,IKAnalyzer已经能够作为一个独立的Java分词组件使用。 #...
- 将`IKAnalyzer3.2.8.jar`文件复制到`tomcat-7.0.14\webapps\solr\WEB-INF\lib`目录下。 - **配置Schema文件**: - 打开`solr`目录下的`schema.xml`文件,在`<Types>`部分添加自定义的`TextField`类型,并指定...