我需要编写一个程序来识别医疗记录中的姓名。如何替换COULD包含前缀,后缀和首字母或名字的名称,但不必每次都具有上述所有内容。例如,我可以通过该程序来识别史密斯博士,但不是史密斯博士。
谢谢!
这是我到目前为止的程序:
# This program removes names and email addresses occurring in a given input file and saves it in an output file.
import re
def deidentify():
infilename = input("Give the input file name: ")
outfilename = input("Give the output file name: ")
infile = open(infilename,"r")
text = infile.read()
infile.close()
# replace names
nameRE = "(Ms\.|Mr\.|Dr\.|Prof\.) [A-Z](\.|[a-z]+) [A-Z][a-z]+"
deidentified_text = re.sub(nameRE,"**name**",text)
outfile = open(outfilename,"w")
print(deidentified_text, file=outfile)
outfile.close()
deidentify()
答案 0 :(得分:0)
中的
[A-Z](\.|[a-z]+)
字词
"(Ms\.|Mr\.|Dr\.|Prof\.) [A-Z](\.|[a-z]+) [A-Z][a-z]+"
正在搜索名字或首字母。您希望此部件是可选的,因此请使用捕获组。
nameRe = "(Ms\.|Mr\.|Dr\.|Prof\.)( [A-Z](\.|[a-z]+))?( [A-Z][a-z]+)"
re.sub(nameRe, r"\1\4" ,text)
中的
?
re.sub(nameRe, r"\1\4" ,text)
说"这部分是可选的,但即使它是空的,仍然把它当作一个捕获组。"
r"\1\4"
告诉re.sub
使用第一个和第四个捕获组(基本上,捕获组会在您看到(
的时候启动。)
答案 1 :(得分:0)
尝试以下方法:
((?:Ms\.|Mr\.|Dr\.|Prof\.|Mrs\.) (?:[A-Z](?:\.|(?:[a-z])+) )?[A-Z][a-z]+)
但是,我建议将这个文件解析为Python数据结构(字典,对象等等),然后你可以在打印结果时简单地省略名称,更不用说你可以做的所有其他方便的事情了您的数据是否在Python程序中(例如,该患者是否与我们在一起超过五年?有多少百分比的患者使用信用卡号作为支付信息?)。
答案 2 :(得分:0)
原来答案是表达式需要使用\ s来计算空格。一旦输入,程序就可以运行。