0

NLP (自然言語パーサー) で動作するプロジェクトを書いています。私はスタンフォードパーサーを使用しています。

文を取得してパーサーを実行するスレッド プールを作成します。スレッドを 1 つ作成するとすべて正常に動作しますが、スレッドをさらに作成するとエラーが発生します。「テスト」手順は、何らかの関連性を持つ単語を見つけることです。同期を行うと、1 つのスレッドのように動作するはずですが、それでもエラーが発生します。私の問題は、このコードにエラーがあることです:

public synchronized String test(String s,LexicalizedParser lp )
{

    if (s.isEmpty()) return "";
    if (s.length()>80) return "";
    System.out.println(s);
    String[] sent = s.split(" ");
 Tree parse = (Tree) lp.apply(Arrays.asList(sent));
TreebankLanguagePack tlp = new PennTreebankLanguagePack();
GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory();
GrammaticalStructure gs = gsf.newGrammaticalStructure(parse);
Collection tdl = gs.typedDependenciesCollapsed();
List list = new ArrayList(tdl);


//for (int i=0;i<list.size();i++)
//System.out.println(list.get(1).toString());

//remove scops and numbers like sbj(screen-4,good-6)->screen good

 Pattern p = Pattern.compile(".*\\((.*?)\\-\\d+,(.*?)\\-\\d+\\).*");

       if (list.size()>2){
    // Split input with the pattern
        Matcher m = p.matcher(list.get(1).toString());
        //check if the result have more than  1 groups
       if (m.find()&& m.groupCount()>1){
           if (m.groupCount()>1)
           {
               System.out.println(list);
 return  m.group(1)+m.group(2);
    }}
}
        return "";

}

私が持っているエラーは次のとおりです。

blogsOpinions.ParserText.(ParserText.java:47) で blogsOpinions.ThreadPoolTest$1.run(ThreadPoolTest.java:50) で blogsOpinions.ThreadPool$PooledThread.run(ThreadPoolTest.java:196) で(X ...) ツリー。スレッド「PooledThread-21」の例外 java.lang.ClassCastException: java.lang.String は edu.stanford.nlp.ling.HasWord にキャストできません

edu.stanford.nlp.parser.lexparser.LexicalizedParser.apply(LexicalizedParser.java:289) で blogsOpinions.ParserText.test(ParserText.java:174) で blogsOpinions.ParserText.insertDb(ParserText.java:76) で blogsOpinions. ParserText.(ParserText.java:47) で blogsOpinions.ThreadPoolTest$1.run(ThreadPoolTest.java:50) で blogsOpinions.ThreadPool$PooledThread.run(ThreadPoolTest.java:196) で

画面が非常に優れているような件名の説明を取得するにはどうすればよいですか。取得したリストから画面を適切に取得したいのですが、好きではありませんlist.get(1)

4

2 に答える 2

4

of をLexicalizedParser.parse呼び出すことはできません。オブジェクトのリストが必要です。入力文字列でメソッドを呼び出す方がはるかに簡単です。これにより、入力に対して適切なトークナイザーも実行されます (単純なスペースではなく)。ListStringHasWordapplysplit

返された から主語などの関係を取得するには、そのメンバーTreeを呼び出します。dependencies

于 2011-01-22T18:01:24.537 に答える
1

うーん、同じスタック トレースを目撃しました。同じ JVM に LexicalizedParser の 2 つのインスタンスをロードしていたことが判明しました。これが問題のようでした。インスタンスが 1 つしか作成されていないことを確認すると、問題なく呼び出すことができましたlp.apply(Arrays.asList(sent))

于 2011-04-05T02:15:53.587 に答える