深度【文本分类】【关系抽取】模型中,如何读取并处理输出的训练文件(TXT格式)
2017-10-31 12:14
429 查看
1、一般在此类模型中,需要原始文件四个:
train.txt 一般格式为(分类类型 句子)或(关系类型 头实体 尾实体 句子)
test.txt 格式同上
relation2id.txt (关系类型 关系id)
vec.txt (word, vec1,...,vec50)假设Embedding的维度为50
注意:要保证这些txt文件都是utf-8编码的
2、先处理vec.txt文件
目的:
1得到一个wordembedding的矩阵,存放所有word的词向量。
2对这些word进行编号,因为我们后面在模型的输入部分,输入的是由单词编号组成的一个个句子,所以这里要先对word进行编号,其实就是按照文件的读取顺序,从0到len(vec)-1
f = open('./vec.txt', encoding = 'utf-8')
f.readline() #如果文件的第一行有不需要读入的一些注释或说明信息 或表头之类的 可以跳过
word2id = {} #存放词典,即word和其对应的id
wordembeddings = [] #这是词嵌入矩阵
while True:
content = f.readline()
if content == '':
break
content = content.strip().split() #删除字符串的前后空白,并且 按空格键隔开
word2id[content[0]] = len(word2id) #这里假设content[0]中存放的是word,也就是说第0列是word ,第1~50列是Embedding vector
content = content[1:] #去后50列 的 向量
content = [(float) (i) for i in content]#前面从文件里读取得到的是字符串类型的,这里要把它转化成float类
wordembeddings.append(content)
f.close() #养成良好的编程习惯,当你open一个file时,就应该想好在哪里去close它
#因为输入的句子要设置成定长的 比如都是70,所以当不足70时就应该补空,我们认为,这个空位的id是最后的,也就是len(word2id), 并随机给空位设一个对应的初始vector值.
blank = np.random.normal(size = embedding_size, loc = 0, scale = 0.05)
wordembeddings.append(blank)
word2id['']=len(word2id)
3、处理relation2id文件
f = open ('relation2id.txt',encoding ='utf-8')
relation2id={}
while True:
relation = f.readline()
if relation ==0:
break
relation = relation.strip().split()
relation2id[relation[0]] = int(relation[1])
f.close()
4、处理train.txt文件
目的:1 因为train.txt文件包含两部分,一个是关系或分类的类型,一个是训练样本也就是句子,所以这里的处理我们需要得到两个矩阵,一个矩阵A用来顺序存放分类类型,一个矩阵B用来顺序存放由单词id组成的句子,这两个矩阵的行应该一 一对应,即是:句子A的第i行应是矩阵B的第i行所对应的分类类型。
f = open('train.txt', encoding ='utf-8')
A = []
B = []
while True:
text = f.readline()
if text =='':
break
text = text.strip().split()
y = int(text[0])
b = [0 for i in range(len(word2id))]
b[y] = 1
B.append(b) #存放关系类型矩阵
sentence = text[1:]
for i in range(len(sentence)):
a.append(word2id[sentence[i]])
if len(a)<70: #不足70补
for i in range(len(a),70):
a.append(len(word2id))
if len(a)>70: #多于70删除
del a[70:]
A.append(a) #存放由word id组成的句子矩阵
f.close()
train.txt 一般格式为(分类类型 句子)或(关系类型 头实体 尾实体 句子)
test.txt 格式同上
relation2id.txt (关系类型 关系id)
vec.txt (word, vec1,...,vec50)假设Embedding的维度为50
注意:要保证这些txt文件都是utf-8编码的
2、先处理vec.txt文件
目的:
1得到一个wordembedding的矩阵,存放所有word的词向量。
2对这些word进行编号,因为我们后面在模型的输入部分,输入的是由单词编号组成的一个个句子,所以这里要先对word进行编号,其实就是按照文件的读取顺序,从0到len(vec)-1
f = open('./vec.txt', encoding = 'utf-8')
f.readline() #如果文件的第一行有不需要读入的一些注释或说明信息 或表头之类的 可以跳过
word2id = {} #存放词典,即word和其对应的id
wordembeddings = [] #这是词嵌入矩阵
while True:
content = f.readline()
if content == '':
break
content = content.strip().split() #删除字符串的前后空白,并且 按空格键隔开
word2id[content[0]] = len(word2id) #这里假设content[0]中存放的是word,也就是说第0列是word ,第1~50列是Embedding vector
content = content[1:] #去后50列 的 向量
content = [(float) (i) for i in content]#前面从文件里读取得到的是字符串类型的,这里要把它转化成float类
wordembeddings.append(content)
f.close() #养成良好的编程习惯,当你open一个file时,就应该想好在哪里去close它
#因为输入的句子要设置成定长的 比如都是70,所以当不足70时就应该补空,我们认为,这个空位的id是最后的,也就是len(word2id), 并随机给空位设一个对应的初始vector值.
blank = np.random.normal(size = embedding_size, loc = 0, scale = 0.05)
wordembeddings.append(blank)
word2id['']=len(word2id)
3、处理relation2id文件
f = open ('relation2id.txt',encoding ='utf-8')
relation2id={}
while True:
relation = f.readline()
if relation ==0:
break
relation = relation.strip().split()
relation2id[relation[0]] = int(relation[1])
f.close()
4、处理train.txt文件
目的:1 因为train.txt文件包含两部分,一个是关系或分类的类型,一个是训练样本也就是句子,所以这里的处理我们需要得到两个矩阵,一个矩阵A用来顺序存放分类类型,一个矩阵B用来顺序存放由单词id组成的句子,这两个矩阵的行应该一 一对应,即是:句子A的第i行应是矩阵B的第i行所对应的分类类型。
f = open('train.txt', encoding ='utf-8')
A = []
B = []
while True:
text = f.readline()
if text =='':
break
text = text.strip().split()
y = int(text[0])
b = [0 for i in range(len(word2id))]
b[y] = 1
B.append(b) #存放关系类型矩阵
sentence = text[1:]
for i in range(len(sentence)):
a.append(word2id[sentence[i]])
if len(a)<70: #不足70补
for i in range(len(a),70):
a.append(len(word2id))
if len(a)>70: #多于70删除
del a[70:]
A.append(a) #存放由word id组成的句子矩阵
f.close()
相关文章推荐
- MATLAB处理txt文本文件---数据格式要有规律性,否则要用编写特定方式进行读取
- iphone阅读器,如果要读取一个文本文件,请问你是如何处理编码问题的?另外像pdf格式的文件,你如何读取。?
- matlab处理txt文本文件---数据格式要有规律性,否则要用编写特定方式进行读取
- 读取txt格式文件输出(点击下载txt模板)
- 如何高效读取CSV文件后进行高效处理?(之一:高效读取CSV格式文件)
- Java读取txt或其他文件以UTF-8格式输出的时候,第一行代码出现“?”乱码的原因及解决方案!
- 如何用Tensorflow训练模型成pb文件(二)——基于tfrecord的读取
- 如何用Tensorflow训练模型成pb文件(一)——基于原始图片的读取
- 从键盘多行输入,写入TXT文件并读取输出~只显示第一行,如何解决?(答案见代码)
- NCL 读取 各种格式 然后把头文件重新定向输出到txt文件中
- C#如何读取.TXT文件
- 如何在VB 中读取 UTF-8 格式的文件?
- 如何将*.TXT类型文件转换成*.XLS格式的文件
- matlab中如何读取TXT数据文件 (续)
- 用Excel打开csv文件时,如何处理数字内容展现会自动转换格式的问题
- DOS批处理:读取配置文件,格式 与 程序,例子
- Hadoop如何读取复杂格式的文件,例如XML、HTML、图像等,附源码
- sap 如何实现打印输出到Adobe PDF格式文件
- Java读取UTF-8格式txt文件第一行出现乱码——问号“?”及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法
- matlab中如何读取TXT数据文件中指定行的数据?