静音斯坦福coreNLP日志记录

时间:2017-01-20 10:15:08

标签: java logging slf4j stanford-nlp

首先,Java不是我惯用的语言,所以我对此非常基础。我需要将它用于这个特定的项目,所以请耐心等待,如果我遗漏了任何相关信息,请提出要求,我很乐意提供。

我已经能够实现coreNLP,并且,似乎已经正常工作,但是产生了许多消息,如:

ene 20, 2017 10:38:42 AM edu.stanford.nlp.process.PTBLexer next
ADVERTENCIA: Untokenizable: 【 (U+3010, decimal: 12304)

经过一些研究(文档,谷歌,其他线程),我(对不起,我不知道我怎么说可以肯定)coreNLP找到slf4j-api.jar in我的类路径,并通过它进行记录。

我可以使用JVM的哪些属性来设置将要打印的消息的日志记录级别?

另外,我可以在哪个.properties文件中设置它们? (我的项目资源文件夹中已经有commons-logging.propertiessimplelog.propertiesStanfordCoreNLP.properties来设置其他软件包的属性。)

5 个答案:

答案 0 :(得分:1)

如果我了解您的问题,您希望在程序执行时禁用所有StanfordNLP日志消息。

您可以禁用日志消息。 Redwood日志框架用作斯坦福NLP中的日志框架。首先,清除Redwood的默认配置(显示日志消息),然后创建StanfordNLP管道。

import edu.stanford.nlp.util.logging.RedwoodConfiguration;
RedwoodConfiguration.current().clear().apply();
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

希望它有所帮助。

答案 1 :(得分:1)

Om的答案很好,但另外两种可能有用的方法:

  • 如果只是来自令牌器的这些警告令你烦恼,你可以(在代码中或在StanfordCoreNLP.properties中)设置一个属性,使它们消失:props.setProperty("tokenize.options", "untokenizable=NoneKeep");
  • 如果slf4j在类路径上,那么,默认情况下,我们自己的Redwoods记录器确实会记录slf4j。因此,您还可以使用slf4j设置日志记录级别。

答案 2 :(得分:0)

根据克里斯托弗曼宁的建议,我按照这个链接 How to configure slf4j-simple

我使用行src/simplelogger.properties创建了一个文件org.slf4j.simpleLogger.defaultLogLevel=warn

答案 3 :(得分:0)

我可以通过将空白输出流设置为系统错误流来解决此问题。

System.setErr(new PrintStream(new BlankOutputStream())); // set blank error stream
// ... Add annotators ...
System.setErr(System.err); // Reset to default

陪同班是

public class BlankOutputStream extends OutputStream {

    @Override
    public void write(int b) throws IOException {
        // Do nothing
    }

}

答案 4 :(得分:0)

Om的答案将禁用所有日志记录。但是,如果您仍然希望记录错误,请使用:

RedwoodConfiguration.errorLevel().apply();

我还使用jdk日志记录而不是slf4j日志记录,以避免加载slfj依赖项,如下所示:

RedwoodConfiguration.javaUtilLogging().apply();

这两个选项可以一起使用,并且可以任何顺序使用。所需的导入是:

import edu.stanford.nlp.util.logging.RedwoodConfiguration;