2011-07-15 6 views
3

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

ありがとうございました

+1

ANTLRなどの正式な言語用の解析ツールをNLPツールに強制することは、決して実際には機能しません。彼らは文法の頻繁な更新はもちろんのこと、自然言語で起こる曖昧さに対処するようには設計されていません。 –

答えて

3

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

私はNLTKの経験はありませんが、あまりうまくいきませんでした。

Stanford Natural Language Processing Groupには、優れたNLパーサーがあります。つまり、私はそれについて良いことを聞いてきました、私は決してNLPの専門家ではありません!

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); 
    } 
} 

出力します:

Sentence: I am currently writing an NLP project in java that tags and parses text. 
(ROOT 
    (S 
    (NP (PRP I)) 
    (VP (VBP am) 
     (ADVP (RB currently)) 
     (VP (VBG writing) 
     (NP (DT an) (NNP NLP) (NN project)) 
     (PP (IN in) 
      (NP (NN java))) 
     (SBAR (IN that) 
      (S 
      (NP (NNS tags) 
       (CC and) 
       (NNS parses)) 
      (VP (VBZ text)))))) 
    (. .)))

をさまざまな言語のためのJARと文法がhereをダウンロードすることができます。ここ

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

+0

ありがとう! 私はスタンフォードパーサーを調べましたが、私の問題はそれがモデルベースであることです。 NLTKのチャンクパーサーと同様の方法で、独自の文法ルールを追加する方法を見つけることができませんでした。 – Lezan

+0

@ LEzan、ああ、私が正しく理解すれば、あなたは入力ソース/言語のほんの一部にしか興味がありません。もしそうなら、あなたは元の質問に例を挙げることができますか?ANTLRを使う可能性はわずかです。 –

+0

さて、私は現在Antlrを使用していますが、効果的に処理するにはルールが大きくなりすぎています。基本的に私は入力としていくつかのルールをとり、出力としてツリーを生成するものが欲しいです。 'のS:NP VP NP:DT ADJ + NN VP: は、私はそれを与えたのであれば、たとえばそこに規則VB *' をそして、この文を渡さ: "クイックキツネが飛び込みました"。その後、 私が取得したいと思います: (S (NP(DTザ・) (ADJ速い) (NN狐) ) (VP(VBDが飛び込ん)) ) おかげ – Lezan