地址相似度计算

方法一:

使用地址标准化模块GeocodingCHN

  • 该模块可以对地址进行标准化重构,也可对行政省市进行补齐(如果未写区县则无法补齐区县)
  • 做相似性比较时会先对地址进行标准化转换,转换后对其进行对比,对比时实际使用余弦相似性来计算相似度。

实现如下:

import pandas as pd
import numpy as np 
from GeocodingCHN import Geocoding

#读入数据df

#格式化函数
def addr_format(addr):
    address_nor = Geocoding.normalizing(addr)
    return address_nor

#相似度计算函数
def addr_similar(text1,text2):
    Address_1 = Geocoding.normalizing(text1)
    Address_2 = Geocoding.normalizing(text2)
    if type(Address_1) == Geocoding.Address and type(Address_2) == Geocoding.Address:
        similar = Geocoding.similarityWithResult(Address_1, Address_2)
        return similar
    else:
        return 0

def ex_similar(df):
    sim = addr_similar(df['addr1'],df['addr2'])
    return sim

def ex_format1(df):
    ex = ad
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 C# 中可以使用 Levenshtein Distance 算法来计算两个字符串的相似度,该算法计算两个字符串之间的编辑距离,即需要进行多少次插入、删除或替换操作才能将一个字符串转换为另一个字符串。我们可以将编辑距离除以两个字符串的长度之和,得到一个介于 0 到 1 之间的相似度值,值越大表示两个字符串越相似。 下面是一个示例代码: ``` public bool IsSameAddress(string addr1, string addr2, double threshold) { if (string.Equals(addr1, addr2, StringComparison.OrdinalIgnoreCase)) { return true; } if (addr1.Contains(addr2) || addr2.Contains(addr1)) { return true; } // 计算编辑距离 int[,] matrix = new int[addr1.Length + 1, addr2.Length + 1]; for (int i = 0; i <= addr1.Length; i++) { matrix[i, 0] = i; } for (int j = 0; j <= addr2.Length; j++) { matrix[0, j] = j; } for (int i = 1; i <= addr1.Length; i++) { for (int j = 1; j <= addr2.Length; j++) { int cost = (addr1[i - 1] == addr2[j - 1]) ? 0 : 1; matrix[i, j] = Math.Min(matrix[i - 1, j] + 1, Math.Min(matrix[i, j - 1] + 1, matrix[i - 1, j - 1] + cost)); } } double distance = (double)matrix[addr1.Length, addr2.Length] / (addr1.Length + addr2.Length); return distance >= threshold; } ``` 在上面的代码中,我们使用一个二维数组来保存两个字符串之间的编辑距离,然后将编辑距离除以两个字符串的长度之和得到相似度值。如果相似度值大于等于给定的阈值,则认为两个地址是同一个地址

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值