1.1 背景
在临床试验中,为了保护受试者隐私,所以在所有临床试验相关文件中受试者的姓名均以拼音缩写替代。
1.1.1 缩写规则
一般缩写均为4位大写字母,具体规则为:
姓名为2个汉字的,取每个汉字的前2位拼音;
姓名为3个汉字的,取前2个汉字的第1位拼音,加第3个汉字的前2位拼音;
姓名为4个汉字的,取每个汉字的第1位拼音。
存在特殊情况,汉字中存在单音节字,当患者姓名中存在这些单音节字且同时按照上述缩写规则需要取2位拼音的,第2位以符号“-”补齐。
1.1.2 示例
示例如下:
姓名:科比,缩写:KEBI
姓名:嫦娥,缩写:CHE-
姓名:川建国,缩写:CJGU
姓名:安倍晋三,缩写:ABJS
1.2 Python实现
相关代码已发布在:
#用于临床试验中患者姓名缩写自动转换
#先安装所需的第三方库
pip install pandas
pip install openpyxl
pip install pypinyin
from pypinyin import lazy_pinyin
import pandas as pd
from openpyxl import load_workbook
from openpyxl import Workbook
wb = load_workbook('test.xlsx')#读取test.xlsx文件
ws = wb.active
for col in ws.iter_cols(min_col=1, max_col=1, values_only=True):
for Hanzi in col:
if len(Hanzi) == 2:
Hanzi1 = Hanzi[0]
Hanzi2 = Hanzi[1]
print(str.upper(str(lazy_pinyin(Hanzi1)))[2:4], end='')
print(str.upper(str(lazy_pinyin(Hanzi2)))[2:4])
elif len(Hanzi) == 3:
Hanzi1 = Hanzi[0]
Hanzi2 = Hanzi[1]
Hanzi3 = Hanzi[2]
print(str.upper(str(lazy_pinyin(Hanzi1)))[2], end='')
print(str.upper(str(lazy_pinyin(Hanzi2)))[2], end='')
print(str.upper(str(lazy_pinyin(Hanzi3)))[2:4])
elif len(Hanzi) == 4:
Hanzi1 = Hanzi[0]
Hanzi2 = Hanzi[1]
Hanzi3 = Hanzi[2]
Hanzi4 = Hanzi[3]
print(str.upper(str(lazy_pinyin(Hanzi1)))[2], end='')
print(str.upper(str(lazy_pinyin(Hanzi2)))[2], end='')
print(str.upper(str(lazy_pinyin(Hanzi3)))[2], end='')
print(str.upper(str(lazy_pinyin(Hanzi4)))[2])
else:
print("姓名错误,请检查后重试")
1.3 不足
对于1.1.1 缩写规则中提到的单音节字的特殊情况暂不能完美处理。