3

現在、テキストにタグを付けて解析する NLP プロジェクトを Java で作成しています。私の主な問題は、解析コンポーネントに関するものです。現在、タグ付きテキストを解析ツリーに変換するために Antlr を使用しています。Antlr は主に NL 解析ツールとして作成されたものではないため、多くのメモリを消費し、文法の変更に簡単に適応することはできません。この問題を解決するために jython 内で NLTK を使用したいと思います。これは特にこれが分散プロジェクトであることを考慮して推奨されますか、またはこれらの解析ツリーを生成するための適切な Java 同等物があります。

ありがとう

4

1 に答える 1

3

その通りです。ANTLRはこのようなものにはあまり適していません。

私はNLTKの経験はありませんが、Jythonを介して「重い物を持ち上げる」ことを試みましたが、うまくいきませんでした。

スタンフォード自然言語処理グループには、優れたNLパーサーがあります。つまり、私はそれについて良いことを聞いたことがあります。私は決してNLPの専門家ではありません。

次のような簡単な英語の文を解析する方法は次の"I am currently writing an NLP project in Java that tags and parses text."とおりです。

import edu.stanford.nlp.ling.*;
import edu.stanford.nlp.objectbank.*;
import edu.stanford.nlp.parser.lexparser.*;
import edu.stanford.nlp.process.*;
import edu.stanford.nlp.trees.*;
import java.io.*;
import java.util.*;

public class StanfordParserDemo {

  public static void main(String[] args) throws Exception {

    // englishPCFG.ser.gz is in the download. 
    LexicalizedParser parser = new LexicalizedParser("/path/to/englishPCFG.ser.gz");
    TokenizerFactory<Word> tokenFactory = PTBTokenizer.factory(false, new WordTokenFactory());

    String sentence = "I am currently writing an NLP project in Java that tags and parses text.";
    System.out.println("Sentence: " + sentence);

    List<Word> words = tokenFactory.getTokenizer(new StringReader(sentence)).tokenize();
    parser.parse(words);

    Tree tree = parser.getBestParse();
    TreePrint treePrinter = new TreePrint("penn,typedDependenciesCollapsed");
    treePrinter.printTree(tree);
  }
}

印刷するもの:

文:私は現在、テキストにタグを付けて解析するJavaでNLPプロジェクトを作成しています。
(根
  (S
    (NP(PRP I))
    (VP(VBP am)
      (ADVP(現在RB))
      (VP(VBGライティング)
        (NP(DT an)(NNP NLP)(NNプロジェクト))
        (PP(IN in)
          (NP(NN java)))
        (SBAR(その中で)
          (S
            (NP(NNSタグ)
              (CCおよび)
              (NNS解析))
            (VP(VBZテキスト)))))))
    (。。)))

さまざまな言語のJARと文法はここからダウンロードできます。

于 2011-07-15T12:50:59.377 に答える