spacy-模式匹配

鞋子

我想尝试看看如何使用spaCy模式匹配来查找文本中已引用的产品类别。我显然没有正确地构造它。

我想将CAT-POS-2299确定为产品。我尝试了几种不同的变体。您将如何寻找甚至更通用的模式CAT-???-???

也许我应该使用其他东西?

码:

from spacy.matcher import Matcher

nlp = spacy.load("en_core_web_sm")
matcher = Matcher(nlp.vocab)

matcher.add("Product", None,
            [{"LOWER": "CAT"},{"LOWER":"-"},{"LOWER":"POS"},{"LOWER":"-"},{"IS_DIGIT":True}]
           )

doc = nlp(" We have a new product CAT-POS-2299 that will be available to users soon.")
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(match_id, string_id, start, end, span.text)```
维克多·史翠比维

如果检查输入字符串的标记方式,您将看到它POS-2299来自单个标记:

print([t.text for t in doc])
[' ', 'We', 'have', 'a', 'new', 'product', 'CAT', '-', 'POS-2299', 'that', 'will', 'be', 'available', 'to', 'users', 'soon', '.']

因此,如果您打算以CAT不区分大小写的方式匹配单词,然后匹配一个-令牌,然后匹配所有ASCII字母后缀的单词-以及一个或多个数字,则可以使用

matcher.add("Product", None, [{"TEXT": {"REGEX": "(?i)CAT"}},{"TEXT":"-"},{"TEXT": {"REGEX": r"(?i)[A-Z]+-\d+"}}])
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(match_id, string_id, start, end, span.text)

# => 16898055450696666743 Product 6 9 CAT-POS-2299

由于您正在寻求使模式更加通用,因此我认为使用REGEX令牌是有意义的。

注意

  • (?i)CAT-CAT不区分大小写的方式匹配
  • (?i)[A-Z]+-\d+-[A-Z]以不区分大小写的方式((?i)匹配任意一个或多个字母(,然后-匹配一个或多个数字(\d+)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spacy模式匹配器。“ IN”是什么意思?

来自分类Dev

Python中的NLP spaCy匹配器中的模式顺序问题

来自分类Dev

Spacy中的模式

来自分类Dev

有没有一种基于规则的spacy匹配模式匹配方法?

来自分类Dev

如何在Spacy中为匹配器添加多个模式

来自分类Dev

python regex或带有spacy模式匹配的单个字符

来自分类Dev

SpaCy:仅匹配多个模式的第一个实例

来自分类Dev

最长匹配仅与Spacy Phrasematcher匹配

来自分类Dev

具有spacy的POS模式挖掘

来自分类Dev

基于SpaCy规则的Hello World的短语匹配

来自分类Dev

数字名词/数字名词的spacy匹配器

来自分类Dev

在JSON中使用正则表达式时正确进行转义(尝试创建spaCy模式匹配文件)

来自分类Dev

spacy规则匹配器从匹配语句中提取值

来自分类Dev

如何避免使用Matcher在SpaCy中重复提取重叠模式?

来自分类Dev

Spacy Matcher-仅匹配最长的字符串

来自分类Dev

spaCy:自定义属性匹配不正确?

来自分类Dev

一行中的所有匹配项:Spacy匹配器

来自分类Dev

如何使用正则表达式使用Spacy短语匹配器提取IP地址

来自分类Dev

如何使用python spacy matcher匹配类型为(0)20 111 2222的电话号码

来自分类Dev

与spaCy的搭配

来自分类Dev

匹配字模式与字符模式

来自分类Dev

跨度和模式匹配

来自分类Dev

功能参数的模式匹配

来自分类Dev

匹配模式并替换

来自分类Dev

Lambda内部的模式匹配

来自分类Dev

模式匹配::案例类

来自分类Dev

打印匹配模式的单词

来自分类Dev

模式匹配与警卫混合

来自分类Dev

ule ::模式匹配