当前位置:   article > 正文

【数据集分析】NYT-Wiki关系抽取数据集分析(一)—— 理解单条实例_nyt数据集

nyt数据集

目录:NYT-Wiki数据集分析

【数据集分析】NYT-Wiki关系抽取数据集分析(一)—— 理解单条实例
【数据集分析】NYT-Wiki关系抽取数据集分析(二)—— 统计类别和实例数
【数据集分析】NYT-Wiki关系抽取数据集分析(三)—— 绘制Relation分布图

最近拿到一个关系抽取数据集,nyt-wiki,分析了一波分布、重合等,分享一下分析思路和代码。

1.单条实例分析

[’/m/0124gn1g’, ‘/m/02lx2r’, ‘trick’, ‘album’, ‘instance_of’, ‘utah saints pulls off a similar trick on its hit single, “something good,” the opening track on its eponymous debut album (london/plg 828 374-2; cd and cassette).’, ‘###END###’]

可以看到这一个instance的构成为:

[头实体id,尾实体id,头实体,尾实体,关系名,句子,终止记号]

一共包含七个部分,其中我们需要的是前六个部分。

我们很难记住list的序号对应的值的构成,因此将instance数据类型转化成dict,这样取数据时就会比较方便,dictkey值如下:

{“text”: , “relation”: , “h”: {“id”: , “name”: , “pos”: }, “t”: {“id”: , “name”: , “pos”: }}

这样我们在取数据时就直接用instance["text"]就可以直接取出数据,非常的方便,list转化dict后,一个instance如下:

{
    "text":"utah saints pulls off a similar trick on its hit single, "something good," the opening track on its eponymous debut album (london/plg 828 374-2; cd and cassette).",
    "relation":"instance_of",
    "h":{
        "id":"/m/0124gn1g",
        "name":"trick",
        "pos":[
            32,
            37
        ]
    },
    "t":{
        "id":"/m/02lx2r",
        "name":"album",
        "pos":[
            116,
            121
        ]
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

NOTE:

  1. instance的结构组成:由{句子,h,t}三部分。其中 h 和 t 也是dict,该dict包含三部分{id,name,pos}。
  2. 在 h 和 t 中我添加了一个pos,意义是头实体或者尾实体的在句子中的position。
  3. 其实dict类型可以用json相互转化,存储和读取比较规范。

2. 代码

import json
train_rel_fre_dict = {}
train_data = {}
temp1 = {}
temp2 = {}
with open("nytwiki_train.txt", 'w', encoding = 'utf-8') as f_op:
    with open("train.txt", 'r', encoding = 'utf-8') as f:
        lines = f.readlines()
        for line in lines:
            line = line.strip().split('\t') #loads后面字符串, load(文件名字)
            # 获取头(尾)实体在句子中的位置
            pos1 = [line[5].index(line[2]),line[5].index(line[2])+len(line[2])]
            pos2 = [line[5].index(line[3]),line[5].index(line[3])+len(line[3])]
            
            train_data['text'] = line[5]
            train_data['relation'] = line[4]
            temp1['id'] = line[0]
            temp1['name'] = line[2]
            temp1['pos'] = pos1
            train_data['h'] = temp1
            temp2['id'] = line[1]
            temp2['name'] = line[3]
            temp2['pos'] = pos2
            train_data['t'] = temp2
            json.dump(train_data, f_op)
            f_op.write('\n')
  • 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/羊村懒王/article/detail/712379
推荐阅读
相关标签
  

闽ICP备14008679号