我正在通过Expedia API获取酒店名称,并与另一家旅行服务提供商交叉引用结果。
我遇到的问题是,许多酒店名称在Expedia API上的显示方式与在其他提供程序上的显示方式不同,因此我无法找到匹配它们的好方法。
我将两者的结果分别存储在房价中。因此,例如,Expedia在立陶宛搜索维尔纽斯的结果可能像这样:
expediadict = {'Ramada Hotel & Suites Vilnius': 120, 'Hotel Rinno': 100,
'Vilnius Comfort Hotel': 110}
但是其他提供程序的结果可能如下所示:
altproviderdict = {'Ramada Vilnius': 120, 'Rinno Hotel': 100,
'Comfort Hotel LT': 110}
我唯一想做的就是删除“ Hotel”,“ Vilnius”,“ LT”和“立陶宛”的所有实例,然后测试Expediadict键的一部分是否与AltProderdict键的一部分匹配。这似乎很杂乱,而且不是很Pythonic,所以我想知道你们中的任何人是否有更清洁的想法?
最佳答案
>>> def simple_clean(word):
... return word.lower().replace(" ","").replace("hotel","")
...
>>> a = "Ramada Hotel & Suites Vilnius"
>>> b = "Hotel Ramada Suites Vilnous"
>>> a = simple_clean(a)
>>> b = simple_clean(b)
>>> a
'ramada&suitesvilnius'
>>> b
'ramadasuitesvilnous'
>>> import difflib
>>> difflib.SequenceMatcher(None,a,b).ratio()
0.9230769230769231
对单词进行清洁和标准化:删除诸如“ Hotel,The,Resort”之类的词
,并转换成小写字母,没有空格等
然后使用模糊字符串匹配算法,例如leveinstein,例如来自
difflib
模块。此方法非常原始,仅作为示例,您可以对其进行增强,以使其达到最佳效果。