匹配十六进制字符串与列表indice

时间:2015-06-08 08:22:33

标签: python string hex

我正在构建一个去识别工具。它用其他名称替换所有名称。

  

我们收到了一份报告< name> Peter< / name>遇到< name> Jane< / name>昨天。 <名称>&彼得LT; /名称>很可疑。

outpout:

  

我们收到了< name> Billy< / name>的报告遇到< name> Elsa< / name>昨天。 <名称>&比利LT; /名称>很可疑。

它可以在多个文档上完成,并且一个名称总是被相同的对应文件替换,因此您仍然可以理解文本的对象。但是,所有文档都有一个ID,指的是此文件所涉及的人(我正在使用公共服务中的文件),只有具有相同人员ID的文档将以相同的方式取消标识,具有相同的名称。 (目标是观察进化和人们的历史)这是一种安全措施,例如当我将工具交给第三方时,我不会将密钥交给我自己的文件。

因此,具有不同ID的相同输入会产生:

  

我们收到了< name> Henry< / name>的报告met< name> Alicia< / name>昨天。 <名称>亨利LT; /名称>很可疑。

现在,我正在使用文档ID将每个名称哈希作为salt,我将哈希转换为整数,然后减去名称列表的长度,直到我可以请求具有该整数的名称作为指示。但我觉得应该有更快/更直接的方法吗?

这实际上更像是一个算法问题,但是如果它有任何相关性我正在使用python 2.7请在需要时请求更多解释。谢谢!

我希望通过这种方式更加清晰ô_o抱歉,当你在代码中处于领先地位时,你会忘记其他人需要更大的图片来了解你是如何到达那里的。

2 个答案:

答案 0 :(得分:0)

正如@LutzHorn指出的那样,你可以使用dict将真实姓名映射到虚假名称。

你也可以这样做:

existing_names =  []
for nameocurrence in original_text:
    if not nameoccurence.name in existing_names:
        nameoccurence.id = len(existing_names)
        existing_names.append(nameoccurence.name)
    else:
        nameoccurence.id = existing_names.index(nameoccurence.name)

for idx, _ in enumerate(existing_names):
    existing_names[idx] = gimme_random_name()

答案 1 :(得分:0)

尝试使用名称字典。

import re

names = {"Peter": "Billy", "Jane": "Elsa"}

for name in re.findall("<name>([a-zA-Z]+)</name>", s):
    s = re.sub("<name>" + name + "</name>", "<name>"+ names[name] + "</name>", s)
print(s)

输出:

'We got a report that <name>Billy</name> met <name>Elsa</name> yesterday. <name>Billy</name> is suspicious.'