我有一个正常的正则表达式模式,我想在标记NamedEntity Recognition并使用spacy查找它时使用。
我将此存储在通过.jsonl
方法读取的.from_disk
文件中
这是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
答案 0 :(得分:1)
我终于自己找到了解决方案,但是如果其他人遇到了,我将在此保留这个问题。
在这种情况下,正确的正则表达式应为"RAS?.+"
,它与RAS
之后的所有内容匹配。我在仔细阅读Spacy文档时发现的原因是:https://spacy.io/usage/rule-based-matching#regex
在本节中:使用REGEX运算符时,请记住,它对单个标记而不是整个文本进行操作。您提供的每个表达式都将在令牌上进行匹配。
由于我的文本已经被标记,所以直到下一个空格或非空格字符的结尾都没有。我已经有没有空格的令牌了。。。愚蠢的是,我之前没有注意到这一点,当时它被写为“重要说明:facepalm: