hgu*_*yan 11 sql sql-server algorithm string-comparison
我Persons
在SQL Server 2008中有表.
我的目标是找到地址几乎相似的人.
地址与列描述state
,town
,street
,house
,apartment
,postcode
和phone
.
由于某些州(非美国)和人为因素(地址错误等)存在某些特定差异,因此地址不会以相同的模式填充.
地址中最常见的错误
主要问题是数据不是相同的模式,因此很难找到类似的地址.
这种问题有什么算法吗?
提前致谢.
UPDATE
建议接近它:
从各个条目创建单词级n-gram(三元组/ 4克可能会这样做)
对字符串比较进行多次x比较,并按字符串距离对它们进行聚类.有人建议Levenshtein; 对于这种任务有更好的选择,Jaro-Winkler Distance和Smith-Waterman工作得更好.像SimMetrics这样的库可以让生活变得更轻松
一旦你有了n-gram的集群,就可以使用组成子图解析整个字符串,即D.Jones St => Davy Jones St. => DJones St.
不应该太难,这是一个非常常见的问题.
更新:根据您的更新,以下是建议的步骤
将列连接成一个字符串,也许创建一个数据库"视图".例如,
创建视图vwAddress作为选择顶部10000州城,街道,房子,公寓,邮政编码,州+镇+街道+房子+公寓+邮政编码作为地址从...
编写一个单独的应用程序(比如Java或C#/ VB.NET)并使用像JaroWinkler这样的算法来估计组合地址的字符串距离,以创建许多x多次比较.并写入一个单独的表address1 | 地址n | 相似
您可以使用Simmetrics来获得相似性:
JaroWinnkler objJw = new JaroWinkler()
double sim = objJw.GetSimilarity (address1, addres n);
Run Code Online (Sandbox Code Playgroud)
你也可以将它拼成一个地址,以便"1 Jones Street,Sometown,SomeCountry"这样的地址变成"1 Jones Street","Jones Street Sometown"等等......并比较三卦.(甚至4克)以获得更高的精度.
最后,您可以按相似性排序,以获得最相似地址的集群并确定适当的阈值.不知道为什么你被卡住了
我会尝试做以下事情:
当然,保持数据"正常"的解决方案是为数据库中的每个特征提供显式字段.否则,你将每隔几个月做一次这个练习.
归档时间: |
|
查看次数: |
4902 次 |
最近记录: |