问题:
您好,我最近在编程方面一直在苦苦挣扎。我已设法从Google语音到文本接收以下输出,但我无法弄清楚如何从此块中提取数据。
摘录1:
[VoiceMain]:已成功初始化
{"导致":[]} {"导致":[{"替代":[{"转录":"你好""信心&#34 ;: 0.46152416},{"成绩单":"多低"},{"成绩单":"如何"},{"成绩单":"多长时间"},{"成绩单":" Polo"}]," final":true}], " result_index":0}
[VoiceMain]:已成功初始化
{"导致":[]} {"导致":[{"替代":[{"转录":"你好"},{"转录&#34 ;:"多久"},{"成绩单":"多低"},{"成绩单":"多久&# 34;}],"最终":真}]," result_index":0}
目的:
我的目标是提取字符串"你好" (不带引号)来自每个块的第一个副本,并将其设置为等于变量。当我不知道这句话是什么时,问题就出现了。而不是" hello",该短语可以是任何长度的字符串。即使它是一个不同的字符串,我仍然希望将它设置为短语" hello"本来应该是。
此外,我想在“#34;置信度”这个词之后提取数字。在这种情况下,它是0.46152416。数据类型与置信度变量无关。置信变量似乎更难以从块中提取,因为它可能存在也可能不存在。如果不存在,则必须忽略它。但是,如果它存在,则必须将其检测并存储为变量。
另请注意,此文本块存储在名为" CurlOutput.txt"的文件中。
非常感谢所有与解决此问题相关的帮助或建议。
答案 0 :(得分:0)
您可以使用正则表达式执行此操作,但我假设您将在稍后的代码中将其用作dict。所以这是一个将这个结果构建为字典的python方法。
import json
with open('CurlOutput.txt') as f:
lines = f.read().splitlines()
flag = '{"result":[]} '
for line in lines: # Loop through each lin in file
if flag in line: # check if this is a line with data on it
results = json.loads(line.replace(flag, ''))['result'] # Load data as a dict
# If you just want to change first index of alternative
# results[0]['alternative'][0]['transcript'] = 'myNewString'
# If you want to check all alternative for confidence and transcript
for result in results[0]['alternative']: # Loop over each alternative
transcript = result['transcript']
confidence = None
if 'confidence' in result:
confidence = result['confidence']
# now do whatever you want with confidence and transcript.