- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我所说的模糊匹配并不是指通过 Levenshtein 距离或类似的东西来表示相似的字符串,而是它在 TextMate/Ido/Icicles 中的使用方式:给定一个字符串列表,找到包含搜索字符串中所有字符的字符串,但是可能与其他角色之间,更喜欢最合适的。
最佳答案
我终于明白你在找什么了。这个问题很有趣,但是看看你发现的 2 种算法,人们似乎对规范有很大不同的看法;)
我认为更清楚地说明问题和要求会很有用。
问题:
我们正在寻找一种加快输入速度的方法,方法是允许用户仅输入他们实际想要的关键字的几个字母,并向他们提供一个列表供他们选择。
分析:
前两个要求可以这样总结:对于输入axg
,我们正在寻找匹配这个正则表达式的单词[^a]*a[^x]*x[ ^g]*g.*
第三个要求是故意放宽的。单词在列表中出现的顺序需要保持一致……但是很难猜测评分方法是否比字母顺序更好。如果列表非常长,那么评分方法可能会更好,但是对于较短的列表,眼睛更容易在以明显方式排序的列表中寻找特定项目。
此外,字母顺序的优点是在输入过程中保持一致:即添加一个字母不会完全重新排序列表(对眼睛和大脑来说是痛苦的),它只是过滤掉不再匹配的项目。
没有关于处理 unicode 字符的精确度,例如 à
是否类似于 a
或完全是另一个字符?由于我知道目前没有语言在其关键字中使用此类字符,因此我暂时不说。
我的解决方案:
对于任何输入,我都会构建之前表达的正则表达式。它适用于 Python,因为该语言已经具有不区分大小写的匹配功能。
然后我会匹配我的(按字母顺序排列的)关键字列表,并将其过滤后输出。
在伪代码中:
WORDS = ['Bar', 'Foo', 'FooBar', 'Other']
def GetList(input, words = WORDS):
expr = ['[^' + i + ']*' + i for i in input]
return [w for w in words if re.match(expr, w, re.IGNORECASE)]
我本可以使用单行代码,但我认为它会使代码变得模糊 ;)
此解决方案非常适用于增量情况(即,当您匹配用户类型并因此不断重建时),因为当用户添加角色时,您可以简单地重新过滤刚刚计算的结果。因此:
我还应该注意到,这个正则表达式不涉及回溯,因此非常有效。它也可以建模为一个简单的状态机。
关于 "fuzzy matching"字符串的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2891514/
定义语言变量时,通常会指定最小值和最大值。例如,在定义温度变量时,有人可能会指定 -40C 和 +85C 作为该变量的范围。然后在变量的总体范围内定义模糊集的成员(例如冷、温、热)。 在实际应用中,如
你能推荐一些轻量级的模糊文本搜索库吗? 我想要做的是允许用户为有拼写错误的搜索词找到正确的数据。 我可以使用像 Lucene 这样的全文搜索引擎,但我认为这是一种矫枉过正。 编辑: 为了使问题更清楚,
我有一个字符串数据库(任意长度),其中包含超过一百万个项目(可能更多)。 我需要将用户提供的字符串与整个数据库进行比较,并检索相同的字符串(如果存在),否则返回最接近的模糊匹配(相似度为60%或更高)
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
我制作了一个模糊模板,它将代表学生在某个领域的知识。问题是,在宣布学生 John 为 low 后,他也将被宣布为 med,因为 low 学生的年龄也在 30 到 40 之间。 如何在不医疗的情况下宣布
我所说的模糊匹配并不是指通过 Levenshtein 距离或类似的东西来表示相似的字符串,而是它在 TextMate/Ido/Icicles 中的使用方式:给定一个字符串列表,找到包含搜索字符串中所有
我正在尝试用 Java 编写一个简单的绘图小程序,但我在使用 BasicStroke 时遇到了问题。最初,我的计划是尝试以某种方式绘制一条有宽度的线,但 API 显然不支持。 我尝试使用 BasicS
使用 Excel 2010 和 Microsoft“模糊查找”添加来比较 2 个工作表中的一列。第一个工作表有大约 48,000 行(x 3 列),第二个工作表有大约 23,000 行(x 5 列)。
在我正在创建的应用程序中,我想添加将新闻故事组合在一起的功能。我想将来自不同来源的关于同一主题的新闻故事分组到同一个组中。例如,来自 CNN 和 MSNBC 的关于 XYZ 的文章将属于同一组。我猜它
我正在使用 ElasticSearch,我正在尝试实现 match_phrase/string + fuzziness,但似乎不可能(在线示例不多,文档中没有此类案例)。 我需要的是:短语/字符串匹配
检查 $barcode 和两个字符串之间的距离,第一个字符串在前面有相同的 12 个字符,另一个完全不同但都给出相同的距离? #!/usr/bin/perl use warnings; use str
对于我当前的项目,我需要找到一种“模糊”的方法——在客户端对 JavaScript 数组进行指纹识别。 问题在于数组中的元素会随时间变化。通过更改我的意思是订单是稳定的,但一些元素可能会被删除,而其他
我想知道是否有办法让模糊搜索工具“fzf”将查询复制到命令行以便能够对其进行编辑,以防没有令人满意的匹配。 谢谢。 最佳答案 您可以创建一个键绑定(bind),将所选文件的路径(或该文件的内容)复制到
我有 IMDb 的 100 部最佳电影列表。鉴于标题,我试图通过它找到一种“模糊搜索”的方法。即,如果您输入“shaw”,结果将显示“肖申克的救赎”。如果未输入任何内容(即 search 是空字符串)
我试图创建一个查询,以完全匹配某些字段,例如account_id和from_addresses(这是一个数组),同时也模糊匹配另一个字段(例如message_content)。做这个的最好方式是什么?
如果我使用以下代码,我将找到一个以“X”开头的 Item.ShowName - 如果存在的话。 List myList = new List(); //Fill list with items Art
我正在清理继承的脏数据库,需要“模糊匹配”名称以供人工审核。我想出了一个可行的解决方案,但速度非常慢——15k 行需要 7 分钟。我感觉我忽略了一些非常简单的解决方案。 记录示例: 1 John S
我正在尝试用 Rust 编写一个“模糊比较”函数。 这是一个例子: fn fuzzy_cmp(a: f64, b: f64, tolerance: f64) -> bool { a >= b
引用此 link它说 Fuzzy Like This(也是 Fuzzy Like This 查询)将在 ES 版本 > 1.6 中弃用,并在版本 2 中完全删除。我正在使用 Elasticsearch
我一直在尝试使用 American Fuzzy Lop,但我无法使用像这样的简单示例来实现它: #include #include int main(int argc, char * argv[]
我是一名优秀的程序员,十分优秀!