Minipar在看到Ö,Ü,Ä等非常见的角色时会抛出异常。
例如在中,“Batten disease(也称为Spielmeyer-Vogt-Sjögren-Batten病)是一种罕见的,致命的常染色体隐性遗传性神经退行性疾病,始于儿童时期。” (来自维基文章) Minipar在停止工作之前得到的注释是“Batten disease(也称为Spielmeyer-Vogt-Sj”,正好在角色ö之前,所以这让我猜测这是一个值得关注的案例。使用Gate。因为同一个管道像微风一样处理了其他几篇文章。
在“消息”选项卡中,它重新打印:
gate.util.InvalidOffsetException
at gate.annotation.AnnotationSetImpl.getNodes(AnnotationSetImpl.java:773)
at gate.annotation.AnnotationSetImpl.add(AnnotationSetImpl.java:802)
at minipar.Minipar.runMinipar(Minipar.java:419)
at minipar.Minipar.execute(Minipar.java:527)
at gate.util.Benchmark.executeWithBenchmarking(Benchmark.java:291)
at gate.creole.ConditionalSerialController.runComponent(ConditionalSerialController.java:154)
at gate.creole.SerialController.executeImpl(SerialController.java:153)
at gate.creole.ConditionalSerialAnalyserController.executeImpl(ConditionalSerialAnalyserController.java:129)
at gate.creole.AbstractController.execute(AbstractController.java:75)
at gate.util.Benchmark.executeWithBenchmarking(Benchmark.java:291)
at gate.gui.SerialControllerEditor$RunAction$1.run(SerialControllerEditor.java:1619)
at java.lang.Thread.run(Unknown Source)
gate.creole.ExecutionException: gate.util.InvalidOffsetException
at minipar.Minipar.runMinipar(Minipar.java:491)
at minipar.Minipar.execute(Minipar.java:527)
at gate.util.Benchmark.executeWithBenchmarking(Benchmark.java:291)
at gate.creole.ConditionalSerialController.runComponent(ConditionalSerialController.java:154)
at gate.creole.SerialController.executeImpl(SerialController.java:153)
at gate.creole.ConditionalSerialAnalyserController.executeImpl(ConditionalSerialAnalyserController.java:129)
at gate.creole.AbstractController.execute(AbstractController.java:75)
at gate.util.Benchmark.executeWithBenchmarking(Benchmark.java:291)
at gate.gui.SerialControllerEditor$RunAction$1.run(SerialControllerEditor.java:1619)
at java.lang.Thread.run(Unknown Source)
Caused by: gate.util.InvalidOffsetException
at gate.annotation.AnnotationSetImpl.getNodes(AnnotationSetImpl.java:773)
at gate.annotation.AnnotationSetImpl.add(AnnotationSetImpl.java:802)
at minipar.Minipar.runMinipar(Minipar.java:419)
... 9 more
gate.creole.ExecutionException: Document doesn't have sentence annotations. please run tokenizer, sentence splitter and then Minipar
at minipar.Minipar.saveGateSentences(Minipar.java:194)
at minipar.Minipar.execute(Minipar.java:525)
at gate.util.Benchmark.executeWithBenchmarking(Benchmark.java:291)
at gate.creole.ConditionalSerialController.runComponent(ConditionalSerialController.java:154)
at gate.creole.SerialController.executeImpl(SerialController.java:153)
at gate.creole.ConditionalSerialAnalyserController.executeImpl(ConditionalSerialAnalyserController.java:129)
at gate.creole.AbstractController.execute(AbstractController.java:75)
at gate.util.Benchmark.executeWithBenchmarking(Benchmark.java:291)
at gate.gui.SerialControllerEditor$RunAction$1.run(SerialControllerEditor.java:1619)
at java.lang.Thread.run(Unknown Source)
我要再次感谢伊恩的热情支持。
马特
答案 0 :(得分:0)
这似乎是某种编码相关的问题,但不幸的是我无法自己进行任何调试,因为usual download page似乎不再提供minipar解析器二进制文件 - 我得到一个小的(小于2kB)灰度JPEG图像而不是多MB .tgz。
有一些事情你可以试试我的头脑。 GATE Minipar包装器为解析器写入输入文件,并使用您正在运行的系统上的默认编码读取解析器的输出。我的猜测是解析器以不同的编码产生输出(可能与原始训练数据的编码有关?)。
GATE包装器将其输入写入临时文件,只要您让GATE Developer在后台运行(临时文件在Developer退出时删除),您应该能够在临时目录中找到该文件。我会尝试从命令行在该文件上运行minipar-windows.exe,看看输出是什么样的
C:\path\to\minipar-windows.exe -p C:\path\to\minipar\data -file GATESentencesNNNNNN.txt
输出可能会为您提供有关失败的线索。如果它看起来正确并且您可以确定它尝试使用的编码,您可以将GATE Developer设置为使用它作为其默认编码(如果您使用gate.exe
启动它,那么您可以通过添加一行来执行此操作{ {1}}或-Dfile.encoding=ISO-8859-1
的任何内容),看看是否有帮助。如果是这样,我们可以考虑向PR添加一个参数,以指定在与解析器可执行文件交换数据时使用的编码。