如何编译调用MeCab的java文件 - 日语词性&形态分析仪?

时间:2011-05-04 03:30:55

标签: java unicode classpath text-analysis mecab

我正在尝试使用MeCab(http://mecab.sourceforge.net/#download)来完成日语句子的分词,以及通过词性标记每个单词。我按照这些说明http://mecab.sourceforge.net/#install-unix安装了MeCab。由于我不想编写shell脚本来处理150,000个句子(因为我的Mac OS X终端有显示日文字符的问题),我正在使用Java的现有绑定:http://sourceforge.net/projects/mecab/files/mecab-java/0.98pre3/。此时我正在尝试编译并运行给定的test.java文件:

import org.chasen.mecab.MeCab;
import org.chasen.mecab.Tagger;
import org.chasen.mecab.Node;

public class test {
  static {
    try {
       System.loadLibrary("MeCab");
    } catch (UnsatisfiedLinkError e) {
       System.err.println("Cannot load the example native code.\nMake sure your LD_LIBRARY_PATH contains \'.\'\n" + e);
       System.exit(1);
    }
  }

  public static void main(String[] argv) {
     System.out.println(MeCab.VERSION);
     Tagger tagger = new Tagger();
     String str = "太郎は二郎にこの本を渡した。";
     System.out.println(tagger.parse(str));
     Node node = tagger.parseToNode(str);
     for (;node != null; node = node.getNext()) {
    System.out.println(node.getSurface() + "\t" + node.getFeature());
     }
     System.out.println ("EOS\n");
  }
}

这是自述文件:

1. Build UTF-8 dictionary

2. How to use?

  See test.java as sample program.

  % java -classpath MeCab.jar test -d ../dic

我编译:javac test.java。然后我运行:java -classpath MeCab.jar test -d ../dic。结果是以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: //
Caused by: java.lang.ClassNotFoundException: ..
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

我真的不了解这个mecab-java-0.98pre3目录的层次结构,所以不要看到如何实际编译和运行这个test.java。伙计们,有什么想法?谢谢!

2 个答案:

答案 0 :(得分:1)

你先运行make吗?第一步是实际构建mecab-java绑定库。

$ tar -xvzf mecab-java-0.xx.tar.gz
$ cd mecab-java-0.xx
$ make

这将导致输出以下2个文件:

  1. MeCab.jar
  2. libMeCab.so
  3. 但是,这假设您的平台是Linux,您可以访问make程序,并且您的Java包含在/ usr / local / jdk / include。

    如果不是这种情况,请尝试阅读Makefile,看看是否可以在自己的环境中构建它。

答案 1 :(得分:0)

对于OS X,我更新了我的makefile。我做了几处改动:

  1. 我将INCLUDE设置为指向OS X JAVA_HOME / include(使用{<1}}实用程序,我认为是OS X安装的标准实用程序)

  2. 设置第二个包含路径以包含/usr/libexec/java_home而不是$(INCLUDE)/darwin

  3. 使用/linux编译器标志更改CXX命令以构建dylib而不是linux .so库。
  4. 我还重命名了这个库,因为常规的mecab lib和jni包装器由于某种原因使用相同的名称构建,并且由于默认的OS X安装将使用不区分大小写的文件系统,这可能是非常有问题的。而不是构建-dynamiclib我建立lib$(TARGET).so
  5. 我还将lib$(TARGET)Jni.dylib中的LD_LIBRARY_PATH更改为make test,但我认为可能无需更改即可使用。
  6. 这就是我的完整makefile的样子。

    DYLIB_FALLBACK_LIBRARY_PATH=.