我有一个文件(MYFILE.txt
),它是一个包含字典的列表的输出:
[{'entity_group': 'literal', 'score': 0.99999213, 'word': 'DNA', 'start': 0, 'end': 3}, {'entity_group': 'metaphoric', 'score': 0.9768174, 'word': 'loop', 'start': 4, 'end': 8}, {'entity_group': 'literal', 'score': 0.9039155, 'word': 'ing,', 'start': 8, 'end': 12}, {'entity_group': 'metaphoric', 'score': 0.99962616, 'word': 'in', 'start': 13, 'end': 15}, {'entity_group': 'literal', 'score': 0.9949911, 'word': 'which a protein or protein complex interacts simultaneously', 'start': 16, 'end': 75}, {'entity_group': 'metaphoric', 'score': 0.59057885, 'word': 'with', 'start': 76, 'end': 80}, {'entity_group': 'literal', 'score': 0.9983214, 'word': 'two separated sites on a DNA molecule, is a recurring theme', 'start': 81, 'end': 140}, {'entity_group': 'metaphoric', 'score': 0.9998679, 'word': 'in', 'start': 141, 'end': 143}, {'entity_group': 'literal', 'score': 0.9997542, 'word': 'transcription', 'start': 144, 'end': 157}, {'entity_group': 'metaphoric', 'score': 0.7964442, 'word': 'regula', 'start': 158, 'end': 164}, {'entity_group': 'literal', 'score': 0.99982435, 'word': 'tion [', 'start': 164, 'end': 170}]
我想把“字面”分组,以便只得到文本,而把隐喻保留原样。我试过下面的代码,但它说string indices must be integers
,我还认为我可以把它变成HTML,并给它着色,以更好地可视化结果,但我相信有一个更快的解决方案。
with open(r'MYFILE.txt', 'r') as res:
texty = res.read()
for group in texty[::-1]:
ent = group["entity_group"]
if ent != 'literal':
text2 = replace_at(ent, group['end'], group['end'], text)
print(text2)
1条答案
按热度按时间qaxu7uf21#
但上面写着
string indices must be integers
texty
是一个字符串[而不是您预期的字典列表],因为这是 *.read()
* 返回的结果(当您使用mode='r'
执行open
时);因此,当您使用 *for group in texty...
* 迭代它时,每个group
都是单字符串[而不是字典],这就是在 *ent = group["entity_group"]
* 处引发错误[我假设]的原因。勉强的建议:尝试在 *
for group...
* 之前添加带有**exec(f'texty = {texty.strip()}')
**的行。但这不是一个保存数据的好方法。请查看json和pickle。[我更喜欢json,因为它不是python特有的。]
至于
我还认为我可以将其设置为HTML并对其着色,以便更好地显示结果,但我确信有一个更快的解决方案
恐怕没有足够的代码或上下文来完全理解您在这里的意思。包括
replace_at
的定义以及text
和[所需的]text2
值的示例集可能会有所帮助。