paoding在classpath下装载词典的问题

54 views
Skip to first unread message

lightwinner

unread,
Sep 25, 2008, 9:54:11 PM9/25/08
to Paoding's Knives
最近我在做一个检索的项目,用的就是您写的paoding分词包,感觉非常好,在这说声谢谢。
但是,我将项目打成war包后,就报错误如下:
net.paoding.analysis.exception.PaodingAnalysisException: dic home
should not be a file, but a directory!
at
net.paoding.analysis.knife.PaodingMaker.setDicHomeProperties(PaodingMaker.java:
324)
at
net.paoding.analysis.knife.PaodingMaker.getDicHome(PaodingMaker.java:
255)
at
net.paoding.analysis.knife.PaodingMaker.loadProperties(PaodingMaker.java:
187)
at
net.paoding.analysis.knife.PaodingMaker.loadProperties(PaodingMaker.java:
223)
at
net.paoding.analysis.knife.PaodingMaker.loadProperties(PaodingMaker.java:
223)
at
net.paoding.analysis.knife.PaodingMaker.getProperties(PaodingMaker.java:
129)
at
net.paoding.analysis.analyzer.PaodingAnalyzer.init(PaodingAnalyzer.java:
70)
at
net.paoding.analysis.analyzer.PaodingAnalyzer.<init>(PaodingAnalyzer.java:
59)
at
net.paoding.analysis.analyzer.PaodingAnalyzer.<init>(PaodingAnalyzer.java:
52)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:
39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:
27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494
................
我的paoding-dic-home.properties文件是这样配置的paoding.dic.home=classpath:dic/,也就
是说paoding-dic-home.properties文件及词典我都是放到classpath下的,觉得一切都很正常,但是就是报这个异常。我
认为这个是paoding的一个bug问题,希望能够得到解决。
不过在eclipse环境中,也就是打成war包之前运行一切正常。特来请教,特别感谢。

lightwinner.chn
2008.9.26

minglong yu

unread,
Sep 26, 2008, 7:34:44 AM9/26/08
to pao...@googlegroups.com
这个问题解决方案是文件路径中不要有空格,最好是自己修改源代码中的URL为URI获得路径,重新编译,这样就不会有问题。

2008/9/26 lightwinner <lightwi...@gmail.com>

lightwinner

unread,
Sep 26, 2008, 10:32:39 PM9/26/08
to Paoding's Knives
非常感谢minglong.yu的回复。您说的修改源代码中的URL为URL获得路径,我查看了下源代码,感觉问题是不是出在了这里(引用原代码如
下):
// 获取词典安装目录配置:
// 如配置了PAODING_DIC_HOME环境变量,则将其作为字典的安装主目录
// 否则使用属性文件的paoding.dic.home配置
// 但是如果属性文件中强制配置paoding.dic.home.config-first=this,
// 则优先考虑属性文件的paoding.dic.home配置,
// 此时只有当属性文件没有配置paoding.dic.home时才会采用环境变量的配置
String dicHomeBySystemEnv = System
.getenv(Constants.ENV_PAODING_DIC_HOME);
String dicHome = getProperty(p, Constants.DIC_HOME);
if (dicHomeBySystemEnv != null) {
String first = getProperty(p, Constants.DIC_HOME_CONFIG_FIRST);
if (first != null && first.equalsIgnoreCase("this")) {
if (dicHome == null) {
dicHome = dicHomeBySystemEnv;
}
} else {
dicHome = dicHomeBySystemEnv;
}
}
// 如果环境变量和属性文件都没有配置词典安转目录
// 则尝试在当前目录和类路径下寻找是否有dic目录,
// 若有,则采纳他为paoding.dic.home
// 如果尝试后均失败,则抛出PaodingAnalysisException异常
if (dicHome == null) {
File f = new File("dic");
if (f.exists()) {
dicHome = "dic/";
} else {
URL url = PaodingMaker.class.getClassLoader()
.getResource("dic");
if (url != null) {
dicHome = "classpath:dic/";
}
}
}


是不是URL url = PaodingMaker.class.getClassLoader().getResource("dic");的装载
有问题?
我的项目用的是spring框架,dic是放在classpath下,如果修改源代码,请问我如何修改呢?

谢谢,不胜感激。
lightwinner.chn

