教育领域中学数学NER数据集

本文探讨了信息技术推动下中学数学命名实体识别的重要性和数据集构建过程,包括数据来源、清洗、标注、格式转换,以及可供下载的数据资源,旨在支持智能化教育体系的发展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       信息技术的发展与进步促使“互联网+教育”成为目前教育领域的研究热点,教育教学的各个环节都在向智能化的方向发展。中学数学的命名实体识别任务的研究,可为后续构建中学数学学科知识图谱及自动问答等任务奠定基础,进而满足中学生个性化知识获取的需求,助力新型智能化教育体系的构建。

       相对于其他领域来讲,教育领域尤其是学科方面缺乏公开的数据集,故本人及团队从数据筛选到清洗以及标注,构建了中学数学实体识别数据集,数据量仍在充实和标注中,大家可以自由下载,历经磨难与痛苦,本着"授人以鱼不如授人以渔"的态度,本人也将数据构建过程和相关代码进行分享,如果本文提供的开源数据集对您的研究有很大帮助,请在引文引用本博文。

数据相关事项:

一、数据来源于百度文库、百度百科、维基百科等包含学科知识点的语句,以及人教版课本中关于知识点、例题描述等语句,整理成文档部分截图如下图所示。

二、文件中包含训练集train,验证集dev以及测试集test,全部按照BIO标注策略进行标注,数据构建过程如下。

1.文档处理

       所有语句文档需要进行拆分,每一句话独立成txt,拆分代码如下:

data = []
for line in open("C:\\Users\\Dell\\Desktop\\math\\all.txt","r",encoding='utf-8-sig'): #设置文件对象并读取每一行文件
    data.append(line)
    continue

# 创建一个txt文件生成函数,文件名为name + '.txt',并向文件写入msg

def text_create(name, msg):
    desktop_path = "C:\\Users\\Dell\\Desktop\\mathtxt\\"  # 新创建的txt文件的存放路径
    full_path = desktop_path + name + '.txt'  # 也可以创建一个.doc的word文档
    file = open(full_path, 'w',encoding="utf-8")
    file.write(msg)   #msg也就是下面的Hello world!
    file.close()

#循环将data里的每一个元素写入不同的txt文档
for i in data:
    text_create(str(data.index(i)), i)
    continue

2.标注

       所使用标注软件为精灵标注助手,选定标注文件夹(包含所有语句的txt文件夹),定义好实体即可进行标注,导入截图如下:

       标注示意图如下:

  3.导出

       标注后,导出格式选择brat-ann,导出后的文本格式截图如下。

4.格式转换

       ann文件需要转换成BIO格式进行训练,转化代码如下。

def bratann2BIO_format(text, ann_str, fstream):
    ann_list = ann_str.strip().split('\n')
    label = ['O' for _ in range(len(text))]
    for i, line in enumerate(ann_list):
        try:
            T, typ, word = line.strip().split('\t')
            t, s, e = typ.split()
            s, e = int(s), int(e)
            label[s] = 'B-' + t
            while s < e - 1:
                s += 1
                label[s] = 'I-' + t
        except:
            continue

    for t, l in zip(list(text), label):
        line = ' '.join([t, l])  # 可以使用空格代替
        fstream.write(line)
        fstream.write('\n')
    fstream.write('\n')

def gen_NER_training_data():
    # 设置标注文件所在文件夹目录
    root_dir = 'data/outputs'
    # 设置训练样本输出文件路径
    stream = open('data/out/test.txt', 'a+', encoding='utf8')
    file_list = glob.glob(root_dir + '/*.ann')
    for ann_path in file_list:
        ann_path = ann_path.replace('\\', '/')
        txt_path = ann_path.replace('/outputs', '').replace('ann', 'txt')
        try:
            ft = open(txt_path, 'r', encoding='utf8')
            text = ft.read().strip()
            ft.close()
            fa = open(ann_path, 'r', encoding='utf8')
            ann = fa.read().strip()
            fa.close()
            if ann == '':
                continue
            bratann2BIO_format(text, ann, stream)
        except Exception as e:
            print(ann_path, e)

    stream.close()

5.实体描述

       共包含两类实体:KNOW和PRIN,其中KNOW表示客观概念类,比如“集合”、“函数”等;PRIN表示法则定理类,比如“辗转相除法”、“韦达定理”等。部分数据展示如下图:

、数据下载

       数据压缩包已于文章顶部展示,内含readme文件解说了文件的数据量和划分标准,数据可以直接拿来训练和测试。

       注:因均为手工标注,虽然经过了筛查和检验,部分数据可能仍出现标注错误问题,读者可自行修改,也希望你留言告知我,我将做出进一步调整。

       非常感谢本次项目任老师对我的指导,以及师弟师妹们在本次项目中做出的贡献,尤其是昌霖师弟,每天与我忙到寝室门禁才结束工作,希望本博文可以给您的技术研究带来帮助。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值