用SQL的正则处理人名的缩写问题

数据中心的数据在向期刊进行投稿时,通常需要对数据引用有一定的格式变换。比如,Nature Scientific Data期刊,对Data Citation部分的建议是:

1. Lastname1, Initial1., Lastname2, Initial2., … & LastnameN. InitialN. Repository_name Dataset_accession_number_or_DOI (YYYY).

数据中心的数据作者在数据库中是有记录的,其通过一个表存储:

CREATE TABLE datadoi
(
id serial NOT NULL,
doi character varying(250) NOT NULL DEFAULT ''::character varying,
authors text[],
uuid uuid,
author_en text[],
CONSTRAINT datadoi_pkey PRIMARY KEY (id),
CONSTRAINT datadoi_doi_key UNIQUE (doi)
)

 

可以看出,作者是通过一个字符串数据存储。在PostgreSQL中,数组是通过如下形式记录的:

{value1,value2,…}

对于数据的作者信息,数据中心则要求其通过如下的形式记录到数据库中:

Wang Yijia, Zhang Eryi,…

而为了满足期刊的投稿要求,则需要将格式转换为:

Wang Y., Zhang E.,…

在数据库里,最终通过这样的形式进行处理:

select translate(regexp_replace(datadoi.author_en::text,'\s+(\w)\w*"',' \1.','g'),'{}"','')

 

即,将数组转换为字符串,剔除大括号,用逗号区分不同作者,用空格区分作者的姓和名,提取名的首字母,然后全局替换即可。


已发布

分类

,

来自

标签:

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注