[英]Mute Stanford coreNLP logging
首先,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
来设置其他包的属性)。
Om 的回答很好,但还有另外两种可能有用的方法:
props.setProperty("tokenize.options", "untokenizable=NoneKeep");
.如果我理解你的问题,你想在程序执行时禁用所有 StanfordNLP 日志消息。
您可以禁用日志消息。 Redwood
日志框架在斯坦福 NLP 中用作日志框架。 首先,清除Redwood
的默认配置(以显示日志消息),然后创建 StanfordNLP 管道。
import edu.stanford.nlp.util.logging.RedwoodConfiguration;
RedwoodConfiguration.current().clear().apply();
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
希望能帮助到你。
按照克里斯托弗曼宁的建议,我按照这个链接如何配置slf4j-simple
我用org.slf4j.simpleLogger.defaultLogLevel=warn
行创建了一个文件src/simplelogger.properties
。
我可以通过将空白输出流设置为系统错误流来解决它。
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
}
}
Om 的回答禁用了所有日志记录。 但是,如果您仍希望记录错误,请使用:
RedwoodConfiguration.errorLevel().apply();
我还使用 jdk 日志记录而不是 slf4j 日志记录来避免加载 slfj 依赖项,如下所示:
RedwoodConfiguration.javaUtilLogging().apply();
这两个选项可以以任何顺序一起使用。 所需的导入是:
import edu.stanford.nlp.util.logging.RedwoodConfiguration;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.