我正在注释和分析一系列文本文件。
pipeline.annotate方法每次读取文件时都会变得越来越慢。最终,我得到了一个OutOfMemoryError。
管道初始化一次:
protected void initializeNlp()
{
Log.getLogger().debug("Starting Stanford NLP");
// creates a StanfordCoreNLP object, with POS tagging, lemmatization,
// NER, parsing, and
Properties props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma, ner, regexner, depparse, natlog, openie");
props.put("regexner.mapping", namedEntityPropertiesPath);
pipeline = new StanfordCoreNLP(props);
Log.getLogger().debug("\n\n\nStarted Stanford NLP Successfully\n\n\n");
}
然后,我使用相同的管道实例处理每个文件(如SO和斯坦福大学在其他地方推荐的)。
public void processFile(Path file)
{
try
{
Instant start = Instant.now();
Annotation document = new Annotation(cleanString);
Log.getLogger().info("ANNOTATE");
pipeline.annotate(document);
Long millis= Duration.between(start, Instant.now()).toMillis();
Log.getLogger().info("Annotation Duration in millis: "+millis);
AnalyzedFile af = AnalyzedFileFactory.getAnalyzedFile(AnalyzedFileFactory.GENERIC_JOB_POST, file);
processSentences(af, document);
Log.getLogger().info("\n\n\nFile Processing Complete\n\n\n\n\n");
Long millis1= Duration.between(start, Instant.now()).toMillis();
Log.getLogger().info("Total Duration in millis: "+millis1);
allFiles.put(file.toUri().toString(), af);
}
catch (Exception e)
{
Log.getLogger().debug(e.getMessage(), e);
}
}
明确地说,我希望问题出在我的配置上。但是,我确信失速和内存问题发生在pipeline.annotate(file)方法上。
在处理每个文件后,我会处理除管道(例如CoreLabel)之外的所有对斯坦福NLP对象的引用。也就是说,在我的代码中,除了方法级别之外,我不保留对任何斯坦福对象的引用。
任何提示或指导都将不胜感激
好的,问题的最后一句话让我仔细检查了一下。答案是我在自己的一门课上一直引用CoreMap。换句话说,我在记忆中保留了语料库中每个句子的所有树、标记和其他分析。
简言之,将StanfordNLP CoreMaps保留一定数量的句子,然后进行处置。
(我想一个核心计算语言学家会说,一旦分析了CoreMap,就很少需要保留它,但我必须在这里声明我的新手身份)
我在使用Stanford pipeline(CoreNLP的最后一个版本)解析BNC时遇到了一个问题。 解析器只是停留在这个句子中,它甚至不会抛出错误。句子在web界面中得到正确的解析。 我尝试了标记器的选项,但没有结果。 我添加了我正在使用的命令行:java[...]edu.stanford.nlp.pipeline.stanfordCorenlp-注释器tokenize,ssplit,pos,
我假设我试图将输出转换成的格式是旧版本的CorenLP的默认输出。有什么方法可以得到所需格式的输出吗?
试图运行示例,但我一直无法打开“english-left3words-distsim.tagger”文件可能丢失。文件没有丢失,目录指向模型jar文件的位置,路径:edu\stanford\nlp\模型\pos-tagger\english-left3word在jar文件中是正确的。 我使用3.7.0,安装从nuget在视觉工作室2015. 代码如下: 我确实在Stack上看到了一个类似的问题,他
这是意料之中的行为吗?我在前面运行完整的管道吗?
我使用StanfordNLP来标记用智能手机编写的一组消息。这些文本有很多拼写错误,不遵守标点符号规则。通常,空格缺失会影响标记化。 例如,以下句子漏掉了“California.This”和“university,founded”中的空格。 斯坦福大学位于加利福尼亚州,这所大学是一所伟大的大学,创建于1891年。 标记器返回: {“斯坦福”、“大学”、“是”、“位于”、“加利福尼亚州”。这个”、“
我对这两个软件包做了一些比较,不确定应该朝哪个方向发展。我想简要介绍的是: 命名实体识别(人员、地点、组织等) 据我所知,OpenNLP和Stanford CoreNLP公开了非常相似的功能。然而,斯坦福大学的CoreNLP看起来有更多的活动,而OpenNLP在过去六个月里只有几次提交。 根据我所看到的,OpenNLP似乎更容易训练新的模型,仅仅因为这个原因可能更具吸引力。然而,我的问题是,其他人