我创建了一个.txt文件,其中包含模型的训练数据。训练样本具有某种结构,如下所示:
<template>
<div ref="cool">COOL!</div>
<div>I am new</div>
</template>
我有600个我需要放在python列表中的那些。但是,当我使用("sample sentence",
{"entities": [ ]})
等进行“正常”python读取时,我将所有示例导入为基本上如下的字符串:
file.readlines()
是什么让训练数据对模型无效。
所以我的问题是如何告诉python在没有任何字符串格式的情况下读取.txt文件,而只是按原样读取它?
//编辑:
.txt是一个文件,其培训数据符合NER注释方案之后的spaCy模型的培训过程。使用spaCy文档页面中的NER注释方案的训练数据示例:
'("sample sentence",'
'{"entities": [ ]})'
我的.txt文件看起来与此类似,只是在.txt文件的开头和末尾没有TRAIN_DATA = [
("Uber blew through $1 million a week", {'entities': [(0, 4, 'ORG')]}),
("Google rebrands its business apps", {'entities': [(0, 6, "ORG")]})]
,并且两者之间有换行符。所以这个例子在我的.txt文件中看起来像这样:
[ ]
答案 0 :(得分:2)
我想出了以下内容。它适用于您的示例。尝试一下。
from ast import literal_eval
with open(file_name, 'r') as f:
TRAIN_DATA = literal_eval('[' + ''.join(f.readlines()) + ']')
或
from ast import literal_eval
with open(file_name, 'r') as f:
TRAIN_DATA = literal_eval('[' + f.read() + ']')
这将读取整个文件,并在评估之前添加缺少的方括号。
答案 1 :(得分:1)
您需要将字符串解释为Python对象。 在没有任何关于文件结构的知识的情况下,我将假设它任意断行,除了换行符之外没有数据对象之间的任何分隔符。
如果是这种情况,则此代码应该有效:
from ast import literal_eval
def iterate_objects(filename):
cur_data = ""
with open(filename, 'r') as f:
for l in f.readlines():
cur_data += l
try:
yield literal_eval(cur_data)
except:
continue
TRAIN_DATA = list(iterate_objects(your_filename))
它尝试解释累积的行到目前为止,直到它成功,然后它产生对象并继续。
鉴于新的.txt文件示例,一个更简单的解决方案将起作用:
from ast import literal_eval
with open(filename, 'r') as f:
TRAIN_DATA = list(literal_eval(f.read().replace('\n','')))
根据给定的.txt示例,输出TRAIN_DATA
应该是所有数据对象的元组。