获取动词时态 java

Get tense of verb java

我正在使用 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);
    }
}

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

吃。

调用 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"

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

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

如果您查看 simplenlg 使用的词典 xml 'database' 库,它包含动词和名词等的注释版本。它在 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' 库来做 'verb' 或单词分类,例如 Parts of CoreNLP 或 OpenNLP 中的 Speech Tagger,这是关于它们的信息,