1

MeCab (http://mecab.sourceforge.net/#download) を使用して、日本語の文章の単語分割と、すべての単語を品詞でタグ付けしようとしています。http://mecab.sourceforge.net/#install-unixの手順に従って MeCab をインストールしました。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");
  }
}

README は次のとおりです。

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 を実際にコンパイルして実行する方法がわかりません。アイデアはありますか?ありがとう!

4

2 に答える 2

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

ただし、これは、プラットフォームがLinuxであり、makeプログラムにアクセスでき、Javaインクルードが/ usr / local / jdk/includeにあることを前提としています。

そうでない場合は、Makefileを読んで、自分の環境でビルドできるかどうかを確認してください。

于 2011-05-04T03:45:57.253 に答える
0

OS XI の場合、makefile を更新しました。私はいくつかの変更を加えました:

  1. INCLUDEOS X JAVA_HOME/include を指すように設定しました ( OS X インストールの標準であると思わ/usr/libexec/java_homeれるユーティリティを使用)

  2. $(INCLUDE)/darwin代わりに含める 2 番目のインクルード パスを設定します。/linux

  3. CXX コマンドを変更して、-dynamiclibコンパイラ フラグを使用して Linux .so ライブラリの代わりに dylib をビルドします。
  4. 通常の mecab lib と jni ラッパーが何らかの理由で同じ名前でビルドされているため、ライブラリの名前も変更しました。デフォルトの OS X インストールでは大文字と小文字を区別しないファイル システムが使用されるため、非常に問題になる可能性があります。構築する代わりに、構築しlib$(TARGET).soていますlib$(TARGET)Jni.dylib
  5. make testtoの LD_LIBRARY_PATH も変更しましたDYLIB_FALLBACK_LIBRARY_PATH=.が、おそらく変更しなくても動作するはずです。

これは私の完全なメイクファイルがどのように見えるかです。

TARGET=MeCab
JAVAC=javac
JAVA=java
JAR=jar
CXX=c++
INCLUDE=$(shell echo `/usr/libexec/java_home`/include)

PACKAGE=org/chasen/mecab

LIBS=`mecab-config --libs`
INC=`mecab-config --cflags` -I$(INCLUDE) -I$(INCLUDE)/darwin

all:
    $(CXX) -O3 -c -fpic $(TARGET)_wrap.cxx  $(INC)
    $(CXX) -dynamiclib  $(TARGET)_wrap.o -o lib$(TARGET)Jni.dylib $(LIBS)
    $(JAVAC) $(PACKAGE)/*.java
    $(JAVAC) test.java
    $(JAR) cfv $(TARGET).jar $(PACKAGE)/*.class

test:
    env DYLD_FALLBACK_LIBRARY_PATH=. $(JAVA) test

clean:
    rm -fr *.jar *.o *.so *.class $(PACKAGE)/*.class

cleanall:
    rm -fr $(TARGET).java *.cxx
于 2016-03-02T07:15:08.073 に答える