这是我使用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的原始排序......那会有什么影响吗?
感谢您的帮助!
答案 0 :(得分:3)
我认为澄清您的用例是什么以及为什么您认为需要保留订单非常重要。 Ngrams通常用于单词模型(无论如何不尊重顺序)和/或语言模型中,其中概率估计(例如基于ngram计数)在ngram级别计算并使用链式规则进行聚合。