我正在尝试比较两个基本上是地址的字符串。
我正在尝试使用
jaro_distance
iex(1)> String.jaro_distance("4420 West Main Street", "EUTECTIC CORPORATION QA testing1")
0.49107142857142855
但是这两个字符串之间没有相似之处。
我也尝试过 PSQL
SIMILAR TO
。就这样
def find_match(seeker_company_id, string, type) do
search = "%(" <> string <> ")%"
base_query =
from op in OpenCorporates,
where: op.seeker_company_id == ^seeker_company_id
base_query
|> type_query(type, search)
|> Repo.aggregate(:count)
end
defp type_query(query, :name, value) do
from op in query,
where: fragment("? SIMILAR TO ?", op.name, ^value)
end
defp type_query(query, :address, value) do
from op in query,
where: fragment("? SIMILAR TO ?", op.registered_address, ^value)
end
但是如果搜索字符串和实际字符串是这样的
搜索字符串:'
29 SANTA CRUZ COURT PITTSBURG CA 662354553
'和实际地址字符串:'29 SANTA CRUZ COURT PITTSBURG CA 94565
'
它也失败了。但这里不应该失败,因为大多数字符串都匹配。
那么这里有什么解决方案吗?有没有办法计算匹配的百分比?在上面的例子中,我们可以说它是80%的匹配。
任何指导都会有所帮助,谢谢。
您可能想看看通过 Levenshtein 距离计算或 Hamming 得到了什么。我还要指出 Jaro 距离的计算方式(至少根据维基百科)“分数经过标准化,0 表示完全匹配,1 表示不存在相似性”——分数为 0.49似乎确实表明存在显着差异。