跳过Java字符串中的双字符(比较两个句子)

跳过Java字符串中的双字符(比较两个句子),java,string,compare,string-comparison,sentence,Java,String,Compare,String Comparison,Sentence,我需要帮助用Java中的字符串来完成这件事。 对我来说,最好的解释方法是用一个例子 因此,我想从两个句子(用户输入)中提取跳过双格,然后能够在相似性方面相互比较 句子1:“我喜欢青苹果。” 第二句:“我喜欢红苹果。” 此外,还有一个名为“distance”的变量,用于获取单词之间的距离。(目前不是很重要) 结果 使用3的距离从句子#1中提取的skip bi-gram为: {I love},{I green},{I apples},{I love green},{love apples},{gre

我需要帮助用Java中的字符串来完成这件事。 对我来说,最好的解释方法是用一个例子

因此,我想从两个句子(用户输入)中提取跳过双格,然后能够在相似性方面相互比较

句子1:“我喜欢青苹果。” 第二句:“我喜欢红苹果。”

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

结果

使用3的距离从句子#1中提取的skip bi-gram为:

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

(总共6双克)

使用3的距离从句子#2中提取的skip bi-gram为:

{我爱}、{我红}、{我苹果}、{爱红}、{爱苹果}、{红苹果}

(总共6双克)


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

所以我的问题是,什么样的代码可以从句子中提取这些双格


提前谢谢

基本上,你想从一句话中找出所有独特的两个单词组合

以下是一个涉及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)));
    }
}
import java.util.ArrayList;
导入java.util.array;
导入java.util.List;
公开课考试{
公共静态字符串[][]skipBigrams(字符串输入){
String[]tokens=input.replaceAll(“[^a-zA-Z]”,“).split(“\\s+”);
返回skipBigrams(代币);
}
专用静态字符串[][]skipBigrams(字符串[]令牌){
List bigrams=new ArrayList();
for(int i=0;i
基本上,您希望从一个单词句子中找到所有唯一的两个单词组合

以下是一个涉及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)));
    }
}
import java.util.ArrayList;
导入java.util.array;
导入java.util.List;
公开课考试{
公共静态字符串[][]skipBigrams(字符串输入){
String[]tokens=input.replaceAll(“[^a-zA-Z]”,“).split(“\\s+”);
返回skipBigrams(代币);
}
专用静态字符串[][]skipBigrams(字符串[]令牌){
List bigrams=new ArrayList();
for(int i=0;i
太棒了!现在我需要在代码中添加距离。你说的距离是什么意思?你的意思是不同的bigram的数量吗?距离是一个变量,我必须在代码中使用它,这是一个用户输入。它是一个确定句子中单词之间距离的整数。例如,如果我使用1的距离,第一个句子的双格将如下:{I love},{love green},{green apples},第二个句子:{I love},{love red},{red apples}可以通过更改skipBigrams()中的循环条件来实现距离。想想在循环条件下,距离为1、2或3意味着什么。太棒了!现在我需要在代码中添加距离。你说的距离是什么意思?你的意思是不同的bigram的数量吗?距离是一个变量,我必须在代码中使用它,这是一个用户输入。它是一个确定句子中单词之间距离的整数。例如,如果我使用1的距离,第一个句子的双格将如下:{I love},{love green},{green apples},第二个句子:{I love},{love red},{red apples}可以通过更改skipBigrams()中的循环条件来实现距离。根据循环条件,考虑距离为1、2或3意味着什么。