0

私はスタンフォード NLP の初心者です。ファイルの内容を解析し、名詞句を抽出するために語彙化されたパーサーを使用しています。行を解析している間、ツリー構造を生成するのに時間がかかります。

行から名詞句を取得するために Tregex パターンを使用しています。

解析に 1 MB のファイルを使用しているため、解析と名詞句の抽出に 2 時間以上かかります。

これが私が使用している完全なコードです。

        Tree x = parser.apply(line);
        System.out.println("tree s=="+x);
        TregexPattern NPpattern = TregexPattern.compile("@NP <@/NN.?/");
        TregexMatcher matcher = NPpattern.matcher(x);

        while (matcher.findNextMatchingNode()) {
            Tree match = matcher.getMatch();
            List<TaggedWord> tWord = match.taggedYield();
            Iterator<TaggedWord> it = tWord.iterator();
            String str="";
            while(it.hasNext()){
                TaggedWord word = it.next();
                String taggedWord = word.tag();
                if(taggedWord.equals("NN")||taggedWord.equals("NNS")||taggedWord.equals("NNP")){
                    str = str+word.value()+" ";
                }
            }
       }

パフォーマンスを向上させる方法を教えてください。または、このコードを最適化する別の方法があります。

よろしくお願いします。

4

1 に答える 1

1

テキストの完全な Constituency 解析はちょっと遅いです....それに固執すると、できることはあまりないかもしれません。

ただし、いくつか言及する必要があります。(i) englishPCFG.ser.gz 文法を使用していない場合は、englishFactored.seer.gz を使用するよりも高速であり、(ii) 非常に長い文の解析は特に遅いため、使用する必要があります。ですから、非常に長い文 (たとえば 70 語以上) を省略または分割して取得できれば、非常に役立ちます。特に、テキストの一部が Web スクレイピングなどからのもので、実際には文ではないものの長いリストがある場合は、それらをフィルタリングまたは分割すると非常に役立つ場合があります。

あなたが進むことができる他の方向は、完全なパーサーではなく、NP チャンカー (テキスト内の最小限の名詞句を識別するもの) だけが必要であると思われることです。これらは再帰構造を構築しないため、はるかに高速になります。現在、スタンフォード NLP ツールには 1 つもありませんが、Web でこの用語を検索すると、いくつかのツールを見つけることができます。

于 2013-02-02T18:54:32.300 に答える