使用nlp从数据库中提取年龄相关信息

使用nlp从数据库中提取年龄相关信息,nlp,nltk,stanford-nlp,opennlp,Nlp,Nltk,Stanford Nlp,Opennlp,我是NLP新手,我一直试图从原始文本中提取与年龄相关的信息。我在谷歌上搜索了一下,没有找到任何可靠的语言库来满足这个要求。如果我能在这方面得到任何帮助,那就太好了。我对任何语言都持开放态度,这不是一种限制。它可以是Java、Python或任何其他语言。任何帮助都将不胜感激。提前谢谢。干杯 更新: 我尝试将Stanford help提到的注释器添加到我的java解析器中,但遇到以下异常: ERROR: cannot create CorefAnnotator! java.lang.

我是NLP新手,我一直试图从原始文本中提取与年龄相关的信息。我在谷歌上搜索了一下,没有找到任何可靠的语言库来满足这个要求。如果我能在这方面得到任何帮助,那就太好了。我对任何语言都持开放态度,这不是一种限制。它可以是Java、Python或任何其他语言。任何帮助都将不胜感激。提前谢谢。干杯

更新:

我尝试将Stanford help提到的注释器添加到我的java解析器中,但遇到以下异常:

    ERROR: cannot create CorefAnnotator!
    java.lang.RuntimeException: Error creating coreference system
    at 

 edu.stanford.nlp.scoref.StatisticalCorefSystem.fromProps(StatisticalCorefSystem.java:58)
    at edu.stanford.nlp.pipeline.CorefAnnotator.<init>(CorefAnnotator.java:66)
    at edu.stanford.nlp.pipeline.AnnotatorImplementations.coref(AnnotatorImplementations.java:220)
    at edu.stanford.nlp.pipeline.AnnotatorFactories$13.create(AnnotatorFactories.java:515)
    at edu.stanford.nlp.pipeline.AnnotatorPool.get(AnnotatorPool.java:85)
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.construct(StanfordCoreNLP.java:375)
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:139)
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:135)
    at com.dateparser.SUtime.SUAgeParser.makeNumericPipeline(SUAgeParser.java:85)
    at com.dateparser.SUtime.SUAgeParser.<clinit>(SUAgeParser.java:60)
Caused by: java.lang.RuntimeException: Error initializing coref system
    at edu.stanford.nlp.scoref.StatisticalCorefSystem.<init>(StatisticalCorefSystem.java:36)
    at edu.stanford.nlp.scoref.ClusteringCorefSystem.<init>(ClusteringCorefSystem.java:24)
    at edu.stanford.nlp.scoref.StatisticalCorefSystem.fromProps(StatisticalCorefSystem.java:48)
    ... 9 more
Caused by: java.io.IOException: Unable to open "edu/stanford/nlp/models/hcoref/md-model.ser" as class path, filename or URL
    at edu.stanford.nlp.io.IOUtils.getInputStreamFromURLOrClasspathOrFileSystem(IOUtils.java:485)
    at edu.stanford.nlp.io.IOUtils.readObjectFromURLOrClasspathOrFileSystem(IOUtils.java:323)
    at edu.stanford.nlp.hcoref.md.DependencyCorefMentionFinder.<init>(DependencyCorefMentionFinder.java:38)
    at edu.stanford.nlp.hcoref.CorefDocMaker.getMentionFinder(CorefDocMaker.java:149)
    at edu.stanford.nlp.hcoref.CorefDocMaker.<init>(CorefDocMaker.java:61)
    at edu.stanford.nlp.scoref.StatisticalCorefSystem.<init>(StatisticalCorefSystem.java:34)
    ... 11 more
