我试着生成所有可能的句子组合。作为变量,我有两个字符串,一个字符串将作为主题,例如health和一个对象,比如fruit,但是我将有一个与一个"head“单词相关联的值的List<String>,因此为了与刚才提到的两个组件保持一致,它们将与list [improve, change, alter, modify]相关联。我希望生成这些句子的所有可能组合,并将每个句子添加到List<Sentences>中,如下所示:
Sentence example_sentence = new Sentence(verb, object, subject);
sentences.add(example_sentence);现在,发生这种情况的更大的功能如下:
public Sentence dataPreprocessing(String raw_subject, String raw_object, String raw_verb, List<Sentence> sentences) throws IOException {
WordNet wordnet = new WordNet();
String verb = wordnet.getStem(raw_verb);
String object = wordnet.getStem(raw_object);
String subject = wordnet.getStem(raw_subject);
List<String> verb_hypernym_container = new ArrayList<>();
verb_hypernym_container = wordnet.getHypernyms(verb, POS.VERB);
//wordnet.getHypernyms(this.object, POS.NOUN);
//wordnet.getHypernyms(this.subject, POS.NOUN);
Sentence return_sentence = new Sentence( verb, object, subject );
return return_sentence;
}我如何才能最有效地实现生成所有可能的句子的目标?
发布于 2015-01-30 09:17:43
由于有固定数量的列表,最简单的方法是只使用嵌套循环:
List<Sentence> sentences = new ArrayList<>();
for(String verb_hypernym : wordnet.getHypernyms(verb, POS.VERB))
for(String object_hypernym : wordnet.getHypernyms(object, POS.NOUN))
for(String subject_hypernym : wordnet.getHypernyms(subject, POS.NOUN))
sentences.add(new Sentence(verb_hypernym, object_hypernym, subject_hypernym));
return sentences;或者,为了避免不必要的频繁调用getHypernyms:
List<String> verb_hypernyms = wordnet.getHypernyms(verb, POS.VERB);
List<String> object_hypernyms = wordnet.getHypernyms(object, POS.NOUN);
List<String> subject_hypernyms = wordnet.getHypernyms(subject, POS.NOUN);
for(String verb_hypernym : verb_hypernyms)
for(String object_hypernym : object_hypernyms)
for(String subject_hypernym : subject_hypernyms)
sentences.add(new Sentence(verb_hypernym, object_hypernym, subject_hypernym));
return sentences;发布于 2015-01-30 09:29:17
一旦你有了一个名词和动词的列表,你可以使用流返回一个句子列表。这也为您提供了一个机会,以删除任何重复,排序或任何您需要做的流。
List<Sentence> sentences = subjectList.stream()
.flatMap(object -> verbList.stream()
.flatMap(verb -> objectList.stream()
.map(subject -> new Sentence(object, verb, subject))))
.distinct()
.collect(Collectors.toList());https://stackoverflow.com/questions/28232488
复制相似问题