Python - Преобразование распознавания именованных объектов с помощью тегов BILOU?

Я пытаюсь преобразовать NER с тегами BILOU, но есть немного документации о тегах BILOU, кроме того, что я нашел здесь. Я даже не могу найти реализацию в кодировании, кроме как в SpaCy, но только для английского языка. На этом сайте есть реализация кодирования тегов Conll IOB, которую я пытаюсь преобразовать в теги BILOU. От

[(Ирфан,PER),(Hanandra,PER),(Пратам,PER)]

в

[(Ирфан,B-PER),(Hanandra I-PER),(Пратам 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), (Ирфан,PER)]

когда это должно быть так

[(Siapa,U-QUEST),(Ирфан U-PER)

Где ошибка в моем алгоритме?

0 ответов

Другие вопросы по тегам