将NER训练数据转换为Spacy训练数据格式

问题描述

我正在使用 Spacy 创建印尼语 NER 模型。我正在使用来自 https://raw.githubusercontent.com/yohanesgultom/nlp-experiments/master/data/ner/training_data.txt

的训练数据

以上使用这种标签格式的训练数据:

Sementara itu Pengamat Pasar Modal <ENAMEX TYPE="PERSON">Dandossi Matram</ENAMEX> mengatakan,

我想将此训练数据转换为 Spacy 格式:

[('Sementara itu Pengamat Pasar Modal Dandossi Matram mengatakan,',{"entities:"([35,51,'PERSON'])})]

我还是 Python 库的新手,知道如何转换火车数据吗?或者有什么想法可以使用哪个库?

谢谢。

解决方法

对于简单的 XML 类型的注释,您可以使用 BeautifulSoup。这是一个带有稍微简单标记的示例:

from bs4 import BeautifulSoup

raw = "I went to <PLACE>Tokyo 3</PLACE> last year."
soup = BeautifulSoup(raw,features="html.parser")

out = ""
tags = []
idx = 0
for el in soup:
    text = el
    if hasattr(el,"text"):
        # it's a tag,save it
        text = el.text
        start = idx
        end = idx + len(el.text)
        tags.append( (el.name,start,end) )

    out += text
    idx += len(text)

print(out)
for tag in tags:
    print(tag[0],out[tag[1]:tag[2]],sep="\t")

一旦你有了这个示例代码给出的字符跨度,获取 spaCy 格式的数据就很简单了。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...