在文本文件中定位动态字符串

时间:2016-06-26 04:52:18

标签: file python-3.x text extraction

问题:

您好,我最近在编程方面一直在苦苦挣扎。我已设法从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"的文件中。

非常感谢所有与解决此问题相关的帮助或建议。

1 个答案:

答案 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.