我在两份文件中有几个相互比较的句子。我使用公式相似性来比较它们,我使用List<List<>>
从文档中获取元素句子。但它仅适用于2个文档,如果我将其比较超过3个,则不起作用,例如我比较5个或更多文档。
问题是我如何在几个文件中得到很多句子来比较它们。
这是我的代码。
List<List<Sentence>> collect = Arrays.asList(new File(p).listFiles()).stream()
.map((x) -> configSentenceByLine(x.getAbsolutePath()))
.map((x) -> tokenizingWord(x))
.map((x) -> stemmingWord(x))
.map((x) -> countWordBased(x))
.collect(Collectors.toList());
for (int i = 0; i < collect.get(0).size(); i++) {
int mr = 1;
for (int j = 0; j < collect.get(1).size(); j++) {
double sim = nc.getSimilarity(collect.get(0).get(i).getSentence(), collect.get(0+1).get(j+1).getSentence());
System.out.println("Similarity = " + sim);
mr++;
}
}
抱歉我的英文不好
答案 0 :(得分:0)
我想你需要计算所有N个文档之间所有行的相似度。如果是这样,您必须比较每一对可能的文档。文档对的总数是 n 文档的组合,每次2个,不重复;因此,对于5份文件,有10对可能的对:
实际配对是: 1-2,1-3,1-4,1-5,2-3,2-4,2-5,3-4,3-5,4-5
您可能会注意到,您最初将第一份文件与其余4份进行比较,然后将第二份文件与其余4份进行比较,依此类推。
//for each document, except for the last one
for (int k = 0; k < collect.size() - 1; k++) {
//for each line i in the current document k
for (int i = 0; i < collect.get(k).size(); i++) {
//for each document m after k
for (int m = k + 1; m < collect.size(); m++) {
//for each line j in document m
for (int j = 0; j < collect.get(m).size(); j++) {
//do your stuff by comparing
//collect.get(k).get(i).getSentence()
//WITH
//collect.get(m).get(j).getSentence()
}
}
}
}