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

时间:2015-11-07 10:28:37

标签: java arraylist similarity documents

我在两份文件中有几个相互比较的句子。我使用公式相似性来比较它们,我使用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++;
      }
}

抱歉我的英文不好

1 个答案:

答案 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()
            }
        }
    }
}