Vì lý do tôi thực sự không hiểu, API REST tôi đang sử dụng, thay vì xuất ra JSON hoặc XML, sử dụng định dạng văn bản có cấu trúc đặc biệt. Ở dạng đơn giản nhất,Phân tích cú pháp tệp văn bản có cấu trúc bằng Python (pyparsing)
SECTION_NAME entry other qualifying bits of the entry
entry2 other qualifying bits
...
Chúng không bị giới hạn bởi cấu trúc có thể, nhưng thay vào đó là không gian giới hạn và các bit đủ điều kiện có thể chứa các từ có dấu cách. Không gian giữa SECTION_NAME và các mục nhập cũng biến, từ 1 đến vài (6 hoặc nhiều hơn) khoảng trắng.
Ngoài ra, một phần của định dạng này có chứa các mục trong các hình thức
SECTION_NAME entry
SUB_SECTION more information
SUB_SECTION2 more information
Để tham khảo, trích dữ liệu thực tế (một số phần bỏ qua), trong đó cho thấy việc sử dụng các cấu trúc:
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)
Khi tôi đang phân tích định dạng lạ này thành một thứ gì đó (một từ điển mà sau đó có thể được chuyển thành JSON), tôi không chắc chắn phải làm gì: chia nhỏ một cách mù quáng trên không gian gây ra một mớ hỗn độn (nó cũng ảnh hưởng đến thông tin), và tôi không chắc chắn về cách tôi có thể hình dung khi một phần bắt đầu hoặc n ot. Là thao tác văn bản đủ cho công việc hay tôi nên sử dụng các phương pháp phức tạp hơn?
EDIT:
tôi bắt đầu sử dụng pyparsing cho công việc, nhưng nhiều dòng ghi baffle tôi, đây là một ví dụ với thuốc:
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
Khi áp dụng cho 3 dòng đầu tiên của thuốc trong Ví dụ, tôi có được một kết quả sai (\ n chuyển sang lợi nhuận thực tế để giảm bớt khả năng đọc):
['DRUG', ['D09347', 'Fostamatinib (USAN)
D09348 Fostamatinib disodium (USAN)
D09692 Veliparib (USAN']]
Như bạn có thể thấy, các mục sau đó được gộp tất cả lại với nhau, trong khi tôi mong đợi:
['DRUG', [['D09347', 'Fostamatinib (USAN)'], ["D09348", "Fostamatinib disodium (USAN)"],
['D09692', ' Veliparib (USAN)']]]
Các bạn đã thử tách trên khoảng trắng, nhưng hạn chế số lượng các mối? – inspectorG4dget
@ inspectorG4dget: Tôi đã nghĩ về nó, nhưng các mục duy nhất có các yêu cầu về không gian biến đổi (vì vậy có lẽ mỗi phần sẽ yêu cầu số lượng chia tách cụ thể của nó) – Einar
Aha! Sau đó, có lẽ ['re.split'] (http://docs.python.org/library/re.html#re.split) sẽ là lựa chọn tốt hơn – inspectorG4dget