使用字符偏移量将已知匹配项添加到 Spacy 文档
Add known matches to Spacy document with character offsets
我想 运行 使用不同的 Spacy 工具对文档进行一些分析,尽管我对依赖匹配器特别感兴趣。
恰好对于这些文档,我已经有了一些难以解析的实体的字符偏移量。一个有点做作的例子:
from spacy.lang.en import English
nlp = English()
text = "Apple is opening its first big office in San Francisco."
already_known_entities = [
{"offsets":(0,5), "id": "apple"},
{"offsets":(41,54), "id": "san-francisco"}
]
# do something here so that `nlp` knows about those entities
doc = nlp(text)
我想过这样做:
from spacy.lang.en import English
nlp = English()
text = "Apple is opening its first big office in San Francisco."
already_known_entities = [{"offsets":(0,5), "id": "apple"}, {"offsets":(41,54), "id": "san-francisco"}]
ruler = nlp.add_pipe("entity_ruler")
patterns = []
for e in already_known_entities:
patterns.append({
"label": "GPE",
"pattern": text[e["offsets"][0]:e["offsets"][1]]
})
ruler.add_patterns(patterns)
doc = nlp(text)
这在技术上是可行的,它不是世界上最糟糕的解决方案,但我仍然想知道是否可以直接将偏移量添加到 nlp
对象。据我所知,Matcher docs 不会显示任何类似的内容。我也明白这可能与典型的 Matcher 行为有点不同,在典型的 Matcher 行为中,一个模式可以应用于语料库中的所有文档——而在这里我只想为特定文档标记特定偏移量的实体。一份文件的偏移不适用于其他文件。
您正在寻找 Doc.char_span.
doc = "Blah blah blah"
span = doc.char_span(0, 4, label="BLAH")
doc.ents = [span]
请注意,doc.ents
是一个元组,因此您不能附加到它,但您可以将其转换为列表并设置条目,例如。
我想 运行 使用不同的 Spacy 工具对文档进行一些分析,尽管我对依赖匹配器特别感兴趣。
恰好对于这些文档,我已经有了一些难以解析的实体的字符偏移量。一个有点做作的例子:
from spacy.lang.en import English
nlp = English()
text = "Apple is opening its first big office in San Francisco."
already_known_entities = [
{"offsets":(0,5), "id": "apple"},
{"offsets":(41,54), "id": "san-francisco"}
]
# do something here so that `nlp` knows about those entities
doc = nlp(text)
我想过这样做:
from spacy.lang.en import English
nlp = English()
text = "Apple is opening its first big office in San Francisco."
already_known_entities = [{"offsets":(0,5), "id": "apple"}, {"offsets":(41,54), "id": "san-francisco"}]
ruler = nlp.add_pipe("entity_ruler")
patterns = []
for e in already_known_entities:
patterns.append({
"label": "GPE",
"pattern": text[e["offsets"][0]:e["offsets"][1]]
})
ruler.add_patterns(patterns)
doc = nlp(text)
这在技术上是可行的,它不是世界上最糟糕的解决方案,但我仍然想知道是否可以直接将偏移量添加到 nlp
对象。据我所知,Matcher docs 不会显示任何类似的内容。我也明白这可能与典型的 Matcher 行为有点不同,在典型的 Matcher 行为中,一个模式可以应用于语料库中的所有文档——而在这里我只想为特定文档标记特定偏移量的实体。一份文件的偏移不适用于其他文件。
您正在寻找 Doc.char_span.
doc = "Blah blah blah"
span = doc.char_span(0, 4, label="BLAH")
doc.ents = [span]
请注意,doc.ents
是一个元组,因此您不能附加到它,但您可以将其转换为列表并设置条目,例如。