【问题标题】:Ordered sequential text matching有序的连续文本匹配
【发布时间】:2016-12-07 23:23:39
【问题描述】:

我想通过以下方式匹配字符串并获得分数,

   string 1: 4556677, string 2: 2556677, score: 0
   string 1: 123345873009, string 2: 123345873112, score: 9
   string 1: 22334567, string 2: 22334500, score: 6

所以分数代表常见的前n位数字,从左到右。

我有一个包含 100K 字符串 1 和 30M 字符串 2 的列表,我想过滤掉所有分数大于“x”的对(字符串 1 和 2)。

是否有可用的算法来完成这项任务,而不是残酷的强制顺序匹配?我有存储在 apache hive/hbase 中的表,并且想在 spark 或 java mapreduce 中实现该方法。非常感谢任何帮助。

【问题讨论】:

    标签: machine-learning pattern-matching string-matching


    【解决方案1】:

    我的结论是,您的“分数”代表字符串不同的最左侧字符位置。

    别介意“mapreduce”,普通的Jane Java 可以很容易地做到这一点。

    **

    public int score(String string1, String string2) {
    char sbuf1[] = string1.toCharArray();
    char sbuf2[] = string2.toCharArray();

        int complen = sbuf1.length;

        如果(sbuf2.length complen = sbuf2.length;
    }
    为了( 诠释 i = 0;我 如果(sbuf1[我]!= sbuf2[ i ] ) {
    返回 我;
    }
    }
    返回-1; // 表示在一个字符串用完之前未检测到不匹配
    }

    **

    【讨论】:

    • 感谢您花时间在这方面。但是这是蛮力的一对一比较,这会使要检查的对数为 '100k*30M' 效率不高,即使考虑消除不共享第一位数字的对也是如此。我需要知道是否有任何数据结构(树状)可以适应这种匹配的快速实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多