博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据的采集,清洗,数据机器自动标注及转化为深度学习格式
阅读量:6264 次
发布时间:2019-06-22

本文共 4204 字,大约阅读时间需要 14 分钟。

例子是来自基于深度学习的特定领域命名实体识别课题 介绍如何利用原始数据生成测试集、训练集、验证集(看注释) 这其中字典的价值很重要,需要自己创建(这里想到的是利用爬虫技术获取)
#如何利用原始数据生成测试集、训练集、验证集#encoding=utf8import os,jieba,csvimport jieba.posseg as pseg#os.getcwd()获取当前的工作路径,os.sep是‘\\’.然后得到整个source_data的路径,# gen_data.py和source_data应是同级目录c_root=os.getcwd()+os.sep+"source_data"+os.sep#创建三个文件,最终验证集、测试集、训练集的大小比例约为1:2:12dev=open("example.dev",'w',encoding='utf8')train=open("example.train",'w',encoding='utf8')test=open("example.test",'w',encoding='utf8')#标记,规定的范围之内的东西.符号,遇到标点符号时人工建立上下文.用set比用list效率高biaoji = set(['DIS', 'SYM', 'SGN', 'TES', 'DRU', 'SUR', 'PRE', 'PT', 'Dur', 'TP', 'REG', 'ORG', 'AT', 'PSB', 'DEG', 'FW','CL'])fuhao=set(['。','?','?','!','!'])dics=csv.reader(open("DICT_NOW.csv",'r',encoding='utf8'))#读入字典for row in dics:    if len(row)==2:        #用jieba把词加载进来,row[0]是词的内容,row[1]是词的类别        jieba.add_word(row[0].strip(),tag=row[1].strip())        jieba.suggest_freq(row[0].strip())#自动调节频率,使一些长短不一的目标词不会被分开成多个词split_num=0for file in os.listdir(c_root):#for循环读取source_data文件中的每个文件    if "txtoriginal.txt" in file:        fp=open(c_root+file,'r',encoding='utf8')        for line in fp:#将文件一行行的读进来            split_num+=1            words=pseg.cut(line)#调用pseg.cut(line),这是jieba的一个词性切词的方法            for key,value in words: #切完之后得到一个key-value对,key是词,value是对应的词性,如('患者','n')                #print(key)                #print(value)                if value.strip() and key.strip():                    import time                     start_time=time.time()                    #index就是要写入到哪个文件1:2:12的比例,那有15句话,分1句给dev,分两句给test                    index=str(1) if split_num%15<2 else str(2)  if split_num%15>1 and split_num%15<4 else str(3)                     end_time=time.time()                    print("method one used time is {}".format(end_time-start_time))                    if value not in biaoji:                        value='O'#如果词的词性不在标记中,就标为O(是欧不是零)                        for achar in key.strip():#对于key可能多个字,要一个字一个字的遍历                            if achar and achar.strip() in fuhao:#如果是标点符号                                string=achar+" "+value.strip()+"\n"+"\n"                                dev.write(string) if index=='1' else test.write(string) if index=='2' else train.write(string)                             elif achar.strip() and achar.strip() not in fuhao:#如果不是标点符号                                string = achar + " " + value.strip() + "\n"#就把字和词性写进来,中间用空格隔开                                #string要写入哪个文件是由index决定的,index=1写入dev,=2写入test,                                dev.write(string) if index=='1' else test.write(string) if index=='2' else train.write(string)                             elif value.strip()  in biaoji:#当value在标记里面                        begin=0#我们用变量begin记录下来                        for char in key.strip():#同样的遍历key中的每个字                            if begin==0:                                begin+=1#每取出key中的一个字,begin就+1                                string1=char+' '+'B-'+value.strip()+'\n'#第一个字就变成B-(value)                                #根据index的值决定string1最终写入哪个文件,下同                                if index=='1':                                                                   dev.write(string1)                                elif index=='2':                                    test.write(string1)                                elif index=='3':                                    train.write(string1)                                else:                                    pass                            else:#当begin>0了                                string1 = char + ' ' + 'I-' + value.strip() + '\n'#第二个开始到key循环结束变成I-(value)                                if index=='1':                                                                   dev.write(string1)                                elif index=='2':                                    test.write(string1)                                elif index=='3':                                    train.write(string1)                                else:                                    pass                    else:                        continue                        dev.close()train.close()test.close()
 

  

 

转载于:https://www.cnblogs.com/bep-feijin/p/9488936.html

你可能感兴趣的文章
[Javascript]史上最短的IE浏览器判断代码
查看>>
关于《大道至简》第五章的收获
查看>>
网卡驱动
查看>>
kinect sdk开发入门WPFdemo笔记
查看>>
Server.Transfer详细解释
查看>>
java单链表的增、删、查操作
查看>>
The working copy at 'xxx' is too old 错误解决
查看>>
jadclipse
查看>>
// 1.什么是JOSN?
查看>>
SQL语句详细汇总
查看>>
如何保护.net中的dll文件(防破解、反编译)
查看>>
Python 装饰器
查看>>
Docker 网络模式
查看>>
[POI2013]Usuwanka
查看>>
problem-solving-with-algorithms-and-data-structure-usingpython(使用python解决算法和数据结构) -- 算法分析...
查看>>
nodejs + CompoundJS 资源
查看>>
转:C#并口热敏小票打印机打印位图
查看>>
scau 17967 大师姐唱K的固有结界
查看>>
spring之<bean>实例化
查看>>
hereim_美句_2
查看>>