精华帖 (3) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-24
gogobu 写道 有个 Compass 相关的问题想请教。
IKAnalyzer 和 IKSimilarity 目前都是直接继承了 Lucene,所以直接接入 Compass 没有问题。但 IKQueryParser 好象不是,无法直接替代 lucene 的 QueryParser。 请问有什么方法可以把 IKQueryParser 集成到 Compass 里面?谢谢! IKQueryParser 与 lucene QueryParser并不是接口实现关系。IKQueryParser是为了实现分词歧义的组合优化而设计的,并不像 lucene QueryParser那样可以解析lucene的查询表达式。只是命名的时候,不知道叫啥最合适,最后还是选择了QueryParser。 而 lucene QueryParser 本身也不像 Analyzer和 Similarity那样以接口设计的,它本身就是一个具体实现类。 |
|
返回顶楼 | |
发表时间:2009-11-24
linliangyi2007 写道 gogobu 写道 有个 Compass 相关的问题想请教。 IKAnalyzer 和 IKSimilarity 目前都是直接继承了 Lucene,所以直接接入 Compass 没有问题。但 IKQueryParser 好象不是,无法直接替代 lucene 的 QueryParser。 请问有什么方法可以把 IKQueryParser 集成到 Compass 里面?谢谢! IKQueryParser 与 lucene QueryParser并不是接口实现关系。IKQueryParser是为了实现分词歧义的组合优化而设计的,并不像 lucene QueryParser那样可以解析lucene的查询表达式。只是命名的时候,不知道叫啥最合适,最后还是选择了QueryParser。 而 lucene QueryParser 本身也不像 Analyzer和 Similarity那样以接口设计的,它本身就是一个具体实现类。 明白了,谢谢。如果我还是想用上 IKQueryParser,是不是可以自己实现一个类重载 lucene QueryParser,然后在里面调用 IKQueryParser? 还是说这两者基本上就不兼容? |
|
返回顶楼 | |
发表时间:2009-11-24
linliangyi,
如何在tomcat启动的时候,就加载 IKAnalyzer的词典? 而不是在第一次调用IKAnalyzer时加载词典。 因为如果在第一次调用IKAnalyzer时加载词典,用户感觉会比较慢,我想在tomcat容器启动的时候,加载词典,这样,用户第一次使用时就不会感觉到慢了。 |
|
返回顶楼 | |
发表时间:2009-11-24
piziwang 写道 linliangyi,
如何在tomcat启动的时候,就加载 IKAnalyzer的词典? 而不是在第一次调用IKAnalyzer时加载词典。 因为如果在第一次调用IKAnalyzer时加载词典,用户感觉会比较慢,我想在tomcat容器启动的时候,加载词典,这样,用户第一次使用时就不会感觉到慢了。 创建一个Tomcat的ContextListener(这个知道吧),在初始化方法中调用 org.wltea.analyzer.dic.Dictionary.getInstance(); 即可。词典占用27M内存,总共27万个词元。 |
|
返回顶楼 | |
发表时间:2009-11-24
linliangyi2007 写道 piziwang 写道 linliangyi,
如何在tomcat启动的时候,就加载 IKAnalyzer的词典? 而不是在第一次调用IKAnalyzer时加载词典。 因为如果在第一次调用IKAnalyzer时加载词典,用户感觉会比较慢,我想在tomcat容器启动的时候,加载词典,这样,用户第一次使用时就不会感觉到慢了。 创建一个Tomcat的ContextListener(这个知道吧),在初始化方法中调用 org.wltea.analyzer.dic.Dictionary.getInstance(); 即可。词典占用27M内存,总共27万个词元。 明白,我试试,呵呵! |
|
返回顶楼 | |
发表时间:2009-11-25
gogobu 写道 linliangyi2007 写道 gogobu 写道 有个 Compass 相关的问题想请教。 IKAnalyzer 和 IKSimilarity 目前都是直接继承了 Lucene,所以直接接入 Compass 没有问题。但 IKQueryParser 好象不是,无法直接替代 lucene 的 QueryParser。 请问有什么方法可以把 IKQueryParser 集成到 Compass 里面?谢谢! IKQueryParser 与 lucene QueryParser并不是接口实现关系。IKQueryParser是为了实现分词歧义的组合优化而设计的,并不像 lucene QueryParser那样可以解析lucene的查询表达式。只是命名的时候,不知道叫啥最合适,最后还是选择了QueryParser。 而 lucene QueryParser 本身也不像 Analyzer和 Similarity那样以接口设计的,它本身就是一个具体实现类。 明白了,谢谢。如果我还是想用上 IKQueryParser,是不是可以自己实现一个类重载 lucene QueryParser,然后在里面调用 IKQueryParser? 还是说这两者基本上就不兼容? 自问自答,按照Compass的框架写了个简单的custom QueryParser,搞定。 |
|
返回顶楼 | |
发表时间:2009-12-01
林老师,请教你一个问题:
我最近在使用你的 IKAnalyzer, 我一个需求:提取关键词标签。(从一个标题中抽取有意义的标签Tag) 例如,标题: “从全文检索的数据分析来看,https数据不正确,无法还原数据。” 标题中“全文检索”、“https”、“还原” 是有意义的标签 Tag。 我使用 IKAnalyzer 对上面的标题进行分词,如何抽取出上面的标签Tag,其余的词语全部丢掉?? 比如,我定义了一个词典,里面存放我们认为有意义的标签 Tag,根据这个标签词典进行标题内容的标签Tag抽取? myTag.dict 全文 https 还原 手机报警 电信扩容 信息碰撞 关系图 ...... |
|
返回顶楼 | |
发表时间:2009-12-01
piziwang 写道 林老师,请教你一个问题:
我最近在使用你的 IKAnalyzer, 我一个需求:提取关键词标签。(从一个标题中抽取有意义的标签Tag) 例如,标题: “从全文检索的数据分析来看,https数据不正确,无法还原数据。” 标题中“全文检索”、“https”、“还原” 是有意义的标签 Tag。 我使用 IKAnalyzer 对上面的标题进行分词,如何抽取出上面的标签Tag,其余的词语全部丢掉?? 比如,我定义了一个词典,里面存放我们认为有意义的标签 Tag,根据这个标签词典进行标题内容的标签Tag抽取? myTag.dict 全文 https 还原 手机报警 电信扩容 信息碰撞 关系图 ...... 如果你需要信息抽取,你可以尝试使用IKSegmentation进行分词,并使用自定义的词典代替IK的词典(换句话说,删除原有的主词典)。 程序如下: List<String> testStr = new ArrayList<String>(); testStr.add("IKAnalyzer 是一个开源的,基于java 语言开发的轻量级的中文分词工具包。从2006 年12月推出1.0 版开始, IKAnalyzer 已经推出了3 个大版本。"); for(String t : testStr){ System.out.println(t); IKSegmentation ikSeg = new IKSegmentation(new StringReader(t) , false); try { Lexeme l = null; while( (l = ikSeg.next()) != null){ System.out.println(l); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("***************"); } 再根据切分出来的Lexeme的Type来判断是不是词典中的词,以下是Type的分类。 //lexemeType常量 //普通词元 public static final int TYPE_CJK_NORMAL = 0; //姓氏 public static final int TYPE_CJK_SN = 1; //尾缀 public static final int TYPE_CJK_SF = 2; //未知的 public static final int TYPE_CJK_UNKNOWN = 3; //数词 public static final int TYPE_NUM = 10; //量词 public static final int TYPE_NUMCOUNT = 11; //英文 public static final int TYPE_LETTER = 20; |
|
返回顶楼 | |
发表时间:2009-12-01
linliangyi2007 写道 piziwang 写道 林老师,请教你一个问题:
我最近在使用你的 IKAnalyzer, 我一个需求:提取关键词标签。(从一个标题中抽取有意义的标签Tag) 例如,标题: “从全文检索的数据分析来看,https数据不正确,无法还原数据。” 标题中“全文检索”、“https”、“还原” 是有意义的标签 Tag。 我使用 IKAnalyzer 对上面的标题进行分词,如何抽取出上面的标签Tag,其余的词语全部丢掉?? 比如,我定义了一个词典,里面存放我们认为有意义的标签 Tag,根据这个标签词典进行标题内容的标签Tag抽取? myTag.dict 全文 https 还原 手机报警 电信扩容 信息碰撞 关系图 ...... 如果你需要信息抽取,你可以尝试使用IKSegmentation进行分词,并使用自定义的词典代替IK的词典(换句话说,删除原有的主词典)。 程序如下: List<String> testStr = new ArrayList<String>(); testStr.add("IKAnalyzer 是一个开源的,基于java 语言开发的轻量级的中文分词工具包。从2006 年12月推出1.0 版开始, IKAnalyzer 已经推出了3 个大版本。"); for(String t : testStr){ System.out.println(t); IKSegmentation ikSeg = new IKSegmentation(new StringReader(t) , false); try { Lexeme l = null; while( (l = ikSeg.next()) != null){ System.out.println(l); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("***************"); } 再根据切分出来的Lexeme的Type来判断是不是词典中的词,以下是Type的分类。 //lexemeType常量 //普通词元 public static final int TYPE_CJK_NORMAL = 0; //姓氏 public static final int TYPE_CJK_SN = 1; //尾缀 public static final int TYPE_CJK_SF = 2; //未知的 public static final int TYPE_CJK_UNKNOWN = 3; //数词 public static final int TYPE_NUM = 10; //量词 public static final int TYPE_NUMCOUNT = 11; //英文 public static final int TYPE_LETTER = 20; "如果你需要信息抽取,你可以尝试使用IKSegmentation进行分词,并使用自定义的词典代替IK的词典(换句话说,删除原有的主词典)。" 删除原有的主词典 岂不是其他地方的lucene+IKanalyzer全文检索 就无法使用了啊? 替换IK的词典,会不会影响到内存中已经加载的IK词典?? |
|
返回顶楼 | |
发表时间:2009-12-01
piziwang 写道 删除原有的主词典 岂不是其他地方的lucene+IKanalyzer全文检索 就无法使用了啊? 替换IK的词典,会不会影响到内存中已经加载的IK词典?? 这个也是一个问题,是会影响的。如果你既要全部的词典,又要个性化关键字,那你只能自己在分词后进行二次匹配,来决定那些词要留了。 |
|
返回顶楼 | |