python中的最佳匹配算法

python中的最佳匹配算法,python,algorithm,search,Python,Algorithm,Search,python中最佳匹配的最佳实现应该是什么 我有一个txt文件,其中有一些国家代码映射,例如 代码名 123美国广播公司 1234 DEF 1235 GHI 124 JKL 1241 MNO 这个txt文件很大(13500条记录),我只是放了一些样本 此外,我还有一些CDR文件,在每个记录(行)中我都会得到国家代码(数字),我想将其转换为国家名称 现在我所说的最佳匹配是,假设CDR记录包含国家代码“1234”,那么国家名称将是“DEF”,如果是“1235”,那么国家名称将是“GHI”,但是如果国

python中最佳匹配的最佳实现应该是什么

我有一个txt文件,其中有一些国家代码映射,例如

代码名 123美国广播公司

1234 DEF

1235 GHI

124 JKL

1241 MNO

这个txt文件很大(13500条记录),我只是放了一些样本

此外,我还有一些CDR文件,在每个记录(行)中我都会得到国家代码(数字),我想将其转换为国家名称

现在我所说的最佳匹配是,假设CDR记录包含国家代码“1234”,那么国家名称将是“DEF”,如果是“1235”,那么国家名称将是“GHI”,但是如果国家代码是“1236”,那么完美匹配将失败,并且应该返回到“ABC”,因为“123”是可用的

我不知道这种搜索是否有一个标准名称。 就像正则表达式中的贪婪搜索一样


什么是这种搜索的最佳实现,因为CDR文件非常大(高达25GB)。

字典是实现这种搜索的最简单方法。请参阅以下解决方案:

  • 皈依
  • 123美国广播公司

    1234 DEF

    1235 GHI

    124 JKL

    1241 MNO

    至{1241:'MNO',1234:'DEF',123:'ABC',124:'JKL',1235:'GHI'}

  • 读取带有国家代码的CDR文件,然后在字典中搜索
  • 如果找不到代码,请删除单元的位置并再次搜索
  • 仍未找到-打印“未找到匹配项”
  • 下面是相同的代码-

    country_name = {}
    with open('U:\countrynames.csv','r') as f:
        for line in f:
            linesplit = line.split()
            country_name[int(linesplit[0])] = linesplit[1]
    
    with open('U:\countrycodesCDR.csv','r') as f:
        for line in f:
            country_code = int(line.strip())
            while country_code != 0:
                if country_code in country_name:
                    print country_name[country_code]
                    break
                else:
                     country_code /=10
    
            else:
                 print 'No match found'
    

    近似匹配有多种方法。什么对你“最好”取决于你的标准,你没有透露。投票结束,因为范围太广;也可能不清楚,或主要基于意见。有关详细信息,请参阅。粘贴您在此处尝试的代码。@Trimax--我还没有编写相同的代码。我只是在想办法。到目前为止,我想到的是(按国家代码)将txt文件内容排序到元组列表中。然后在列表中搜索完整的国家/地区代码,如果匹配失败,则再次搜索列表,删除最后一位,依此类推。还有更好的办法吗?@triplee——我还不知道我在这里没有透露哪些信息。我把问题缩短了,以最好的方式解决这个问题。好吧,我理解,你需要处理两个文件:一个,国家代码的映射;二是源数据。将映射文件放入字典中,然后迭代源数据并匹配字典中的country conde。