1

在插入数据库之前,我有一些需要清理的数据。每行代表一个出版物,其中一些具有不同的格式。唯一的相似之处是每条记录都在同一行。例如。

5: Aghasadeghi MR, Salmani AS, Sadat SM, Javadi F, Memarnejadian A, Vahabpour R, Zabihollahi R, Moshiri A, Siadat SD. Application of outer membrane vesicle ofNeisseria meningitidis serogroup B as a new adjuvant to induce stronglyTh1-oriented responses against HIV-1. Curr HIV Res. 2011 Dec 1;9(8):630-5. PubMedPMID: 22211657.
6: Ramezani A; Banifazl M; Mohraz M; Rasoolinejad M; Aghakhani A; Occulthepatitis B virus infection: A major concern in HIV-infected patients: Occult HBVin HIV. Hepat Mon. 2011 Jan 1;11(1):7-10. PubMed PMID: 22087108; PubMed CentralPMCID: PMC3206662.
7: Roohvand, F., Kossari, N. Advances in hepatitis C virus vaccines, Part one:Advances in basic knowledge for hepatitis C virus vaccine design. Expert OpinTher Pat. 2011 Dec;21(12):1811-30. Epub 2011 Oct 25. Review. PubMed PMID:22022980.
8: Chinikar, S., Javadi, A., Ataei, B., Shakeri, H., Moradi, M., Mostafavi, E., Ghiasi, S.M.Detection of West Nile virus genome and specific antibodies in Iranianencephalitis patients. Epidemiol Infect. 2011 Oct 19:1-5. [Epub ahead of print]PubMed PMID: 22008154.

可以看到,有些作者用分号隔开,有些用逗号隔开。第 7 行和第 8 行用逗号分隔姓氏和中间名的首字母。我想将所有作者分组并将它们放在作者字段中,或者甚至将它们放在自己的列中。将这些作者彼此分开以做到这一点的最佳方法是什么?这不是一件容易的事;-)

4

1 回答 1

4

当格式不一致时,这可能会变得很棘手,因为您需要做出一些假设。我为这个解决方案所做的假设是人们的名字不会超过 20 个字符,并且标题至少有 20 个字符并且不包含逗号、分号或句点。

这是一个在最终作者之后插入标签的版本:

result = ''
for line in text.split('\n'):
    result += re.sub(r'([^,;.]{20,}.*)', r'\t\1', line) + '\n'

这是一种获取每本书的作者列表的方法:

authors = []
for line in text.split('\n'):
    names = re.split(r'\d+: |[^,;.]{20,}', line)[1]
    authors.append(re.findall(r'\w+,? [\w.]+', names))

结果:

>>> pprint.pprint(authors, width=200)
[['Aghasadeghi MR', 'Salmani AS', 'Sadat SM', 'Javadi F', 'Memarnejadian A', 'Vahabpour R', 'Zabihollahi R', 'Moshiri A', 'Siadat SD.'],
 ['Ramezani A', 'Banifazl M', 'Mohraz M', 'Rasoolinejad M', 'Aghakhani A'],
 ['Roohvand, F.', 'Kossari, N.'],
 ['Chinikar, S.', 'Javadi, A.', 'Ataei, B.', 'Shakeri, H.', 'Moradi, M.', 'Mostafavi, E.', 'Ghiasi, S.M.']]
于 2012-05-18T19:18:48.850 回答