下面的SimpleNLG代码分别使用“猴子”,“吃”,“香蕉”指定主语,动词和宾语,从而产生句子“猴子吃香蕉”。因此,您看到它将复数名词转换为单数名词(并确保动词相应地一致)。有没有办法确保SimpleNLG检测到它们是复数并将其保持原样?我已经看到文档提到某些Lexicon文件可以做到这一点,但是我尝试使用NIH Lexicon却无济于事。 SimpleNLG根本不支持此功能吗?还是有办法使用SimpleNLG或其他方式做到这一点?

    Lexicon = new Lexicon.getDefaultLexicon()
    nlgFactory = new NLGFactory(lexicon);
    Realiser realiser = new Realiser(lexicon);

    NPPhraseSpec subject = nlgFactory.createNounPhrase("monkeys");
    VPPhraseSpec verb = nlgFactory.createVerbPhrase("eat");
    NPPhraseSpec object = nlgFactory.createNounPhrase("bananas");

    SPhraseSpec clause  = nlgFactory.createClause();
    clause.setSubject(subject);
    clause.setVerbPhrase(verb);
    clause.setObject(object);

    System.out.print(realiser.realiseSentence(clause));

最佳答案

通过SimpleNLG的最新更改,您可以选择名词短语,然后手动将其指定为复数形式。您可以通过使用setFeature方法来做到这一点:

subject.setFeature(Feature.NUMBER,NumberAgreement.PLURAL);

其中,单数/复数/两者(单数和复数都相同)的枚举中的NumberAgreement值。

但是,我只是检查了一下,输出:

猴子吃香蕉。

仅当我们将主题设为“猴子”而不是“猴子”时才会生成,在这种情况下,o / p变为“猴子吃香蕉”。

如前所述,SimpleNLG在简单的“主语-动词-宾语”形态之外的形式,方式等方面并未使用太多智能。

关于java - SimpleNLG-SimpleNLG是否可以自动检测名词是单数还是复数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40921818/

10-10 06:13