首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将NER导入spaCy

将NER导入spaCy
EN

Stack Overflow用户
提问于 2022-04-13 14:57:47
回答 1查看 485关注 0票数 1

我试图将我的NER数据导入到spaCy中。我使用了json格式,我认为这是spaCy所需要的。我的目标是训练一个实体识别系统,识别一个定制的实体集。下面是我正在使用的数据的一个小例子。

代码语言:javascript
复制
test =[{'datapoint_id': 0,
  'text': 'westleigh lodge care home, nel pan lane, leigh (wn7 5jt)',
  'entities': [[0, 25, 'building_name'],
   [27, 39, 'street_name'],
   [41, 46, 'city'],
   [48, 55, 'postcode']]},
{'datapoint_id': 1,
  'text': 'land at 2a gerard street, ashton in makerfield, wigan (wn4 9aa)',
  'entities': [(0, 4, 'unit_type'),
   (11, 24, 'street_name'),
   (48, 53, 'city'),
   (55, 62, 'postcode')]},
 {'datapoint_id': 2,
  'text': 'unit 111, timber wharf, worsley street, manchester (m15 4nz)',
  'entities': [(0, 4, 'unit_type'),
   (5, 8, 'unit_id'),
   (10, 23, 'building_name'),
   (24, 38, 'street_name'),
   (40, 50, 'city'),
   (52, 59, 'postcode')]}]

spacy入门课程https://course.spacy.io/en给出了如何将单个示例转换为spacy格式的指南,而不是大量的数据。

调用nlp(test[0])会导致输入“预期的字符串或'Doc‘,但得到:.”错误

调用!python -m spacy convert "/home/test.json" "/home/ouput/"会产生'KeyError:‘段落错误。

我能做到

代码语言:javascript
复制
doc = nlp(test[0]['text'])
gold_dict = test[0]['entities']
example = Example.from_dict(doc, {'entities':gold_dict})

example

然后循环创建一个示例列表,但这似乎不是正确的方法,我不知道如何处理结果列表。

我试着做

代码语言:javascript
复制
corpus = JsonlCorpus("/home/test.json")
nlp = spacy.blank("en")
data = corpus(nlp)
doc_bin = DocBin(docs=data)

但这似乎没有加载或保存数据集。

显然,加载数据必须非常直接的前言,但我不能这样做,任何帮助感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-14 04:40:51

为了训练数据,spaCy只需要像您想要的输出那样设置的文档,并保存在DocBin中。因此,对于您的情况,循环遍历数据和创建Docs是正确的做法。你可以用你的例子来做--创建代码并取出ex.reference文档(一个例子基本上只是两个文档,一个带注释,一个没有注释),尽管这不是唯一的方法。

请参阅文档的培训数据部分中的样本代码。它与数据的格式不完全相同,但非常相似。

代码语言:javascript
复制
import spacy
from spacy.tokens import DocBin

nlp = spacy.blank("en")
training_data = [
  ("Tokyo Tower is 333m tall.", [(0, 11, "BUILDING")]),
]
# the DocBin will store the example documents
db = DocBin()
for text, annotations in training_data:
    doc = nlp(text)
    ents = []
    for start, end, label in annotations:
        span = doc.char_span(start, end, label=label)
        ents.append(span)
    doc.ents = ents
    db.add(doc)
db.to_disk("./train.spacy")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71859650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档