首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >斯坦福分析器问题

斯坦福分析器问题
EN

Stack Overflow用户
提问于 2011-01-22 16:31:11
回答 2查看 2.6K关注 0票数 0

我正在编写一个与NLP (自然语言解析器)一起工作的项目。我在使用斯坦福解析器。

我创建了一个线程池,它接受句子并与它们一起运行解析器。当我创建一个线程时,它可以正常工作,但是当我创建更多线程时,就会出现错误。“测试”过程是查找有关联的单词。如果我做了一个同步的,它应该像一个线程一样工作,但仍然会出现错误。我的问题是,我在这段代码上有错误:

代码语言:javascript
复制
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.ThreadPoolTest$1.run(ThreadPoolTest.java:50) at blogsOpinions.ThreadPool$PooledThread.run(ThreadPoolTest.java:196)的

at blogsOpinions.ParserText.(ParserText.java:47)使用下降策略恢复:将构造一个(X .)树。线程"PooledThread-21“java.lang.ClassCastException中的异常:不能将java.lang.String转换为edu.stanford.nlp.ling.HasWord

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

我怎样才能得到主题的描述,比如屏幕是非常好的,我想从列表中获得好的屏幕--I get而不是list.get(1)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-22 18:01:24

不能在List of Strings上调用HasWord;它需要HasWord对象的列表。在输入字符串上调用apply方法要容易得多。这还将在输入上运行一个正确的标记器(而不是在空格上运行简单的split )。

要从返回的Tree中获取诸如主观性之类的关系,请调用其dependencies成员。

票数 4
EN

Stack Overflow用户

发布于 2011-04-05 02:15:53

嗯,我看到了同样的堆栈痕迹。结果,我在同一个JVM中加载了两个LexicalizedParser实例。这似乎就是问题所在。当我确保只创建一个实例时,我就能够很好地调用lp.apply(Arrays.asList(sent))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4769040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档