当前位置:   article > 正文

斯坦福自然语言处理(1)——三元组的使用_stanfordcorenlp抽取sao三元组

stanfordcorenlp抽取sao三元组

三元组是斯坦福自然语言解析中比较基础的一部分,主要过程是将每一个句子从文中提取出来以后,将句子中符合三元组(subject+relation+object)的成分提取出来,其中每个triple中有四个成员变量:
1、confidence:表示该三元组符合subject+relation+object程度的置信度
2、subject:三元组中的主体,表示动作的发出者
3、relation:三元组中表示subject和object的联系
4、object:三元组中表示relation动作的承受者

首先对工具入口StanfordCoreNLP进行实例化pipeline,并在管道中添加分析三元组所需要的功能,用Property类来实现。我这里定义了一个TripleBean类,每个三元组类中含有TripleSubject、TripleRelation、以及TripleObject、其中每个类中都包含该单词的词性、命名实体,以一个TripleElement作为例子

package edu.stu.common;

public class TripleElement {
private String element;
private String nameentity;
private String partofspeech;

public TripleElement(String element ,String nameentity ,String partofspeech)\\实例化一个TripleElement对象
{
    this.element = element;
    this.nameentity = nameentity;
    this.partofspeech = partofspeech;
}

public  String getElement()\\元素的单词本身
{
    return this.element;
}

public String getPartOfSpeech()\\元素的词性
{
    return this.partofspeech;
}
public String getNameEntity()\\元素的命名实体识别
{
    return this.nameentity;
}

public String toString()\\输出该对象时,输出对象中的单词
{
    return this.getElement();
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

`

“`

package edu.stanford.nlp.pipeline.tool;

public class Triple
{
    private StanfordCoreNLP pipeline = null;    
    private String content = null;
    private Annotation doc = null;  
    private Collection<RelationTriple> triples = null;
    private Collection<TripleBean> triplebeans = null;

    public Triple(File filename)
    {
        Properties props = new Properties();
        props.put("annotators", "tokenize, ssplit, pos, lemma, ner, depparse, natlog, openie"); 

        triplebeans = new ArrayList();

        this.pipeline = new StanfordCoreNLP(props);  
        this.content = new ReadFile(filename).getContent();
        this.doc = new Annotation(this.content);                                 // 用字符串初始化一个annotation类型
        pipeline.annotate(doc);
    }

    public Triple(String content)
    {
        Properties props = new Properties();         //props是一个类似map的结构
        props.put("annotators", "tokenize, ssplit, pos, lemma, ner, depparse, natlog, openie"); 

        triplebeans = new ArrayList();

        this.pipeline = new StanfordCoreNLP(props);  
        this.content = content;
        this.doc = new Annotation(this.content);                                 // 用字符串初始化一个annotation类型
        pipeline.annotate(doc);
        convertToTripleBean();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号