openNLP NGramModel不保留单词的原始顺序?

问题描述 投票:0回答:1

这是我使用openNLP的简单代码:

public static void main(String[] args) {

    String text = "This is the original sequence in the text";
    System.out.println(text);

    StringList tokens = new StringList(WhitespaceTokenizer.INSTANCE.tokenize(text));
    System.out.println("Tokens: " + tokens);

    NGramModel nGramModel = new NGramModel();
    nGramModel.add(tokens, 2, 2);

    System.out.println("Total ngrams: " + nGramModel.numberOfGrams());
    for (StringList ngram : nGramModel) {
        System.out.println(nGramModel.getCount(ngram) + " - " + ngram);
    }

}

它给出了以下输出:

 This is the original sequence in the text
 Tokens: [This,is,the,original,sequence,in,the,text]
 Total ngrams: 7
 1 - [the,text]
 1 - [the,original]
 1 - [is,the]
 1 - [sequence,in]
 1 - [This,is]
 1 - [original,sequence]
 1 - [in,the] 

所以它不保留句子中单词的原始顺序?我怎样才能将[This,is]作为第一个n-gram,然后将[is,the]作为第二个ngram,......等等呢?如果我们失去了这个n-gram的原始排序......会有什么损害吗?

谢谢您的帮助!

opennlp
1个回答
3
投票

我认为澄清您的用例是什么以及您认为需要保留订单的原因非常重要。 Ngrams通常用于单词模型包(无论如何不尊重顺序)和/或语言模型中,其中概率估计(例如,基于ngram计数)在ngram级别计算并使用链规则聚合。

© www.soinside.com 2019 - 2024. All rights reserved.