【发布时间】:2013-03-25 20:34:59
【问题描述】:
假设我们有一张 People 表(姓名、姓氏、地址、SSN 等)。
我们希望找到与指定人员 A“非常相似”的所有行。 我想对 A 和 People 表中的所有行进行某种模糊逻辑比较。将有多个模糊推理规则分别在多个列上工作(例如,3 个名称模糊规则,2 个姓氏规则,5 个地址规则)
问题是以下两种方法中哪一种更好?为什么?
将所有模糊规则实现为存储过程,并使用一个繁重的 SELECT 语句返回与 A“非常相似”的所有行。这种方法可能包括使用 soundex、sim metric 等。
实现一个或多个更简单的 SELECT 语句,返回不太准确的结果,与 A“相当相似”,然后将 A 与所有返回的行(外部数据库)进行模糊比较以获得“非常相似”的行。所以模糊比较会用我最喜欢的编程语言来实现。
Table People 最多应该有 500k 行,我希望每天进行大约 500-1000 次这样的查询。我使用 MySQL(但这还有待考虑)。
【问题讨论】:
-
请说明您使用的是什么 rdbms。
-
为什么不在你的选择中使用一个 case,如果它相似则返回 1,如果不相似则返回 0,然后对所有列求和。大于特定范围的应返回。似乎是解决您问题的简单方法。
-
@JesusZamora:问题在于,首先相似度的值可能是浮点数(例如 0.43),这就是我在谈论“模糊比较”的原因。第二个问题是计算这个相似度值相当繁重,我不知道哪种方法更优化。
-
@JesusZamora:模糊逻辑假设,不可能简单地说某事是真是假,因为有很多因素可能几乎是真的或不完全是假的。
-
我刚刚找到this question,如果我理解正确,该问题的最佳答案显示了如何实施 2. 方法。
标签: mysql sql select fuzzy-logic fuzzy-comparison