【发布时间】:2020-04-21 15:13:55
【问题描述】:
我有这些 ActiveRecords
items = [{title: "Title 1"}, {title: "Title 2"}, {title: "Title 3"}]
现在我想对标题相似的项目进行分组(使用函数 Levenshtein distance > 70%)。
我在想item.group_by{} 之类的东西,但我想知道如何计算每个组合的分数?我必须将 title1 与 title3 和 title2 与 title3 等进行比较。
def levenshtein_distance(title_a, title_b)
...
return score
end
我尝试使用聚类算法(具有非欧几里得度量的 KMedoids),但我不知道先验的聚类大小 (k)。
【问题讨论】:
-
group_by仅适用于绝对指标。你想要的是clustering。 -
@Stefan 我尝试使用 Kmedoids,但我没有先验群集大小 (k)。
-
你可以使用模糊匹配 gem github.com/seamusabshere/fuzzy_match
-
这不一定是与数据库无关的问题。例如,Postgres 有一个显式的
LEVENSHTEIN方法,因此 Postgres 的解决方案与 SQLite 或 MySQL 的解决方案不同。你用的是什么数据库?
标签: ruby-on-rails ruby ruby-on-rails-6