我正在尝试定义一个正则表达式,用作我的 spaCy 模型中实体标尺组件中的文本模式。 目的是每当发现如下结构的单词时添加带有“COMP”标签的标记:
为此,我使用以下方法
def add_component_patterns_re(input_references, model_ruler):
ruler = model_ruler
ref_patterns = []
letters = ['V', 'B', 'F', 'K', 'S']
print("Adding component patterns")
for ref in input_references.iloc[:, 0]:
# print(f"Adding references for system: {ref}")
for letter in letters:
pattern_text = fr'{ref}(-| ){letter}[0-9]{{3}}'
pattern = {"TEXT": {"REGEX": fr'{ref}(-| ){letter}[0-9]{{3}}'}}
ref_patterns.append({"label":"COMP", "pattern":pattern})
ruler.add_patterns(ref_patterns)
return ref_patterns
打印出添加的图案,在我看来,输出列表是正确的。所以我的猜测是,在定义要添加到标尺的模式时我做错了。 有关信息,我还尝试将模式变量更改为列表条目,如下所示:
pattern = [{"TEXT": {"REGEX": fr'{ref}(-| ){letter}[0-9]{{3}}'}}]
但是结果是一样的,似乎无法得到任何匹配。
有人有什么建议吗?预先感谢!
AFAIK 在 NLP 三元组的上下文中意味着一系列 N 个单词(在本例中为 3 个)。
我认为在这种情况下不需要
{ref}
,假设你单元格中的值是 love like me-V123
取 {ref}
你最终会得到整个字符串,这不是你想要的,因为你是只对"love like me"
感兴趣
所以我会构建以下正则表达式,与您的情况相匹配:
\w+\s+\w+\s+\w+-[YVBFKS]\d{3}
-> 带“-”的正则表达式
\w+\s+\w+\s+\w+\s+[YVBFKS]\d{3}
-> 不带“-”的正则表达式
将这些全部应用到Python中我最终会得到:
import re
pattern = r"\w+\s+\w+\s+\w+-[YVBFKS]\d{3}"
labeled_tokens = []
for ref in input_references.iloc[:, 0]:
# Check if the token matches the pattern
if re.match(pattern, ref ):
labeled_tokens.append((ref, "COMP"))
else:
labeled_tokens.append((ref, None))