Skip to content

Instantly share code, notes, and snippets.

@gicmo
Created June 12, 2020 12:48
Show Gist options
  • Save gicmo/51cdf8a2a7d65edb59c6280c70fcd8d4 to your computer and use it in GitHub Desktop.
Save gicmo/51cdf8a2a7d65edb59c6280c70fcd8d4 to your computer and use it in GitHub Desktop.
#!/usr/bin/python3
import re
import sys
example = "[Renne, Julius; Gutberlet, Marcel; Voskrebenzev, Andreas; Kern, Agilo; Kaireit, Till; Hinrichs, Jan; Wacker, Frank; Vogel-Claussen, Jens] Hannover Med Sch, Dept Intervent & Diagnost Radiol, Hannover, Germany; [Renne, Julius; Gutberlet, Marcel; Voskrebenzev, Andreas; Hinrichs, Jan; Warnecke, Gregor; Braubach, Peter; Jonigk, Danny; Vogel-Claussen, Jens; Zinne, Norman] Integrated Res & Treatment Ctr Transplantat IfB T, Hannover, Germany; [Zardo, Patrick; Warnecke, Gregor; Krueger, Marcus; Haverich, Axel; Zinne, Norman] Hannover Med Sch, Clin Cardiothorac & Transplantat Surg, Hannover, Germany; [Braubach, Peter; Jonigk, Danny] Hannover Med Sch, Dept Pathol, Hannover, Germany; [Wacker, Frank; Vogel-Claussen, Jens] German Ctr Lung Res, BREATH, Hannover, Germany"
def parse_affiliations(raw):
authors = dict()
start = 0
while raw:
start = raw.find('[')
stop = raw.find(']')
au = raw[start+1:stop]
au_split = au.split(";")
raw = raw[stop+1:]
pos = raw.find(';')
if pos != -1:
af = raw[:pos]
raw = raw[pos:]
else:
af = raw
raw = ""
af = af.strip()
print(f"{au_split}: {af}")
for author in au_split:
author = author.strip()
existing = authors.get(author, [])
if not existing:
authors[author] = [af]
else:
existing.append(af)
return authors
def main():
if len(sys.argv) > 1:
to_parse = sys.argv[1]
else:
to_parse = example
af = parse_affiliations(to_parse)
print(af)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment