用Java String跳过Bi-gram(比较两个句子)

时间:2016-11-24 03:02:38

标签: java string compare string-comparison sentence

我需要帮助才能使用Java中的String执行此操作。 向我解释的最好方法是使用一个例子。

所以,我想从两个句子(用户的输入)中提取跳过bi-gram ,然后就相似性来比较彼此。

句子#1:“我喜欢青苹果。” 句子#2:“我喜欢红苹果。”

此外,还有一个名为“distance”的变量用于获取单词之间的距离。 (目前不是很重要)

结果

使用距离3 句子#1 中提取的跳过二元组将是:

{I love},{I green},{I apples},{love green},{love apples},{green apples}

(总共6个二克)

使用距离3 句子#2 中提取的跳过二元组将是:

{我爱},{我红},{我苹果},{爱红},{爱苹果},{红苹果}

(总共6个二克)

到目前为止,我一直在考虑使用 String [] 来放置分裂字符串句子。

所以我的问题是,什么可能是从句子中提取这些二元组的代码?

提前致谢!

1 个答案:

答案 0 :(得分:0)

基本上,您希望从单词的句子中找到所有唯一的两个单词组合。

这是一个涉及ArrayList的解决方案:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test {
    public static String[][] skipBigrams(String input) {
        String[] tokens = input.replaceAll("[^a-zA-Z ]", "").split("\\s+");
        return skipBigrams(tokens);
    }

    private static String[][] skipBigrams(String[] tokens) {
        List<String[]> bigrams = new ArrayList<>();
        for (int i = 0; i < tokens.length; i++) {
            for (int j = i + 1; j < tokens.length; j++) {
                bigrams.add(new String[]{tokens[i], tokens[j]});
            }
        }
        String[][] result = new String[bigrams.size()][2];
        result = bigrams.toArray(result);
        return result;
    }

    public static void main(String[] args) {
        String s1 = "I love green apples.";
        System.out.println(Arrays.deepToString(skipBigrams(s1)));
    }
}