我试图从文本数据中提取一个短语。我目前正在使用基于空间规则的匹配。在我看到“Hiv-1 dna定量”这句话之前,这句话还不错,但没有被检测出来。我使用的模式如下面的代码所示
matcher = Matcher(nlp.vocab)
pattern = [{'LOWER': 'hiv'}, {"IS_PUNCT": True}, {"TEXT": {"REGEX":"\d{1,2}"}},
{'LOWER': 'dna'},
{'LOWER': 'quant'}]
matcher.add("HelloWorld", [pattern])
data = "probe Hiv-1 dna amp probe Hiv-1 dna quant Hiv-2 dna dir probe Hiv-2 dna"
doc = nlp(data)
matches = matcher(doc)
for match_id, start, end in matches:
string_id = nlp.vocab.strings[match_id] # Get string representation
span = doc[start:end] # The matched span
print(span.text)
我还尝试了以下模式
pattern = [{"LOWER": "hiv"}, {"IS_PUNCT": True}, {"LOWER":"1"}, {"LOWER": "dna"}, {"LOWER":"quant"}]
但是它没有检测到它
还有别的办法吗
当您遇到此类问题时,首先确保您了解Spacy如何标记字符串。看:
因此,您的
Hiv-1
是单个令牌。现在,您需要添加另一个模式来解释{'LOWER': 'hiv'}, {"IS_PUNCT": True}, {"TEXT": {"REGEX":"\d{1,2}"}}
可以是单个令牌这一事实。例如,它可以看起来像{'LOWER': {"REGEX":"^hiv[\W_]\d{1,2}$"}}
,其中小写标记文本必须匹配^hiv[\W_]\d{1,2}$
正则表达式你可以用
{}正则表达式表示
^
-字符串的开头(此处为标记)hiv
-hiv
文本[\W_]
-任何非字母数字字符\d{1,2}
-一位或两位数字$
-字符串的结尾(这里是token)李>见regex demo
相关问题 更多 >
编程相关推荐