0

在学习 Gate 的过程中,遇到了如下问题:

Minipar 在看到 Ö、Ü、Ä 等非注释字符时抛出异常。

例如,在句子“Batten 病(也称为 Spielmeyer-Vogt-Sjögren-Batten 病)是一种罕见的、致命的常染色体隐性遗传神经退行性疾病,始于儿童期。” (来自 wiki 文章) 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)

我要再次感谢 Ian 的热情支持。

马特

4

1 回答 1

0

这似乎是某种与编码相关的问题,但不幸的是,我自己无法进行任何调试,因为 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 开发人员设置为将其用作其默认编码(如果您使用gate.exe它来启动它,那么您可以通过添加一行-Dfile.encoding=ISO-8859-1或其他内容来执行此操作gate.l4j.ini)并查看如果这有帮助。如果是这样,我们可以考虑在 PR 中添加一个参数来指定与解析器可执行文件交换数据时要使用的编码。

于 2013-03-28T12:22:13.680 回答