• NER的数据处理


    import os
    class TransferData:
        def __init__(self):
            cur = '/'.join(os.path.abspath(__file__).split('/')[:-1])  #获取当前文件地址的上级目录
            #对分类进行标记
            self.label_dict = {
                          '检查和检验': 'CHECK',
                          '症状和体征': 'SIGNS',
                          '疾病和诊断': 'DISEASE',
                          '治疗': 'TREATMENT',
                          '身体部位': 'BODY'}
    
            self.origin_path = os.path.join(cur, 'data_origin')  #原始数据地址
            self.train_filepath = os.path.join(cur, 'train.txt') #转化后的训练数据地址
            return
        def transfer(self):
            f = open(self.train_filepath, 'w+',encoding='utf-8')   #以写入的方式打开训练数据要保存的文件
            count = 0
            for root,dirs,files in os.walk(self.origin_path):
            #for (root, dirs, files) in walk(roots):
            # roots代表需要遍历的根文件夹;
            # root表示正在遍历的文件夹的名字(根/子);
            # dirs记录正在遍历的文件夹下的子文件夹集合;
            # files记录正在遍历的文件夹中的文件集合
                for file in files:
                    filepath = os.path.join(root, file)
                    if 'original' not in filepath:
                        continue
                    label_filepath = filepath.replace('.txtoriginal','')
                    print(filepath, '		', label_filepath)  #data_origin一般项目一般项目-1.txtoriginal.txt 	data_origin一般项目一般项目-1.txt
                    content = open(filepath,encoding='utf-8').read().strip()  #打开案例描述文件,去掉收尾空格
                    res_dict = {}
                    for line in open(label_filepath,encoding='utf-8'):  #打开实体类别文件
                        res = line.strip().split('	')  #每个实体描述按空格分隔 ['右髋部',‘21’,‘23’,‘身体部位’]
                        start = int(res[1])  #实体的其实字符位置
                        end = int(res[2])  #实体的结束字符位置
                        label = res[3]  #实体类别
                        label_id = self.label_dict.get(label)   #返回分类字典中实体类别对应的values,作为实体名称的id
                        for i in range(start, end+1):
                            if i == start:
                                label_cate = label_id + '-B'  #定义实体的首字符
                            else:
                                label_cate = label_id + '-I'  #实体的非首字符
                            res_dict[i] = label_cate   #构建实体字典{位置index:字符}
    
                    for indx, char in enumerate(content):  #indx文本中字符的位置,char字符
                        char_label = res_dict.get(indx, 'O')  #如果indx在字典的key中,则返回字典value;否则返回O,代表非实体
                        print(char, char_label)   #字符:字符实体标注
                        f.write(char + '	' + char_label + '
    ')
            f.close()
            return
    if __name__ == '__main__':
        handler = TransferData()
        train_datas = handler.transfer()
  • 相关阅读:
    eas之Uuid和BOSUuid 区别
    BOS工具之BOS应用框架
    eas之EAS手工打包及快速部署工具
    S-HR体验中心
    wafII笔记
    eas之MrpUI
    S-HR快速查看shr日志
    S-HR二开基础
    linux安装mysql
    linux安装tomcat
  • 原文地址:https://www.cnblogs.com/hrnn/p/13534744.html
Copyright © 2020-2023  润新知