地址标准化以及地址相似度计算

地址标准化

该模块用于将不规范(或者连续)的文本地址进行尽可能的标准化, 以及对两个地址进行相似度的计算

注:
该模块为 IceMimosa/geocoding 项目的Python封装,原项目为Kotlin开发

为方便使用Python方法调用,这里使用Python的jpype模块将 IceMimosa/geocoding 进行封装

因此该模块需要Java环境的支持(需要添加JAVA_HOME等环境变量),下边给出新封装后的接口

  • 安装:pip install GeocodingCHN

地址标准化

Geocoding.normalizing(address)

  • address: 文本地址
from GeocodingCHN import Geocoding
text =  '山东青岛李沧区延川路116号绿城城园东区7号楼2单元802户'
address_nor = Geocoding.normalizing(text)
print(address_nor)
Address(
	provinceId=370000000000, province=山东省, 
	cityId=370200000000, city=青岛市, 
	districtId=370213000000, district=李沧区, 
	streetId=0, street=, 
	townId=0, town=, 
	villageId=0, village=, 
	road=延川路, 
	roadNum=116号, 
	buildingNum=7号楼2单元802户, 
	text=绿城城园东区
)

地址相似度计算

Geocoding.similarityWithResult(Address1, Address2)

  • Address1: 地址1, 由 Geocoding.normalizing 方法返回的 Address 类
  • Address2: 地址2, 由 Geocoding.normalizing 方法返回的 Address 类
from GeocodingCHN import Geocoding
text1 = '山东青岛李沧区延川路116号绿城城园东区7号楼2单元802户'
text2 = '山东青岛李沧区延川路绿城城园东区7-2-802'
Address_1 = Geocoding.normalizing(text1)
Address_2 = Geocoding.normalizing(text2)
similar = Geocoding.similarityWithResult(Address_1, Address_2)
print(similar)
0.9473309334313418

添加自定义地址

Geocoding.addRegionEntry(Id, parentId, name, RegionType, alias='')

  • Id: 地址的ID
  • parentId: 地址的父ID,必须存在
  • name: 地址的名称
  • RegionType: RegionType,地址类型,
  • alias: 地址的别名
from GeocodingCHN import Geocoding
Geocoding.addRegionEntry(1, 321200000000, "A街道", Geocoding.RegionType.Street)
test_address = Geocoding.normalizing("江苏泰州A街道")
Address(
	provinceId=320000000000, province=江苏省, 
	cityId=321200000000, city=泰州市, 
	districtId=321200000000, district=泰州市, 
	streetId=1, street=A街道, 
	townId=0, town=, 
	villageId=0, village=, 
	road=, 
	roadNum=, 
	buildingNum=, 
	text=
)

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
在Spark中计算文本相似度可以采用以下步骤: 1. 加载文本数据:使用Spark的DataFrame API加载文本数据,将每个文本转换为一个行记录。 2. 分词和特征提取:将每个文本进行分词并提取特征,这些特征可以是词频、TF-IDF等。 3. 计算相似度:使用Spark的MLlib库中的相似度计算算法,如余弦相似度或欧几里得距离等,计算每对文本之间的相似度。 4. 结果展示:将相似度结果保存到DataFrame中,并进行展示和分析。 下面是一个简单的示例代码: ```python from pyspark.sql.functions import udf from pyspark.ml.feature import Tokenizer, HashingTF from pyspark.ml.feature import Normalizer from pyspark.ml.linalg import Vectors from pyspark.ml.feature import VectorAssembler from pyspark.ml.feature import BucketedRandomProjectionLSH from pyspark.sql.functions import col from pyspark.sql.types import IntegerType # 加载文本数据 df = spark.read.text("path/to/text/file.txt") # 分词和特征提取 tokenizer = Tokenizer(inputCol="value", outputCol="words") wordsData = tokenizer.transform(df) hashingTF = HashingTF(inputCol="words", outputCol="rawFeatures", numFeatures=10000) featurizedData = hashingTF.transform(wordsData) idf = IDF(inputCol="rawFeatures", outputCol="features") idfModel = idf.fit(featurizedData) rescaledData = idfModel.transform(featurizedData) # 计算相似度 normalizer = Normalizer(inputCol="features", outputCol="normFeatures") data = normalizer.transform(rescaledData) vectorAssembler = VectorAssembler(inputCols=["normFeatures"], outputCol="featuresVec") data = vectorAssembler.transform(data) brp = BucketedRandomProjectionLSH(inputCol="featuresVec", outputCol="hashes", bucketLength=0.1, numHashTables=20) model = brp.fit(data) similar = model.approxSimilarityJoin(data, data, 0.6) # 结果展示 similar = similar.filter(col("datasetA.id") < col("datasetB.id")) similar = similar.withColumn("id1", similar["datasetA.id"].cast(IntegerType())) similar = similar.withColumn("id2", similar["datasetB.id"].cast(IntegerType())) similar = similar.select("id1", "id2", "distCol") similar.show() ``` 在这个示例中,我们使用了哈希特征提取(HashingTF)和逆文档频率(IDF)转换来进行特征提取,然后使用了归一化器(Normalizer)对特征向量进行标准化。最后,我们使用了桶随机投影局部敏感哈希(BucketedRandomProjectionLSH)算法计算文本之间的相似度

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值