liangsi03 / ik-analyzer

Automatically exported from code.google.com/p/ik-analyzer
0 stars 0 forks source link

IKAnalyzer扩展词库在Web Application下不被加载的问题 #54

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
在Web站点下,在Servlet中用配置方式的扩展词库,扩展词库无�
��。
但在Servlet中加一个main方法,将同样的代码拷贝至main方法中��
�并直接作为Java Application运行,扩展词库就有效。
我的IKAnalyzer.cfg.xml和扩展词库文件singleword.dic和extword2.dic,都
放在src目录下。词库文件按要求,用各种工具反复检查过,��
�是Unicode(UTF-8无签名)-代码页65001。(但是从压缩包给出来的st
opword.dic我打开看,是GB2312代码936的编码)

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">singleword.dic;extword2.dic;</entry>
    <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords">stopword.dic;</entry>
</properties>

代码如下:
        String str = "使用IKQueryParser查询分析器构造Query对象,EUROMODA,RAMPAGE,七格格";
        StringReader reader = new StringReader(str);

        IKAnalyzer analyzer = new IKAnalyzer(false);
        TokenStream stream = analyzer.tokenStream("", reader);
        CharTermAttribute termAtt  = (CharTermAttribute)stream.addAttribute(CharTermAttribute.class);
        OffsetAttribute offAtt  = (OffsetAttribute)stream.addAttribute(OffsetAttribute.class);  
        // 循环打印出分词的结果,及分词出现的位置
        try {
            while(stream.incrementToken()){
                System.out.println(termAtt.toString() + "("+ offAtt.startOffset() + " " + offAtt.endOffset()+")");   
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

两者最大差别,在作为Web 
Application运行时,Eclipse的Console缺少了
加载扩展词典:singleword.dic
加载扩展词典:extword2.dic
加载扩展停止词典:stopword.dic
这三行,我猜它根本没有去加载IKAnalyzer.cfg.xml文件的扩展词��
�。

扩展分词有效时输出如下结果(即Java Application运行时):
加载扩展词典:singleword.dic
加载扩展词典:extword2.dic
加载扩展停止词典:stopword.dic
使用|(0 2)
使|(0 1)
用|(1 2)
ikqueryparser|(2 15)
查询|(15 17)
查|(15 16)
询|(16 17)
分析器|(17 20)
分析|(17 19)
分|(17 18)
析|(18 19)
器|(19 20)
构造|(20 22)
构|(20 21)
造|(21 22)
query|(22 27)
对象|(27 29)
对|(27 28)
象|(28 29)
euromoda|(30 38)
rampage|(39 46)
七格|(47 49)
七|(47 48)
格格|(48 50)
格|(48 49)
格|(49 50)

无效时(即Servlet下),输出如下结果:
分析器|(17 20)
分析|(17 19)
器|(19 20)
构造|(20 22)
query|(22 27)
对象|(27 29)
euromoda|(30 38)
rampage|(39 46)
七格|(47 49)
七|(47 48)
格格|(48 50)
格|(48 49)
格|(49 50)

我是菜鸟,请教我。谢谢!

Original issue reported on code.google.com by fz...@163.com on 1 May 2012 at 12:32

GoogleCodeExporter commented 8 years ago
注:
在eclipse的调试web站点的classes目录下,也看到了这四个扩展词
库文件(1个cfg.xml和三个.dic文件)

Original comment by fz...@163.com on 1 May 2012 at 12:58

GoogleCodeExporter commented 8 years ago
附:
我分别在main(和Servlet是在同一个类中)和Servlet的代码中加��
�下面两行:
Configuration configuration = Configuration.getInstance();
List<String> list = configuration.getExtDictionarys();
用JavaApplication调试的结果,list长度为2,值就是那两个文件的
值。
而用Debug On 
Server调试Servlet,list长度为0。也就是说,Servlet没有从classes目
录的IKAnalyzer.cfg.xml中加载扩展词库。

Original comment by fz...@163.com on 1 May 2012 at 1:13

GoogleCodeExporter commented 8 years ago
附件是我的完整代码,用eclipse导入,Lucene引用包含IKAnalyzer和
Lucene3.6.jar的包,请自行添加一下,拜托帮忙看一下到底错在�
��里了。
谢谢了。

Original comment by fz...@163.com on 1 May 2012 at 1:33

Attachments:

GoogleCodeExporter commented 8 years ago

Original comment by linliang...@gmail.com on 2 May 2012 at 2:12