从语料库中查找匹配的常用单词或短语的高效算法

时间:2015-01-21 18:56:28

标签: java algorithm text

我正在努力寻找一种有效的方法来查找常用短语。我想我可以通过一个例子更好地解释。

输入:将每一行视为句子

B
B C
A B C B
D E
F D E

输出:

B
D E

第2行和第3行被删除,因为B(第1行)对它们是通用的。第5行被删除,因为第4行是常见的。

我希望我已经解释过了!

我可以通过匹配来运行O(n ^ 2)。更欣赏任何事情。

更新:请考虑订单(例如D E应匹配句子F D EE D不应该。)

1 个答案:

答案 0 :(得分:1)

我能想到的最快方式就是:

public static void main(String[] args) throws Exception {

    List<String> toOutput = new ArrayList<String>();
    BufferedReader br = new BufferedReader(new FileReader("input.txt"));
    String line;
    while ((line = br.readLine()) != null) {
        boolean add = true;

        for (int i = 0; i < toOutput.size(); i++) {
            if (toOutput.get(i).contains(line)) {
                toOutput.remove(i);
            } else if (line.contains(toOutput.get(i))) {
                add = false;
                break;
            }
        }

        if (add) {
            toOutput.add(line);
        }
    }
    br.close();

    for (String s : toOutput) {
        System.out.println(s);
    }
}

input.txt中:

B
B C
A B C B
F D E
D E

输出:

B
D E

验证当前句子是否包含我们当前发现的任何唯一字符串。我不相信有更有效的方式。