【问题标题】:best match algorithm in pythonpython中的最佳匹配算法
【发布时间】:2016-12-14 00:32:19
【问题描述】:

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

我有一个 txt 文件,其中包含一些国家/地区代码映射,例如

代码名称

123 ABC

1234 防御

1235 GHI

124 JKL

1241 移动网络运营商

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

此外,我还有一些 CDR 文件,我在每条记录(行)中获取国家代码(数字),我想将其转换为国家名称。

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

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

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

【问题讨论】:

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

标签: python algorithm search


【解决方案1】:

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

  1. 转换

123 ABC

1234 防御

1235 GHI

124 JKL

1241 移动网络运营商

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

  1. 读取带有国家代码的CDR文件,然后在字典中搜索
  2. 如果找不到代码,请删除单元的位置并重新搜索。
  3. 仍未找到 - 打印“未找到匹配项”

下面是相同的代码-

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'

【讨论】:

    猜你喜欢
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2022-08-24
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2017-06-07
    相关资源
    最近更新 更多