我想将所有未被先前模式标记为"未知"的实体标记为"未知". 遗憾的是,实体统治者似乎并不关心所提供的模式的顺序:

import spacy
nlp = spacy.blank("en")
ruler = nlp.add_pipe("entity_ruler")
patterns = [
    {'label': 'Country', 'pattern': [{'lower': 'ger'}]},
    {'label': 'Unknown', 'pattern': [{'OP': '?'}]}
]
ruler.add_patterns(patterns)
doc = nlp('ger is a country')
print([(ent.text, ent.label_) for ent in doc.ents])

预期:

[('ger', 'Country'), ('is', 'Unknown'), ('a', 'Unknown'), ('country', 'Unknown')]

实际:

[('ger', 'Unknown'), ('is', 'Unknown'), ('a', 'Unknown'), ('country', 'Unknown')]

我如何才能确保模式按顺序匹配?

推荐答案

有几种方法可以做到这一点.一个简单的方法是使用两个EntiyRuler.默认情况下,第二个不会覆盖第一个设置的任何内容.

你也可以使用相对较新的带有定制过滤功能的SpanRuler,它总是偏爱"未知"实体.

Python相关问答推荐

使用polars .滤镜进行切片速度比pandas .loc慢

分组数据并删除重复数据

如何才能知道Python中2列表中的巧合.顺序很重要,但当1个失败时,其余的不应该失败或是0巧合

Matlab中是否有Python的f-字符串等效物

为什么符号没有按顺序添加?

在Polars(Python库)中将二进制转换为具有非UTF-8字符的字符串变量

如何获取TFIDF Transformer中的值?

"使用odbc_connect(raw)连接字符串登录失败;可用于pyodbc"

如何在Python脚本中附加一个Google tab(已经打开)

如何在turtle中不使用write()来绘制填充字母(例如OEG)

lityter不让我输入左边的方括号,'

如何杀死一个进程,我的Python可执行文件以sudo启动?

如何在两列上groupBy,并使用pyspark计算每个分组列的平均总价值

为什么调用函数的值和次数不同,递归在代码中是如何工作的?

关于两个表达式的区别

Discord.py -

如何将一组组合框重置回无 Select tkinter?

Pandas:将值从一列移动到适当的列

在round函数中使用列值

查找查找表中存在的列值组合