首页 > 解决方案 > 为什么附加字母而不是单词?

问题描述

我目前正在处理来自 DSTC8 模式对话的 JSON 文件:https ://github.com/google-research-datasets/dstc8-schema-guided-dialogue

我正在尝试为每个对话提取键“act”的值,我的代码如下所示:

with open('path/dialogues_001.json', 'r') as f:
data = json.load(f)

    col = []
    #Looping through each dialogue
    for i in data:
        row = []
        x.append(q)
         #For every turns, we will loop through the 'frames' and 'actions'
         for j in i['turns']:
             for k in j['frames']:
                 for l in k['actions']:
                    #Looping through the key ; 'act'
                    for m in l['act']:
                        q.append(m)

print(x[0])

追加有效,但结果写为

['I', 'N', 'F', 'O', 'R', 'M', 'I', 'N', 'F', 'O', 'R', 'M', 'I', 'N', 'F', 'O', 'R', 'M', '_', 'I', 'N', 'T', 'E', 'N', 'T', 'R', 'E', 'Q', 'U', 'E', 'S', 'T']

代替['INFORM', 'INFORM, INFORM_INTENT, 'REQUEST']

你们知道我的代码中出现了什么问题吗?附加字母而不是单词值?

标签: pythonjsonloopsappend

解决方案


或者,您可以json通过dataframe对话框 id 找到所有带有正则表达式的行为。

import pandas as pd
import re

df = pd.read_json('path/dialogues_001.json')
df.turns = df.turns.apply(str)
df['acts'] = [re.findall(r"'act': '(\w+)'", row) for row in df['turns']]

现在你有了所有的对话 id 和他们的行为名称。它也有效,因为根据DSTC8中的方案表示,acts仅出现在actions. 输出示例


推荐阅读