Java、Stanford NLP : Unable to validate jar entry per:countries_of_residence. 仅在 Windows 上规则

标签 java windows parsing stanford-nlp

我正在努力将Stanford NLP 3.7.0集成到我们的系统上,我们在Linux系统上没有问题,但Windows开发机器面临问题。我已经在类路径中添加了斯坦福解析器及其Javadoc,并且模型是maven的一部分。这是我们启动项目时遇到的错误:

错误日志:

java.lang.IllegalArgumentException: Unable to validate JAR entry with name edu/stanford/nlp/models/kbp/tokensregex/per:countries_of_residence.rules

                at org.apache.catalina.loader.WebappClassLoaderBase.findResourceInternal(WebappClassLoaderBase.java:3359)

                at org.apache.catalina.loader.WebappClassLoaderBase.findResource(WebappClassLoaderBase.java:1424)

                at org.apache.catalina.loader.WebappClassLoaderBase.getResourceAsStream(WebappClassLoaderBase.java:1652)

                at edu.stanford.nlp.io.IOUtils.findStreamInClasspathOrFileSystem(IOUtils.java:407)

                at edu.stanford.nlp.io.IOUtils.getInputStreamFromURLOrClasspathOrFileSystem(IOUtils.java:461)

                at edu.stanford.nlp.io.IOUtils.readStreamFromString(IOUtils.java:390)

                at edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserFromSerializedFile(LexicalizedParser.java:601)

                at edu.stanford.nlp.parser.lexparser.LexicalizedParser.getParserFromFile(LexicalizedParser.java:405)

                at edu.stanford.nlp.parser.lexparser.LexicalizedParser.loadModel(LexicalizedParser.java:187)

                at edu.stanford.nlp.parser.lexparser.LexicalizedParser.loadModel(LexicalizedParser.java:166)

                at com.tooltank.spring.service.GroupCanvasServiceImpl.<init>(GroupCanvasServiceImpl.java:56)

                at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

                at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

                at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

                at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
Caused by: java.io.IOException: Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch

                at java.io.WinNTFileSystem.canonicalize0(Native Method)

                at java.io.WinNTFileSystem.canonicalize(WinNTFileSystem.java:428)

                at java.io.File.getCanonicalPath(File.java:618)

                at org.apache.catalina.loader.WebappClassLoaderBase.findResourceInternal(WebappClassLoaderBase.java:3352)

POM.xml:

<dependency>
            <groupId>edu.stanford.nlp</groupId>
            <artifactId>stanford-parser</artifactId>
            <version>3.7.0</version>
        </dependency>


     <dependency>
            <groupId>edu.stanford.nlp</groupId>
            <artifactId>stanford-corenlp</artifactId>
            <version>3.7.0</version>
        </dependency>
        <dependency>
            <groupId>edu.stanford.nlp</groupId>
            <artifactId>stanford-corenlp</artifactId>
            <version>3.7.0</version>
            <classifier>models</classifier>
        </dependency>

有什么想法吗?谢谢。

解决方案

<dependency>
            <groupId>edu.stanford.nlp</groupId>
            <artifactId>stanford-corenlp</artifactId>
            <version>3.7.0</version>
            <classifier>models</classifier>
            <exclusions>
                <exclusion>
                    <groupId>edu.stanford.nlp</groupId>
                    <artifactId>stanford-corenlp-3.7.0-models-kbp</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

最佳答案

存在一个已知问题,即某些 KBP 关系提取器资源的文件名在 Windows 上不起作用。它们是用“:”制作的,这在 Windows 上很糟糕。我们将在某个时候将它们更改为对 Windows 更友好的内容。如果您不在 Windows 上使用 KBP 注释器,我认为这个问题就会消失,您可能还需要排除 stanford-corenlp-3.7.0-models-kbp.jar。

关于Java、Stanford NLP : Unable to validate jar entry per:countries_of_residence. 仅在 Windows 上规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42411659/

相关文章:

java - 实现死锁条件

java - 是否有任何选项可以将 R 与 NetSuite 连接以定期向 NetSuite 用户提供分析结果?

c++ - 如何正确启动进程并转发 stdin/stdout/stderr?

c# - 解析 DateTime 格式以获取 Format String

c++ - LL(*) 解析器(如antlr3)可以解析C++吗?

java - 将当前时区设置为@JsonFormat 时区值

java - 长范围值的查找

c# - 在 Windows 资源管理器中显示自定义标题或列

c++ - 如何更改 Shell_NotifyIcon 设置的系统托盘图标文本样式

python - 解析PDF文档