我在大量文本上运行Stanford Parser。解析器在遇到无法解析的句子时终止,并给出以下运行时错误。有没有办法让Stanford Parser忽略错误,继续解析下一句话?
一种方法是将文本分解为无数的单句文档,并解析每个文档并记录输出。但是,这涉及多次加载斯坦福分析器(每次解析文档时,必须重新加载斯坦福分析器)。加载解析器需要花费大量时间,但解析时间要短得多。找到一种避免在每个句子上重新加载解析器的方法会很棒。
另一个解决方案可能是在遇到错误时重新加载解析器,然后拾取停止的文本并继续从那里解析。有谁知道实现这个解决方案的好方法?
最后但并非最不重要的是,是否存在任何忽略错误并保持Java程序运行直到程序自然终止的Java包装器?
谢谢!
Exception in thread "main" java.lang.RuntimeException: CANNOT EVEN CREATE ARRAYS OF ORIGINAL SIZE!!
at edu.stanford.nlp.parser.lexparser.ExhaustivePCFGParser.considerCreatingArrays(ExhaustivePCFGParser.java:2190)
at edu.stanford.nlp.parser.lexparser.ExhaustivePCFGParser.parse(ExhaustivePCFGParser.java:347)
at edu.stanford.nlp.parser.lexparser.LexicalizedParserQuery.parseInternal(LexicalizedParserQuery.java:258)
at edu.stanford.nlp.parser.lexparser.LexicalizedParserQuery.parse(LexicalizedParserQuery.java:536)
at edu.stanford.nlp.parser.lexparser.LexicalizedParserQuery.parseAndReport(LexicalizedParserQuery.java:585)
at edu.stanford.nlp.parser.lexparser.ParseFiles.parseFiles(ParseFiles.java:213)
at edu.stanford.nlp.parser.lexparser.ParseFiles.parseFiles(ParseFiles.java:73)
at edu.stanford.nlp.parser.lexparser.LexicalizedParser.main(LexicalizedParser.java:1535)
答案 0 :(得分:4)
此错误基本上是内存不足错误。这可能是因为有很长的文本没有句子终止标点符号(句号,问号),所以它一直在并且正在尝试解析它认为是单个句子的大量单词。
解析器通常会在解析失败后尝试继续,但在这种情况下无法解决,因为它无法创建用于解析较长句子的数据结构,然后无法重新创建先前使用的数据结构。所以,你需要做点什么。
选择是:
-writeOutputFiles
选项)。-sentences newline
或{ {1}}。-parseInside ELEMENT
。答案 1 :(得分:0)
Parser已知很慢。您可以尝试使用浅解析器,这将比完整版本更快。如果您只需要POS标签,那么请考虑使用tagger。创建一个静态的解析器实例,并反复使用它,然后重新加载。 <> Q-24