SimpleNLG - 使用“占位符”创建2部分句子

时间:2014-08-18 22:00:05

标签: nlp text-analysis

有没有人知道如何(使用SimpleNLG)创建一个合适的"两部分"像这样的句子(我不是语言学家,所以我不确定每个单词/短语的句法类别:

  

"我购买了一个新的小工具引擎,它创建了产品A,产品B和产品C 。"

粗体文本将在运行时由语法分析器或其他东西动态插入。我浏览了SimpleNLG教程(似乎没有更深入的其他内容),随后尝试将一个PPPhraseSpec对象(代表上面句子的第二部分)附加到SPhraseSpec(它有一个名词短语和verbphrase),但结果是不可理解的,在语法上是不正确的。

1 个答案:

答案 0 :(得分:3)

以下是您的问题的解决方案:粗体的第一部分是语法对象(名词短语),粗体的第二部分是动词的对象"创建" (坐标条款)。

import simplenlg.realiser.english.Realiser;
import simplenlg.lexicon.Lexicon;
import simplenlg.phrasespec.*;
import simplenlg.framework.*;
import simplenlg.features.*;


public class Test {

    // Target:
    // I bought a new widget engine, 
    //   which created product A, product B, and product C.

    public static void main(String[] args) {
        System.out.println("Starting...");
        Lexicon lexicon = Lexicon.getDefaultLexicon();
        NLGFactory nlgFactory = new NLGFactory(lexicon);
        Realiser realiser = new Realiser(lexicon);

        SPhraseSpec s1 = nlgFactory.createClause("I",
            "bought", "a new widget engine");
        s1.setFeature(Feature.TENSE, Tense.PAST);

        SPhraseSpec s2 = nlgFactory.createClause("", "created");
        NPPhraseSpec object1 = nlgFactory.createNounPhrase("product A");
        NPPhraseSpec object2 = nlgFactory.createNounPhrase("product B");
        NPPhraseSpec object3 = nlgFactory.createNounPhrase("product C");

        CoordinatedPhraseElement cc = nlgFactory.createCoordinatedPhrase();
        cc.addCoordinate(object1);
        cc.addCoordinate(object2);
        cc.addCoordinate(object3);

        s2.setObject(cc);
        s2.setFeature(Feature.TENSE, Tense.PAST);

        s2.setFeature(Feature.COMPLEMENTISER, ", which"); // non-restrictive?
        s1.addComplement(s2);

        String output = realiser.realiseSentence(s1);
        System.out.println(output);
    }

}

我不是以英语为母语的人,而且经常会把这部分弄错,但我认为你想要一个限制性的相对条款而不是非限制条款:"我买了一个新的小工具引擎创建了......& #34;而不是"我买了一个新的小部件引擎,它创建了......"如果是这种情况,只需注释设置补充器的行。