当前位置:   article > 正文

命名实体识别ccks2020数据集的数据预处理

ccks2020数据集
文件结构

在这里插入图片描述

训练集和验证集处理

原始数据样例

5)房室结消融和起搏器植入作为反复发作或难治性心房内折返性心动过速的替代疗法。|||3    7    pro|||9    13    pro|||16    33    dis|||
(6)发作一次伴血流动力学损害的室性心动过速(ventriculartachycardia),可接受导管消融者。|||8    21    dis|||23    44    dis|||50    53    pro|||
4.第三类(1)无症状性WPW综合征患者,年龄小于5岁。|||8    17    dis|||
  • 1
  • 2
  • 3

处理后数据样例

( O
5 O
) O
房 B-pro
室 I-pro
结 I-pro
消 I-pro
融 E-pro
和 O
起 B-pro
搏 I-pro
器 I-pro
植 I-pro
入 E-pro
作 O
为 O
反 B-dis
复 I-dis
发 I-dis
作 I-dis
或 I-dis
难 I-dis
治 I-dis
性 I-dis
心 I-dis
房 I-dis
内 I-dis
折 I-dis
返 I-dis
性 I-dis
心 I-dis
动 I-dis
过 I-dis
速 E-dis
的 O
替 O
代 O
疗 O
法 O
。 O
( O
6 O
) O
发 O
作 O
一 O
次 O
伴 O
血 B-dis
流 I-dis
动 I-dis
力 I-dis
学 I-dis
损 I-dis
害 I-dis
的 I-dis
室 I-dis
性 I-dis
心 I-dis
动 I-dis
过 I-dis
速 E-dis
( O
v B-dis
e I-dis
n I-dis
t I-dis
r I-dis
i I-dis
c I-dis
u I-dis
l I-dis
a I-dis
r I-dis
t I-dis
a I-dis
c I-dis
h I-dis
y I-dis
c I-dis
a I-dis
r I-dis
d I-dis
i I-dis
a E-dis
) O
, O
可 O
接 O
受 O
导 B-pro
管 I-pro
消 I-pro
融 E-pro
者 O
。 O
4 O
. O
第 O
三 O
类 O
( O
1 O
) O
无 B-dis
症 I-dis
状 I-dis
性 I-dis
W I-dis
P I-dis
W I-dis
综 I-dis
合 I-dis
征 E-dis
患 O
者 O
, O
年 O
龄 O
小 O
于 O
5 O
岁 O
。 O
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124

处理代码

import os
import re


# 把re认为是一个正则表达式module

def get_data_lists(filepath):
    # 打开所要处理的文件
    # python的with open()函数,第一个参数是读取文件路径,第二个参数是读取方式('r':只读,'w':只写,'r+':读写均可,'a':可追加至文件末尾)
    # 第四个参数是指如果读取发生错误的处理方式
    with open(filepath, "r", encoding='utf-8', errors='ignore') as fp:
        text = fp.readlines()  # fp.readlines():返回的是由字符串构成的 list

    tag_lists = []
    word_lists = []

    for sent in range(len(text)):
        '''
        r''  告诉python这是一个原始字符串,将不处理转义序列(\n、\b 等)
        >>> print('\n') # 打印换行符   >>>print(r'\n') # 不处理转义序列\n
        >>> print('\b') # 打印退格字符 >>>print(r'\b') # 不处理转义序列\b
        
        re.findall(pattern, string, flags=0)

        pattern -->正则表达式

        string -->需要处理的字符串

        flags -->说明匹配模式
        '''
        # 对列表里的每个句子进行处理,获取标注信息labels和文本信息content
        labels = re.findall(r'(?<=\|\|\|).*?(?=\|\|\|)', text[sent])
        content = re.findall(r'.*?(?=\|\|\|)', text[sent])[0]
        # 将文本转化为单字序列
        word_list = [word for word in content]
        word_lists.append(word_list)

        # 生成标记序列
        tag_list = []
        begin = []
        end = []
        tags = []

        # begin包含所有实体的起始位置,end包含对应实体的结束为止,tags包含对应标注内容
        for j in range(len(labels)):
            pos = re.split(r'\s', labels[j])
            pos = [x for x in pos if x != '']
            begin.append(int(pos[0]))
            end.append(int(pos[1]))
            tags.append(pos[2])

        # 从文本第一个位置开始,生成标记序列
        idxb = 0
        for i in range(len(content)):
            if i in begin:
                idxb = begin.index(i)
                tag = 'B' + '-' + tags[idxb]
            elif (i > begin[idxb]) & (i < end[idxb]):
                tag = 'I' + '-' + tags[idxb]
            elif i == end[idxb]:
                tag = 'E' + '-' + tags[idxb]
            else:
                tag = 'O'
            tag_list.append(tag)
        tag_lists.append(tag_list)
    return tag_lists, word_lists


# 将数据写入新文件操作
def write_data(path, word_data, tag_data):
    new_word_data = []
    new_tag_data = []
    # 先处理成一维数组
    for line in word_data:
        for i in line:
            new_word_data.append(i)
    for line in tag_data:
        for i in line:
            new_tag_data.append(i)
    with open(path, "w", encoding="utf-8") as fw:  # 打开指定文件
        for i in range(len(new_word_data)):
            fw.write(new_word_data[i] + " " + new_tag_data[i] + "\n")  # 每行末尾添加换行符


if __name__ == '__main__':
    #训练集
    train_tag_lists, train_word_lists = get_data_lists('./raw_data/train_data.txt')
    write_data('./new_data/train.txt', train_word_lists, train_tag_lists)
    #验证集
    val_tag_lists, val_word_lists = get_data_lists('./raw_data/val_data.txt')
    write_data('./new_data/eval.txt', val_word_lists, val_tag_lists)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92

测试集处理

原始数据raw_data/test2.txt

处理后数据new_data/test2.txt
在这里插入图片描述

处理代码

import os
import re


# 把re认为是一个正则表达式module


def process_test_data(filepath, newpath):
    # 把原始数据处理成一维字序列
    testdata = []
    with open(filepath, "r", encoding='utf-8', errors='ignore') as fp:
        text = fp.readlines()
    for sent in range(len(text)):
        content = re.findall(r'.', text[sent])
        for word in content:
            testdata.append(word)
    # 写入文件
    with open(newpath, "w", encoding="utf-8") as fw:  # 打开指定文件
        for i in range(len(testdata)):
            fw.write(testdata[i] + "\n")


if __name__ == '__main__':

    process_test_data('./raw_data/test2.txt', './new_data/test2.txt')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/368003
推荐阅读
相关标签
  

闽ICP备14008679号