Python 将十六进制字符串与列表标记匹配
我正在建立一个去识别工具。它用其他名称替换所有名称 我们接到报告说彼得昨天遇见了简。彼得很可疑 输出: 我们接到报告说比利昨天见到了艾尔莎。比利很可疑 它可以在多个文档上完成,并且一个名称总是被同一个对应项替换,因此您仍然可以理解文本所指的是谁。但是,所有文档都有一个ID,指的是该文件涉及的人(我在公共服务部门处理文件),只有具有相同ID的文档才会以相同的方式取消标识,并使用相同的名称。(目的是观察进化和人类历史)这是一种安全措施,比如当我将工具交给第三方时,我不会将自己文档的密钥与之一起交给第三方 因此,相同的输入,使用不同的ID,产生: 我们接到报告说亨利昨天遇到了艾丽西亚。亨利很可疑 现在,我用文档ID作为salt对每个名称进行散列,我将散列转换为一个整数,然后减去名称列表的长度,直到我可以请求一个以该整数作为标记的名称。但我觉得应该有一个更快/更直接的方法 这实际上更多的是一个算法问题,但如果它与我使用的Python2.7有任何关联,请在需要时请求更多解释。谢谢大家!Python 将十六进制字符串与列表标记匹配,python,string,hex,Python,String,Hex,我正在建立一个去识别工具。它用其他名称替换所有名称 我们接到报告说彼得昨天遇见了简。彼得很可疑 输出: 我们接到报告说比利昨天见到了艾尔莎。比利很可疑 它可以在多个文档上完成,并且一个名称总是被同一个对应项替换,因此您仍然可以理解文本所指的是谁。但是,所有文档都有一个ID,指的是该文件涉及的人(我在公共服务部门处理文件),只有具有相同ID的文档才会以相同的方式取消标识,并使用相同的名称。(目的是观察进化和人类历史)这是一种安全措施,比如当我将工具交给第三方时,我不会将自己文档的密钥与之一起交给第
我希望这样会更清楚ô对不起,当你深陷于代码中时,你忘记了其他人需要一个更大的图景来理解你是如何做到的。正如@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()
试着用名字字典
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)
重新导入
姓名={“彼得”:“比利”、“简”:“艾尔莎”}
对于re.findall(([a-zA-Z]+)”中的名称,s:
s=re.sub(“+name+”,“+names[name]+”,s)
印刷品
输出:
'We got a report that <name>Billy</name> met <name>Elsa</name> yesterday. <name>Billy</name> is suspicious.'
“我们接到报告说比利昨天遇到了艾尔莎。比利很可疑
为什么要将名称散列?使用字典{“Peter”:“Billy”,“Jane”:“Elsa”}
。实际上,dict
在内部使用哈希来精确地实现这一点。所以@LutzHorn的答案是最好的:建立一个目录。@LutzHorn出于安全考虑,我正在建立一个工具,而不仅仅是一次性使用一堆文件。我真的不明白你的问题。@LutzHorn我现在明白为什么不清楚了,抱歉。编辑。一个文档集合的名称应相同,不同集合的名称应不同。这样,第三方就可以取消识别自己的文档,而不必拥有我自己文档的密钥。在此之前,我用集合ID为哈希加盐。谢谢你的建议,编辑了我的问题。出于基本的安全原因,我正在使用哈希,我正在构建一个去识别工具,该工具将在某个时候开放供使用和审查。