【发布时间】:2018-01-23 14:33:02
【问题描述】:
我需要使用 python 处理 HL7 v2.5 (OUL_R22) 消息(规模:10⁶ 单条消息及更多)的内容。为此,我正在解析 HL7 消息。起初我使用 python 包 HL7apy 来转换为 JSON(参见 Stack: HL7 to JSON conversition)。输出看起来不错,但在处理过程中出现了一些错误/错误,而且速度非常慢。所以我尝试了将 java 库 HAPI 转换为 XML(参见 Stack: Converting HL7 v2 to JSON)。可以使用包 xmltodict 将 XML 文件作为 dict 读取。与 HL7apy 相比,转换速度快了 50 倍。但是输出的结构是不一致/异构的。 HAPI 以某种方式将片段包装到新的组中,例如 OUL_R22.SPECIMEN / .ORDER / .RESULT。问题是:
HAPI 能否产生一个平面输出或一个长度等于输入段的唯一出现次数的数组?或者你可以在某处添加一个“保留原始结构”吗?
为了让事情更清楚:我需要处理 OBX 段的内容。
输入看起来像这样:
MSH|...
PID|...
PV1|...
SPM|...
OBR|...
ORC|...
NTE|...
NTE|...
TQ1|...
OBX|...
OBX|...
...
输出的结构如下所示(当然是 XML):
OUL_R22
MSH
OUL_R22.PATIENT
OUL_R22.VISIT
OUL_R22.SPECIMEN
OUL_R22.ORDER
OUL_R22.TIMING_QTY
...
OUL_R22.RESULT
OBX
OUL_R22.RESULT
OBX
有时候是这样的:
OUL_R22
...
OBX
或者像这样:
OUL_R22
...
OUL_R22.SPECIMEN
OBX
这真的很矛盾。
我想要的是这样的:
OUL_R22
MSH
PID
...
OBX
或者像这样:
[
{
"MSH": [],
"PID": [],
...
"OBX": [],
...
【问题讨论】:
-
您正在尝试从复杂而原始的协议(如 HL7)进行双重转换:-| .首先,我建议在您的问题中添加您感兴趣的 HL7 和 XML 部分的真实示例以及预期的输出。其次,当 HAPI 产生不可预测的结果时,请尝试仔细分析这些情况。您还可以在hapifhir.github.io/hapi-hl7v2/devbyexample.html 处查看“解析”部分。也许您最好在 HL7 特定论坛上发布问题。
-
匿名化数据需要很长时间,所以我希望处理 HAPI 的 xml 输出的人能解决这个问题。我确实检查了有助于创建输出的“解析部分”。但也许你是对的,我应该向 HL7 特定的听众提出我的问题。感谢您的建议!
-
欢迎。 HL7 可能非常棘手,因此跟踪失败案例很重要。