【问题标题】:Mute Stanford coreNLP logging静音斯坦福 coreNLP 日志记录
【发布时间】:2017-06-05 07:00:13
【问题描述】:

首先,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 ,并通过它登录。

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

另外,我可以在哪个.properties 文件中设置它们? (我的项目资源文件夹中已经有一个commons-logging.properties、一个simplelog.properties 和一个StanfordCoreNLP.properties,用于设置其他包的属性。

【问题讨论】:

    标签: java logging slf4j stanford-nlp


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      希望对你有帮助。

      【讨论】:

        【解决方案3】:

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

        我创建了一个文件src/simplelogger.properties,其中包含org.slf4j.simpleLogger.defaultLogLevel=warn 行。

        【讨论】:

          【解决方案4】:

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

          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
              }
          
          }
          

          【讨论】:

            【解决方案5】:

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

            RedwoodConfiguration.errorLevel().apply();
            

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

            RedwoodConfiguration.javaUtilLogging().apply();
            

            这两个选项可以按任意顺序一起使用。所需的导入是:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-03-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多