错误:无法创建CoreFanMotor!
java.lang.RuntimeException:创建共同引用系统时出错
在
statisticalRefSystem.fromProps(statisticalRefSystem.java:58)
位于edu.stanford.nlp.pipeline.corefanotator.(corefanotator.java:66)
位于edu.stanford.nlp.pipeline.annotatorimplements.coref(annotatorimplements.java:220)
位于edu.stanford.nlp.pipeline.AnnotatorFactories$13.create(AnnotatorFactories.java:515)
位于edu.stanford.nlp.pipeline.AnnotatorPool.get(AnnotatorPool.java:85)
位于edu.stanford.nlp.pipeline.StanfordCoreNLP.construct(StanfordCoreNLP.java:375)
位于edu.stanford.nlp.pipeline.StanfordCoreNLP.(StanfordCoreNLP.java:139)
位于edu.stanford.nlp.pipeline.StanfordCoreNLP.(StanfordCoreNLP.java:135)
位于com.dateparser.SUtime.SUAgeParser.makeNumericPipeline(SUAgeParser.java:85)
位于com.dateparser.SUtime.SUAgeParser.(SUAgeParser.java:60)
原因:java.lang.RuntimeException:初始化coref系统时出错
在edu.stanford.nlp.scoref.statisticalRefSystem.(statisticalRefSystem.java:36)
在edu.stanford.nlp.scoref.ClusteringCorefSystem.(ClusteringCorefSystem.java:24)
在edu.stanford.nlp.scoref.statisticalRefSystem.fromProps(statisticalRefSystem.java:48)上
... 9更多
原因:java.io.IOException:无法将“edu/stanford/nlp/models/hcoref/md model.ser”作为类路径、文件名或URL打开
在edu.stanford.nlp.io.IOUtils.getInputStreamFromURLOrClasspathOrFileSystem(IOUtils.java:485)上
位于edu.stanford.nlp.io.IOUtils.readObjectFromURLOrClasspathOrFileSystem(IOUtils.java:323)
在edu.stanford.nlp.hcoref.md.DependencyCorefmentFinder。(DependencyCorefmentFinder.java:38)
在edu.stanford.nlp.hcoref.CorefDocMaker.getInetitionFinder(CorefDocMaker.java:149)
在edu.stanford.nlp.hcoref.CorefDocMaker.(CorefDocMaker.java:61)
在edu.stanford.nlp.scoref.statisticalRefSystem(statisticalRefSystem.java:34)上
... 还有11个
我升级到1.6.0版,还将stanford-corenlp-models-current.jar添加到类路径中。如果我遗漏了什么,请告诉我

更新1:

升级到3.9.1后,该异常已修复。但我得到的输出是按:持续时间关系,而不是按:年龄

private static AnnotationPipeline makePipeline() {

    Properties props = new Properties();
    props.setProperty("annotators",
             "tokenize,ssplit,pos,lemma,ner,depparse,coref,kbp");
    StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
    return pipeline;


}

public static void parse(String str) {
    try {
        Annotation doc = new Annotation(str);
        pipeline.annotate(doc);
        ArrayList<CoreMap> resultRelations = new ArrayList<CoreMap>();
        List<CoreMap> mentionsAnnotations = doc.get(MentionsAnnotation.class);
        for (CoreMap currentCoreMap : mentionsAnnotations) {
            System.out.println(currentCoreMap.get(TextAnnotation.class));
            System.out.println(currentCoreMap.get(CharacterOffsetBeginAnnotation.class));
            System.out.println(currentCoreMap.get(CharacterOffsetEndAnnotation.class));
            System.out.println(currentCoreMap.get(NamedEntityTagAnnotation.class));
        }
    } catch (Exception e) {

    }
}
private static AnnotationPipeline makePipeline(){
Properties props=新属性();
props.setProperty(“注释器”,
“标记化、ssplit、pos、引理、ner、depparse、coref、kbp”);
StanfordCoreNLP管道=新的StanfordCoreNLP(道具);
回流管道;
}
公共静态void解析(字符串str){
试一试{
注释文档=新注释(str);
管道注释(doc);
ArrayList resultRelations=新的ArrayList();
List-sinetsannotations=doc.get(sinetsannotation.class);
for(CoreMap currentCoreMap:ReferencesAnnotations){
System.out.println(currentCoreMap.get(TextAnnotation.class));
System.out.println(currentCoreMap.get(characterOffsetBeginAnotation.class));
System.out.println(currentCoreMap.get(CharacterOffsetEndAnnotation.class));
System.out.println(currentCoreMap.get(NamedEntityTagAnnotation.class));
}
}捕获(例外e){
}
}

这是正常行为还是我做错了什么?

您可能会发现KBP关系提取器很有用

示例文本:

Joe Smith is 58 years old.
命令:

java -Xmx12g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,depparse,coref,kbp -file example.txt -outputFormat text

这应该将
Joe Smith
per:age
关系附加到
58岁的

Hi@StanfordNLPHelp请查看我对postHi@StanfordNLPHelp的更新。谢谢升级到3.9.1解决了该问题。但是我得到的输出是person:duration关系,而不是person:age关系。这是正常的还是我做错了什么?请在最新版本中找到我的代码。您应该升级到3.9.1版