我想用以下模式匹配Spacy中的文本:
例如:
text=" Some texte about a company, company number: 254455, Dénomination\n (entire name): NAME_OF_THE_COMPANY , \n, some other informations of the... "
我想提取“ NAME_OF_COMPANY”,Spacy将其识别为实体MISC
要获取具有Spacy的实体,我要做:
for txt in text_file:
doc = nlp(txt)
for token_french in doc_french:
for ent in doc.ents:
print(ent.label_, ent.text)
但是后来我尝试了以下多种模式,但没有成功:
matcher=Matcher(nlp.vocab)
pattern = [{"REGEX" : "[D|d][é|e]nomination\s{0,}"},{"REGEX" : "[A-Za-z\n\r\s:)]{1,}"},{"ENT_TYPE" : "MISC"}]
matcher.add('company_name', None, pattern)
matches = matcher(doc)
答案 0 :(得分:0)
请记住以下几点:
模式中的每个字典对应一个令牌,没有空格。
您可以将任意数量的中间标记与{"OP": "*"}
匹配。
在开发新模式时,将validate=True
与Matcher()
结合使用会获得更多反馈。
我认为您的模式可能更像:
pattern = [{"LOWER": {"REGEX" : "d[é|e]nomination"}}, {"OP": "*"}, {"ENT_TYPE": "MISC"}]
“匹配器”会查看整个文档,因此,如果您的文档很长,则不仅会提供下一个MISC,而且还会提供带有“面额”的匹配项,后跟每个后续的MISC。您必须分别从结果中选择最短的匹配项。