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

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

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

 右侧就是我自己修改的标签,实时保存很方便。他自己也带了转换的功能,如果符合你的要求可以用,我是想要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

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

你可能感兴趣的:(命名实体识别:将自己标注的数据集转换成BIO格式的简单代码)