【发布时间】:2021-04-14 21:29:09
【问题描述】:
我有一个包含以下对象的“json 文件”:
combinedRecognizedPhrases
recognizedPhrases
json 示例:
{
"source": "https://example.com",
"timestamp": "2021-04-12T19:34:24Z",
"durationInTicks": 1082400000,
"duration": "PT1M48.24S",
"combinedRecognizedPhrases": [
{
"channel": 0,
"lexical": "aaa",
"itn": "aaa",
"maskedITN": "aaa",
"display": "aaa"
}
],
"recognizedPhrases": [
{
"recognitionStatus": "Success",
"channel": 0,
"speaker": 1,
"offset": "PT2.18S",
"duration": "PT3.88S",
"offsetInTicks": 21800000,
"durationInTicks": 38800000,
"nBest": [
{
"confidence": 0.9306252,
"lexical": "gracias por llamar",
"itn": "gracias por llamar",
"maskedITN": "gracias por llamar",
"display": "¿Gracias por llamar",
"words": [
{
"word": "gracias",
"offset": "PT2.18S",
"duration": "PT0.37S",
"offsetInTicks": 21800000,
"durationInTicks": 3700000,
"confidence": 0.930625
},
{
"word": "por",
"offset": "PT2.55S",
"duration": "PT0.18S",
"offsetInTicks": 25500000,
"durationInTicks": 1800000,
"confidence": 0.930625
},
{
"word": "llamar",
"offset": "PT2.73S",
"duration": "PT0.22S",
"offsetInTicks": 27300000,
"durationInTicks": 2200000,
"confidence": 0.930625
}
]
}
]
},
{
"recognitionStatus": "Success",
"channel": 0,
"speaker": 2,
"offset": "PT6.85S",
"duration": "PT5.63S",
"offsetInTicks": 68500000,
"durationInTicks": 56300000,
"nBest": [
{
"confidence": 0.9306253,
"lexical": "quiero hacer un pago",
"itn": "quiero hacer un pago",
"maskedITN": "quiero hacer un pago",
"display": "quiero hacer un pago"
}
]
},
{
"recognitionStatus": "Success",
"channel": 0,
"speaker": 2,
"offset": "PT13.29S",
"duration": "PT3.81S",
"offsetInTicks": 132900000,
"durationInTicks": 38100000,
"nBest": [
{
"confidence": 0.93062526,
"lexical": "no sé bien la cantidad",
"itn": "no sé bien la cantidad",
"maskedITN": "no sé bien la cantidad",
"display": "no sé bien la cantidad"
}
]
}
]
}
在示例中,recognizedPhrases 对象的值从 0 到 2。这些值中的每一个都有描述它的信息:
"recognitionStatus": "Success",
"channel": 0,
"speaker": 1,
"offset": "PT2.18S",
"duration": "PT3.88S",
"offsetInTicks": 21800000,
"durationInTicks": 38800000
recognizedPhrases 内部还有一个名为nBest 的对象,其中包含以下信息:
"confidence": 0.9306252,
"lexical": "thank you for calling",
"itn": "thank you for calling",
"maskedITN": "thank you for calling",
"display": "thank you for calling".
我需要整理每个recognizedPhrases/[0] 或1 或2 等中的可用信息。/nBest/[1]/display 在一个DF 中,当speaker=1 时有一列名为“speaker 1”,当“speaker 2”时有一列”。
例如:如果 recognizedPhrases/[0] 对象包含 "speaker": 1 和 recognizedPhrases/[1] 也有 "speaker": 1 这些短语应该在我的 df 的扬声器 1 列中连接。
编辑 1: 我已经尝试了以下方法:
with open('file.json','r') as f:
j = json.load(f)
test = pd.json_normalize(j, record_path=['recognizedPhrases'], meta=['source', 'durationInTicks', 'duration'], record_prefix='_')
这给了我以下 DF:
这个 DF 的问题在于,每个发言者每次说话时它都有一行。在我使用的示例中,speaker1 说一次,speaker 2 说两次,这段代码会生成 3 行,这不是我想要的。此外,每个说话者所说的内容都在 _nBest 字典中,并且需要额外的代码才能得到所说的内容。
我想要得到的是一个 DF,其中所有信息都在一行中。这是我正在寻找的示例:
评论@DSteman 回答: 这种方法有一件好事,那就是它允许我将扬声器分开。但是,有两点我需要改进。 首先,这种方法创建了两行。我需要将所有信息排成一行。 第二,在speaker 1栏中有speaker 2所说的内容。
第三,这种方法遗漏了很多必要的信息(见上面我正在寻找的输出图片)。
【问题讨论】: