如何比较 java 中多个文档中的多个句子

How to compare many sentence in several documents in java

我在 2 个文档中有几个句子相互比较。我使用公式相似度来比较它们,我使用 List<List<>> 从文档中获取元素句子。但它仅适用于 2 个文档,如果我比较超过三个文档则不起作用,例如我比较 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++;
      }
}

抱歉我的英语不好

我想您需要计算所有 N 个文档之间所有行的相似度。如果是这样,您必须比较每对可能的文档。 document-pairs的总数是n个文档的组合,一次取2个,不重复;因此,对于 5 个文档,有 10 个可能的对:

实际对数是:1-2、1-3、1-4、1-5、2-3、2-4、2-5、3-4、3-5 , 4-5

您可能会注意到,您首先将第 1 个文档与其余 4 个文档进行比较,然后将第 2 个文档与其余 3 个文档进行比较,依此类推。

//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()
            }
        }
    }
}