MeSH-ASCII-Format in Python parsen
English
Deutsch
Ähnlich wie unser zuvor veröffentlichter UniProt-Parser bietet MeSH ein ASCII-Format, das sich leicht mit Python parsen lässt.
Genau wie der UniProt-Parser yielded diese Funktion MeSH-Einträge, die durch Dictionaries repräsentiert werden. Beispielcode ist am Ende der Datei enthalten.
mesh_parser.py
#!/usr/bin/env python3
"""
Ein einfacher Parser für das MeSH-ASCII-Format, wie es hier heruntergeladen werden kann:
ftp://nlmpubs.nlm.nih.gov/online/mesh/.asciimesh/d2015.bin
Eine Referenz zu MeSH-Headings (d.h. Keys in der resultierenden Map) findest du unter
https://www.nlm.nih.gov/mesh/meshhome.html
Ursprünglich veröffentlicht auf TechOverflow.net
"""
from collections import defaultdict
__author__ = "Uli Köhler"
__copyright__ = "Copyright 2015, Uli Köhler"
__license__ = "CC0 1.0 Universal"
__version__ = "1.0"
def readMeSH(fin):
"""
Parst ein file-ähnliches Objekt und generiert MeSH-Objekte, d.h.
Dictionaries mit einer Liste von Werten für jeden Qualifier.
Beispiel: {"MH": ["Acetylcysteine"]}
"""
currentEntry = None
for line in fin:
line = line.strip()
if not line:
continue
# Neuen Datensatz verarbeiten. MeSH markiert dies explizit
if line == "*NEWRECORD":
# Alten Eintrag yielden, neuen initialisieren
if currentEntry:
yield currentEntry
currentEntry = defaultdict(list)
continue
# Zeilenbeispiel: "MH = Acetylcysteine"
key, _, value = line.partition(" = ")
# An Werteliste anhängen
currentEntry[key].append(value)
# Wenn ein nicht-leerer Eintrag übrig ist, diesen yielden
if currentEntry:
yield currentEntry
if __name__ == "__main__":
# Beispiel für die Verwendung von readMeSH()
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("file")
args = parser.parse_args()
with open(args.file, "r") as infile:
# readMeSH() yielded MeSH-Objekte, d.h. Dictionaries
for entry in readMeSH(infile):
print(entry)Check out similar posts by category:
Bioinformatics, Python
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow