在python中进行高效的循环搜索

时间:2018-01-26 09:48:47

标签: python-3.x numpy full-text-search nltk

我正在尝试搜索地址包含对某个国家/地区或城市的引用。这将是地址包含完整的国家/地区名称,ISO 2国家/地区代码,ISO 3国家/地区代码或对城市的引用。

因此,首先我生成国家代码/名称/城市的组合(下面的变量“组合”)与各种标点符号的组合,因为地址是自由文本字段,名称不是很干净。

然后对于每个地址,我遍历组合并检查组合是否在地址中,否则如果没有找到组合则返回false。但是,数千个地址和国家/地区组合的速度非常慢。

正在搜索的数据集是https://en.wikipedia.org/wiki/ISO_3166-1的所有表格以及一长串城市。

搜索的数据包括数百个字符串,如:“Steve; Studio 103,商务中心; 61 Wellfield Road; Cardiff; GB”

有没有办法让这个更有效率?

查找标点符号和国家/地区代码的所有可用组合

def country_code_patterns(country_codes):

    punct1 = [' ',',','/','','']
    punct2 = [' ',',','/','\\','']

    combinations = itertools.zip_longest(punct1, itertools.cycle(country_codes), punct2)
    return combinations 

combinations = country_code_patterns(country_codes)

循环所有组合并查找地址

中的组合
for address in addresses:
    for combination in combinations:
       if combination in address:
          return True
    else:
       return False

1 个答案:

答案 0 :(得分:1)

编辑:在更好地理解问题之后,当您搜索城市名称和国家/地区代码对时,您可以创建一个字典来保存国家/地区代码键下的城市名称。

如果您随后搜索国家/地区代码,然后仅搜索字典中属于该键的城市,则会大大减少搜索中的项目数。这应该更快。

-

我会使用itertools库,如果我已经正确理解了你的代码试图做什么我将使用izip连接你用来提高速度的三个列表中的每个项目。

https://docs.python.org/2/library/itertools.html

同样使用列表推导会加快你的python代码