On 9月26日, 下午7时34分, "minglong yu" <yumingl...@gmail.com> wrote:
> 这个问题解决方案是文件路径中不要有空格,最好是自己修改源代码中的URL为URI获得路径,重新编译,这样就不会有问题。
>
> 2008/9/26 lightwinner <lightwinner....@gmail.com>
>
>
>
>
>
> > 最近我在做一个检索的项目,用的就是您写的paoding分词包,感觉非常好,在这说声谢谢。
> > 但是,我将项目打成war包后,就报错误如下:
> > net.paoding.analysis.exception.PaodingAnalysisException: dic home
> > should not be a file, but a directory!
> > at
>
> > net.paoding.analysis.knife.PaodingMaker.setDicHomeProperties(PaodingMaker.j-ava:
> > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAcce-ssorImpl.java:
> > 39)
> > at
>
> > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstru-ctorAccessorImpl.java:
> > 27)
> > at java.lang.reflect.Constructor.newInstance(Constructor.java:494
> > ................
> > 我的paoding-dic-home.properties文件是这样配置的paoding.dic.home=classpath:dic/,也就
> > 是说paoding-dic-home.properties文件及词典我都是放到classpath下的,觉得一切都很正常,但是就是报这个异常。我
> > 认为这个是paoding的一个bug问题,希望能够得到解决。
> > 不过在eclipse环境中,也就是打成war包之前运行一切正常。特来请教,特别感谢。
>
> > lightwinner.chn
> > 2008.9.26- 隐藏被引用文字 -
>
> - 显示引用的文字 -

minglong yu

unread,
Sep 28, 2008, 9:07:13 PM9/28/08
to pao...@googlegroups.com
你修改源代码包net.paoding.analysis.knife中的PaodingMaker.java中getFile(String path)方法:
修改前代码是
--------------------------------------------------------------------------------------
private static File getFile(String path) {
  File file;
  URL url;
  if (path.startsWith("classpath:")) {
   path = path.substring("classpath:".length());
   url = getClassLoader().getResource(path);
   final boolean fileExist = url != null;
   file = new File(fileExist ? url.getFile() : path) {
    private static final long serialVersionUID = 4009013298629147887L;
    public boolean exists() {
     return fileExist;
    }
   };
  } else {
   file = new File(path);
  }
  return file;
 }
--------------------------------------------------------------------------------------
private static File getFile(String path) {
  File file;
  URL url;
//增加一个变量 uri
  URI uri=null;

  if (path.startsWith("classpath:")) {
   path = path.substring("classpath:".length());
   url = getClassLoader().getResource(path);
   try{
     uri=url.toURL();
   }catch(Exception e){
    .........
   }
//此处由url 变为uri
   final boolean fileExist = uri != null;
//此处url.getFile()变为uri.getPath()
   file = new File(fileExist ? uri.getPath() : path) {
    private static final long serialVersionUID = 4009013298629147887L;
    public boolean exists() {
     return fileExist;
    }
   };
  } else {
   file = new File(path);
  }
  return file;
 }
--------------------------------------------------------------------------------------
2008/9/27 lightwinner <lightwi...@gmail.com>

lightwinner

unread,
Oct 5, 2008, 10:49:53 PM10/5/08
to Paoding's Knives
呵呵,国庆长假一直没有登录
不过我还没测试,我项目中暂时用绝对定位dic目录,等有时间再修改代码。
非常感谢minglong yu的回复,收获不小,再次感谢。
lightwinner
2008.10.06

On 9月29日, 上午9时07分, "minglong yu" <yumingl...@gmail.com> wrote:
> 你修改源代码包net.paoding.analysis.knife中的PaodingMaker.java中getFile(String path)方法:
> 修改前代码是
> ---------------------------------------------------------------------------------------
> private static File getFile(String path) {
> File file;
> URL url;
> if (path.startsWith("classpath:")) {
> path = path.substring("classpath:".length());
> url = getClassLoader().getResource(path);
> final boolean fileExist = url != null;
> file = new File(fileExist ? url.getFile() : path) {
> private static final long serialVersionUID = 4009013298629147887L;
> public boolean exists() {
> return fileExist;
> }
> };
> } else {
> file = new File(path);
> }
> return file;
> }
> ---------------------------------------------------------------------------------------
> private static File getFile(String path) {
> File file;
> URL url;
> //增加一个变量 uri
> URI uri=null;
>
> if (path.startsWith("classpath:")) {
> path = path.substring("classpath:".length());
> url = getClassLoader().getResource(path);
> try{
> uri=url.toURL();
> }catch(Exception e){
> .........
> }
> //此处由url 变为uri
> final boolean fileExist = uri != null;
> //此处url.getFile()变为uri.getPath()
> file = new File(fileExist ? uri.getPath() : path) {
> private static final long serialVersionUID = 4009013298629147887L;
> public boolean exists() {
> return fileExist;
> }
> };
> } else {
> file = new File(path);
> }
> return file;
> }
> ---------------------------------------------------------------------------------------
> 2008/9/27 lightwinner <lightwinner....@gmail.com>
> > net.paoding.analysis.knife.PaodingMaker.setDicHomeProperties(PaodingMaker.j--ava:
> > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAcce--ssorImpl.java:
> > > > 39)
> > > > at
>
> > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstru--ctorAccessorImpl.java:
> > > > 27)
> > > > at java.lang.reflect.Constructor.newInstance(Constructor.java:494
> > > > ................
> > > > 我的paoding-dic-home.properties文件是这样配置的paoding.dic.home=classpath:dic/,也就
> > > > 是说paoding-dic-home.properties文件及词典我都是放到classpath下的,觉得一切都很正常,但是就是报这个异常。我
> > > > 认为这个是paoding的一个bug问题,希望能够得到解决。
> > > > 不过在eclipse环境中,也就是打成war包之前运行一切正常。特来请教,特别感谢。
>
> > > > lightwinner.chn
> > > > 2008.9.26- 隐藏被引用文字 -
>
> > > - 显示引用的文字 -- 隐藏被引用文字 -
>
> - 显示引用的文字 -
Reply all
Reply to author
Forward
0 new messages