liuhuanyong / TextGrapher

Text Content Grapher based on keyinfo extraction by NLP method。输入一篇文档,将文档进行关键信息提取,进行结构化,并最终组织成图谱组织形式,形成对文章语义信息的图谱化展示。
1.37k stars 361 forks source link

将关键词与实体进行关系抽取的函数返回空列表 #3

Open BrambleXu opened 5 years ago

BrambleXu commented 5 years ago

text_grapher.py文件中,构建实体与关键词关系的函数返回的events_entity_keyword是空列表[] 通过查看函数的代码,发现问题可能出在这一行:keyword = [i[0] for i in keyword]

可以看到返回的结果是关键词的第一个字。这样得到的events是空列表。如果想要得到正常的结果的话,应该删除keyword = [i[0] for i in keyword]这一行。

请问我的理解对吗?想知道这里是不是bug,还是说有我没有想到的地方。


'''基于文章关键词,建立起实体与关键词之间的关系'''
def rel_entity_keyword( ners, keyword, subsent):
    events = []
    rels = []
    sents = []
    ners = [i.split('/')[0] for i in set(ners)]
    keyword = [i[0] for i in keyword]
    for sent in subsent:
        tmp = []
        for wd in sent:
            if wd in ners + keyword:
                tmp.append(wd)
        if len(tmp) > 1:
            sents.append(tmp)
    for ner in ners:
        for sent in sents:
            if ner in sent:
                tmp = ['->'.join([ner, wd]) for wd in sent if wd in keyword and wd != ner and len(wd) > 1]
                if tmp:
                    rels += tmp
    for e in set(rels):
        events.append([e.split('->')[0], e.split('->')[1]])
    return events

#将关键词与实体进行关系抽取
events_entity_keyword = rel_entity_keyword(ners, keywords, subsents_seg)
events += events_entity_keyword
BrambleXu commented 5 years ago

如果不添加events_entity_keyword,最后events里只有80多个元素,但是如果添加了的话,events会有600多个元素。画出图来太密集了,看起来很不方便。是因为这个原因才令events_entity_keyword为空列表吗?要是这样的话,也没有必要直接修改rel_entity_keyword吧。只要不写events += events_entity_keyword就行了。

CQUPTNLP commented 5 years ago

同样发现上面这个问题,楼上老哥解决了吗