【问题标题】:Skip Bi-grams in Java String (Compare two sentences)跳过 Java 字符串中的 Bi-grams(比较两个句子)
【发布时间】:2016-11-24 11:31:49
【问题描述】:

我需要帮助才能用 Java 中的 String 来做这件事。 对我来说最好的解释方式是使用示例。

所以,我想从两个句子(用户输入)中提取 skip bi-grams,然后能够在相似度方面相互比较。

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

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

结果

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

{我爱},{我绿},{我苹果},{爱绿},{爱苹果},{青苹果}

(共 6 个二元组)

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

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

(共 6 个二元组)


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

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

提前致谢!

【问题讨论】:

    标签: java string compare string-comparison sentence


    【解决方案1】:

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

    这是一个涉及 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)));
        }
    }
    

    【讨论】:

    • 太棒了!现在我需要在代码里面加上距离。
    • 距离是什么意思?您是指不同的二元组数吗?
    • 距离是我必须在作为用户输入的代码中使用的变量。它是一个int,决定了句子中单词之间的距离。
    • 例如,如果我使用 1 的距离,第一句的双元组将如下所示:{I love}, {love green}, {green apples}第二句:{I love}、{love red}、{red apples}
    • 你可以通过改变skipBigrams()中的循环条件来实现距离。想想在循环条件方面距离为 1、2 或 3 意味着什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 2012-06-19
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    相关资源
    最近更新 更多