- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近的任务是开发一种算法来检查数据库中的重复客户记录。数据库布局非常简单:数万行包含 FullName、Street、City、ZIP、Phone 等字段...
先介绍一下背景
我对算法做了一些广泛的研究,并决定每个领域都应该有一定的权重使用不同的算法,因为并非所有算法在所有情况下都表现得一样好。例如,LastName 的权重因子为 0.50。当我评估时,我会选择使用哪些算法以及它们对最终决定的影响:
系数 0.25:JaroWinkler
因子 0.60:余弦 2-Gram 相似度
系数 0.15:DamerauLevenshtein
一切正常,通过一些调整,我几乎没有错误地检测到积极因素。到目前为止,一切都很好。然而,正如您可以想象的那样,在处理数万条记录时,运行时间为 O(n^2) - 或者实际上是 E 形式 i=0 到 i=n - 并不是很有效。不用说,积极优化、使用编译器优化速度、多线程等只是创可贴,因为真正的问题是复杂性。
基本上,我正在寻找一种方法来预过滤潜在的匹配项,并且现在已经对此进行了三天的研究。我发现了一些关于 R-Trees、R*-Trees、KD-Trees、Eucledian vectors、minhashing 等的有值(value)的信息。然而,关于所有这些的大多数信息,嗯,相当学术。我找到的最有值(value)的资源是第 3 章“挖掘海量数据集”。
现在回答我真正的问题:
我已经阅读了所有这些信息,但我不确定如何将它们放在一起。
我正在考虑在树或图形数据结构中进行某种索引,我可以在其中输入一个字符串并说“找到所有匹配概率 > 0.20 的”。这个算法应该非常快。然后,当我得到一个潜在的 (>0.20) 匹配项列表时,我可以将这几个项目与我的“昂贵”但有选择性的算法进行比较。我认为这应该将运行时间缩短到一个非常合理的值。
我一直在努力寻找某种引用代码来完成我上面想做的事情,但除了学术文章之外,我似乎没有想出任何其他东西。我确实找到了“simstring”,它实际上编译了,但似乎并没有很好地匹配 7 条测试记录..谁能指出我正确的方向?肯定有人以前遇到过这个问题并找到了解决方案......
非常感谢您!
附言我在 C++ 中执行此操作,但 C#/C/Java/PHP 中的任何示例都可以。
最佳答案
首先,我会简单地选择那些足够接近相同长度的字符串,以便它们可以在给定的概率内匹配。这不会非常有选择性,但(除非您指定相当宽松的公差)可能会非常快速地消除相当大比例的不可能匹配。 (例如,使用像 Levenshtein 这样将插入计为 1 次操作的编辑指标,如果您从长度为 5 的字符串开始并且需要在 5 次操作内匹配,那么您可以消除所有长度超过 10 的字符串而无需进一步检查)。
这是否具有足够的选择性以直接进行昂贵的比较还有待商榷——显然这将取决于你匹配的字符串长度的可变性。
关于c++ - 近似字符串匹配的概率预选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14969894/
我正在尝试使用 NHibernate 实现特权,而我想做的是每次有一个 Select 查询时,检查返回类型是什么,以及它是否是我想要的启用安全的类型(例如发票)向 ICriteria 对象添加限制,以
在我的应用程序 UI 中,我有以下字段:显示日期的日期选择器、小时下拉列表、分钟下拉列表和上午/下午下拉列表。 ViewModel 正在返回一个日期时间值,我根据该值设置下拉列表: function
我正在使用 jquery-bootgrid 插件。我将为用户提供在全局范围内存储一些值的可能性,例如语言等,然后将应用于每次访问。 Bootgrid 提供了设置一些可用的 rowCounts 来显示的
我无法理解为什么 Select2 只解析 val() 数组的第一个值。我尝试过 Select2 v4.0.3无论数组中的值的个数,Select2 仍然只显示数组的第一个值。 因此,我需要填充事件 (m
easygui 中的多项选择框似乎总是默认选择一个选项。可以根据所需选项的索引使用预选参数更改所选选项。有没有办法让一开始就没有选择任何选项?我尝试过 preselect=False ,这只给了我索引
我试图在 中获取一个预选值,我已经尝试了多个教程并在此处寻找答案,但都没有奏效。这是交易 -> 我用 $http.get("api/shifts") 加载我的类次,然后: 它会转到模态窗口。但在此
我正在尝试绑定(bind)来自 Web 服务的数据,然后使用该数据预填充表单。除单个多选元素外,所有表单控件均正确绑定(bind)。如果我手动选择一个选项,模型就会更新。下面是我的 Controlle
我有一个表单,将填充 mysql 表中的数据: $db = mysql_connect("localhost:3306", "user", "pass"); mysql_select_
在 R 中,我希望为 gvisTable 设置输出选择,以便突出显示特定的行或列。 例如我有以下代码: a <- as.data.frame(matrix(1:100, nrow=10)) plot(
在以下 2 个 html 代码片段中,我尝试创建 xpath 或 css 以查找加载页面时是否突出显示(预选)了 span(片段 1 中的元素 1 和片段 2 中的元素 2) 片段 1:
了解下拉列表,我正在尝试为 nerddinner 添加一个 RSVP 创建页面,如 Scott Gu's blog使用 Html.DropDownList 列出可用的晚餐。 我可以填充下拉列表,但无法
我是一名优秀的程序员,十分优秀!