2

我正在使用 simpleNLG 来查找动词的实际时态。但是我似乎做错了,而不是给出动词的时态,而是将其转换为现在时:/

public class TenseWas
{
    public static void main(String[] args)
    {
        String word = "ate";
        Lexicon lexicon=Lexicon.getDefaultLexicon();
        NLGFactory nlgFactory=new NLGFactory(lexicon);
        Realiser realiser=new Realiser(lexicon);
        SPhraseSpec p=nlgFactory.createClause();
        p.setVerb(word);
        if(p.getVerb().getFeature(Feature.TENSE) == (Tense.PAST))
        {
            System.out.println("past");
        }
        if(p.getVerb().getFeature(Feature.TENSE) == (Tense.FUTURE))
        {
            System.out.println("future");
        }
        if(p.getVerb().getFeature(Feature.TENSE) == (Tense.PRESENT))
        {
            System.out.println("Present");
        }
        String output=realiser.realiseSentence(p);
        System.out.println(output);
    }
}

这是控制台中显示的内容:

吃。

4

2 回答 2

1

调用getFeature()不会告诉您您设置的动词是什么时态,它会回显您为渲染从句而设置的从句的时态。你像这样使用它:

p.setSubject("Foo");
p.setVerb("eat");
p.setObject("bar");
p.setFeature(Feature.TENSE, Tense.PAST); 
String output = realiser.realiseSentence(p);
System.out.println(output); // "Foo ate bar"
于 2017-03-25T16:49:24.217 回答
1

为未来的程序员回答这个问题。

正如@Bohemian 指出的那样, simplenlg 不用于对动词的动词时态进行分类,它是一个实现引擎,用于将“句子”的抽象表示转换为实际句子。

如果您查看 simplenlg 使用的 lexicon xml“数据库”库,它包含动词和名词的注释版本等。它位于https://github.com/simplenlg/simplenlg/blob/master/src/main/resources /default-lexicon.xml。仅供参考,您可以使用其他词典 xml 数据库。

<word>
    <base>sleep</base>
    <category>verb</category>
    <id>E0056246</id>
    <present3s>sleeps</present3s>
    <intransitive/>
    <past>slept</past>
    <pastParticiple>slept</pastParticiple>
    <presentParticiple>sleeping</presentParticiple>
    <transitive/>
</word>

所以要回答你的问题,你不应该使用 simplenlg 来获取动词的时态,而是使用其他 NLP/'smarter' 库来进行'动词'或单词分类,例如 CoreNLP 或 OpenNLP 中的词性标注器,这里是信息在他们身上,OpenNLP 与斯坦福 CoreNLP

于 2017-03-28T17:31:59.717 回答