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)
。