如何将正确的spacy regex模式正确添加到jsonl文件

时间:2020-07-02 14:58:18

标签: python regex spacy

我有一个正常的正则表达式模式,我想在标记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

1 个答案:

答案 0 :(得分:1)

我终于自己找到了解决方案,但是如果其他人遇到了,我将在此保留这个问题。

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

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

由于我的文本已经被标记,所以直到下一个空格或非空格字符的结尾都没有。我已经有没有空格的令牌了。。。愚蠢的是,我之前没有注意到这一点,当时它被写为“重要说明:facepalm: