Python-使用BILOU标签转换命名实体识别?

时间:2018-07-07 11:00:56

标签: python text-mining tagging named-entity-recognition text-chunking

我正在尝试使用BILOU标签转换NER,但是除了我在here中找到的内容之外,几乎没有关于BILOU标签的文档。除了SpaCy外,我什至找不到编码实现,而仅针对英语。我尝试将site的Conll IOB标签编码实现为BILOU标签。 来自

  

[((Irfan,PER),(Hanandra,PER),(Pratama,PER)]

进入

  

[((Irfan,B-PER),(Hanandra,I-PER),(Pratama,L-PER)]

这是我的代码:

def to_bilou(teranotisasi):
#print(teranotisasi)
proper_bilou_token = []
for idx, teranotisasi_token in enumerate(teranotisasi):
    kata, tag, ner = teranotisasi_token
    if ner != 'O':
        nersesudah = teranotisasi[idx+1][2]
        nersebelum = teranotisasi[idx-1][2] 
        if idx == 0:
            if nersesudah != ner:
                ner = "U-" + ner
        elif nersebelum == 'O':
            if nersesudah == 'O':
                ner = "U-" + ner
            elif nersesudah == ner:
                ner = "B-" + ner
        elif nersebelum == ner:
            if nersesudah == 'O':
                ner = "L-" + ner
            else:
                ner = "I-" + ner
        # elif nersebelum != ner:
            # if nersesudah == 'O':
                # ner = "U-" + ner
    proper_bilou_token.append((kata, tag, ner))
return proper_bilou_token

但是当两个不同的NER标签相遇(不是O)时会出现问题,例如 LOC符合PER LOC符合ORG 时,它就不会使用BILOU标签进行编码

  

[(Siapa,QUEST),(Irfan,PER)]

什么时候应该这样

  

[(Siapa,U-QUEST),(Irfan,U-PER)

我的算法中的错误在哪里?

0 个答案:

没有答案