繁体   English   中英

如何正确地向 jsonl 文件添加 spacy 正则表达式模式

[英]How to add correctly spacy regex patterns to jsonl file

我有一个工作正则表达式模式,我想用它来标记 NamedEntity Recognition 并使用 spacy 找到它。 我将其存储在使用.from_disk方法读取的.jsonl文件中

这是 python 中的一个工作示例:

import re
pattern = '(RAS?[\S]+)' # I want to find all strings starting with RAS and ending right before space or similar character
words = ['RAS', 'RAS', 'su RAS s:', 'SuRASs:', 'suRASs dfas:', 'raSan']
[re.findall(pattern, x) for x in words]

Out[7]: [['RAS'], ['RAS'], ['RAS'], ['RASs:'], ['RASs'], []]

但是当我尝试在 jsonl 文件中使用正则表达式模式并将其添加到 NamedEntityRecognizer 时,出现错误:

ValueError: Invalid JSON on line 1: {"label": "REFERENCE_TLC", "pattern": [{"TEXT": {"REGEX": "(RAS?[\S]+)"}}]}

你知道 spacy 是否有一些限制是使用正则表达式?

因为当我使用这个正则表达式(RAS)时,它可以工作,但找不到我需要的案例

这是他们文档中的官方spacy正则表达式示例,但对我没有帮助: https://spacy.io/usage/rule-based-matching#regex

我终于自己找到了解决方案,但如果它发生在其他人身上,我会把这个问题留在这里。

这种情况下的正确正则表达式应该是"RAS?.+" ,它匹配RAS之后的所有内容。 我在更仔细地阅读 spacy 文档时发现的原因: https://spacy.io/usage/rule-based-matching#regex

从本节开始:使用 REGEX 运算符时,请记住它对单个标记进行操作,而不是对整个文本进行操作。 您提供的每个表达式都将在令牌上匹配。

由于我的文本已经被标记化,因此直到下一个空格或直到非空格字符的结尾都不存在。 我已经有没有空格的标记......我很傻,因为之前没有注意到这一点,当它被写为重要注意事项时:facepalm:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM