私が本当に理解していない理由で、私が使用しているREST APIは、JSONまたはXMLを出力する代わりに、独特の構造化テキスト形式を使用しています。最も単純な形で
SECTION_NAME entry other qualifying bits of the entry
entry2 other qualifying bits
...
構造が見えるように、これらはタブで区切られていませんが、代わりにスペースで区切られ、修飾ビットにはスペースを含む単語が含まれている場合があります。SECTION_NAMEとエントリの間のスペースも可変で、1から数(6以上)のスペースの範囲です。
また、フォーマットの一部には、フォームのエントリが含まれています
SECTION_NAME entry
SUB_SECTION more information
SUB_SECTION2 more information
参考までに、構造の使用法を示す実際のデータの抜粋(一部のセクションは省略)。
ENTRY hsa04064 Pathway
NAME NF-kappa B signaling pathway - Homo sapiens (human)
DRUG D09347 Fostamatinib (USAN)
D09348 Fostamatinib disodium (USAN)
D09692 Veliparib (USAN/INN)
D09730 Olaparib (JAN/INN)
D09913 Iniparib (USAN/INN)
REFERENCE PMID:21772278
AUTHORS Oeckinghaus A, Hayden MS, Ghosh S
TITLE Crosstalk in NF-kappaB signaling pathways.
JOURNAL Nat Immunol 12:695-708 (2011)
この奇妙な形式を何か賢いもの(JSONに変換できる辞書)に解析しようとしているので、どうすればよいかわかりません。スペースを盲目的に分割すると、混乱が発生します(スペースのある情報にも影響します)。セクションがいつ始まるかどうかをどうやって理解できるかわかりません。テキスト操作は仕事に十分ですか、それとももっと洗練された方法を使うべきですか?
編集:
私は仕事にpyparsingを使い始めましたが、複数行のレコードが私を困惑させます。これがDRUGの例です。
from pyparsing import *
punctuation = ",.'`&-"
special_chars = "\()[]"
drug = Keyword("DRUG")
drug_content = Word(alphanums) + originalTextFor(OneOrMore(Word(
alphanums + special_chars))) + ZeroOrMore(LineEnd())
drug_lines = OneOrMore(drug_content)
drug_parser = drug + drug_lines
例のDRUGの最初の3行に適用すると、間違った結果が得られます(\ n読みやすくするために実際の結果に変換されます)。
['DRUG', ['D09347', 'Fostamatinib (USAN)
D09348 Fostamatinib disodium (USAN)
D09692 Veliparib (USAN']]
ご覧のとおり、後続のエントリはすべてまとめられますが、次のようになります。
['DRUG', [['D09347', 'Fostamatinib (USAN)'], ["D09348", "Fostamatinib disodium (USAN)"],
['D09692', ' Veliparib (USAN)']]]