命名实体识别:将自己标注的数据集转换成BIO格式的简单代码

我用的标注工具是YEDDA:https://github.com/jiesutd/YEDDA,挺好用的。

 右侧就是我自己修改的标签,实时保存很方便。他自己也带了转换的功能,如果符合你的要求可以用,我是想要BIO格式的,就自己敲了几行代码,一开始接触的同学可以借鉴嘻嘻。

import re

f = open("E:\命名实体识别实验数据\数据拆分\\train.txt.ann","r",encoding='utf-8')//插入自己的文件路径
line = f.readline()
line = line[:-1]
list2 = []
while line:
    line = f.readline()
    line = line[:-1]
    p5 = re.compile(r'[@||$](.*?)[#]', re.S)
    p6 = re.compile(r'[#](.*?)[*]', re.S)
    p7 = re.findall(p5, line)
    print(p7)
    p8 = re.findall(p6, line)
    print(p8)
    list1 = re.sub(r'[[](.*?)[]]', '+', line)
    # print(list1)
    sum = 0

    for str in list1:
        if str != '+':
            str = str + ' O'
            # print(str)
            list2.append(str)
        else:
            sum += 1
            a = 0
            if(len(p7)>sum - 1):
                for j in p7[sum - 1]:

                    if a == 0:
                        # print(j + ' B-' + p4[sum - 1])
                        list2.append(j + ' B-' + p8[sum - 1])
                    else:
                        # print(j + ' I-' + p4[sum - 1])
                        list2.append(j + ' I-' + p8[sum - 1])
                    a += 1
            else:
                print(p7)
                continue
# print(list)
with open("../gen/ner/train.txt","w",encoding='utf-8') as w:
    for i in list2:
        if(i!='  O')://如果为空不存
            if(i=='。 '+'O')://以句号断句
                w.write('\n')
            else:
                w.write(i)
                w.write('\n')

        else:
            continue

之前看有人找这种就分享下,写的垃圾勿喷 

  • 18
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 36
    评论
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值