码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • NER项目 P2 解析文字和实体标签对应关系


    主办方提供的数据是一些用brat标注的文件,.txt文件为原始文档,.ann文件为标注信息,标注实体以T开头,后接实体序号,实体类别,起始位置,结束位置和实体对应的文档中的词。

    因为标注文件的格式不是模型直接能用的,所以我们需要预处理一下,将单个字和标签做一一对应,生成一个新的带标注的文件。

    视频讲解:P2_解析文字和实体标签对应关系(1)_哔哩哔哩_bilibili

    预处理说明

    原始数据

    中国成人2型糖尿病HBA1C  c控制目标的专家共识

    标注文件格式

    T368 Disease 4 9 2型糖尿病
    T369 Test 9 14 HBA1C

    导出格式

    中,O
    国,O
    成,O
    人,O
    2,B-Disease
    型,I-Disease
    糖,I-Disease
    尿,I-Disease
    病,I-Disease
    ...

    代码示例

    1、配置项

    # config.py
    ORIGIN_DIR = './input/origin/'
    ANNOTATION_DIR = './output/annotation/'

    2、新建预处理文件

    # data_process.py
    from glob import glob
    import os
    import random
    import pandas as pd
    from config import *
    

    3、解析标签

    # 根据标注文件生成对应关系
    def get_annotation(ann_path):
        with open(ann_path) as file:
            anns = {}
            for line in file.readlines():
                arr = line.split('\t')[1].split()
                name = arr[0]
                start = int(arr[1])
                end = int(arr[-1])
                # 标注太长,可能有问题
                if end - start > 50:
                    continue
                anns[start] = 'B-' + name
                for i in range(start + 1, end):
                    anns[i] = 'I-' + name
            return anns

    4、一一对应

    def get_text(txt_path):
        with open(txt_path) as file:
            return file.read()
    
    # 建立文字和标签对应关系
    def generate_annotation():
        for txt_path in glob(ORIGIN_DIR + '*.txt'):
            ann_path = txt_path[:-3] + 'ann'
            anns = get_annotation(ann_path)
            text = get_text(txt_path)
            # 建立文字和标注对应
            df = pd.DataFrame({'word': list(text), 'label': ['O'] * len(text)})
            df.loc[anns.keys(), 'label'] = list(anns.values())
            # 导出文件
            file_name = os.path.split(txt_path)[1]
            df.to_csv(ANNOTATION_DIR + file_name, header=None, index=None)
    
    if __name__ == '__main__':
        # 建立文字和标签对应关系
        generate_annotation()
    

    本文为 陈华 原创,欢迎转载,但请注明出处:http://www.ichenhua.cn/read/389

  • 相关阅读:
    CMS之promotion failed&concurrent mode failure
    java基于springboot+vue的碳排放管理平台系统
    vue2配置路由及运行过程中遇到的问题
    base64图片的优缺点(雪碧图)
    opencv [c++] 连通域分析connectedComponentsWithStats() 和 connectedComponents()
    Node.js项目总结及常用技巧
    从零开始学习Dubbo3——Dubbo实现
    【 java 面向对象】基于文本界面的客户信息管理系统
    Redis 忽然变慢了如何排查并解决?
    Kubeadm 在线快速部署 1.23 单master集群 【实验用】
  • 原文地址:https://blog.csdn.net/sddqe/article/details/126273800
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号