在SpaCy中使用PhraseMatcher查找多种匹配类型

弗拉迪斯拉夫·多夫加莱克(Vladislav Dovgalec):

SpaCy文档和样本显示,PhraseMatcher类对于匹配文档中的标记序列很有用。必须提供将要匹配的序列的词汇表。

在我的应用程序中,我有一些包含标记和短语的文档。有不同类型的实体。数据是远程自然语言(文档是一组具有半随机顺序的关键字)。我正在尝试查找多种类型的匹配项。

例如:

yellow boots for kids

如何使用SpaCy的PhraseMatches查找颜色(例如黄色),产品类型(例如靴子)和年龄(例如孩子)的匹配项?这是一个好用例吗?如果不同的实体匹配重叠(例如,颜色在颜色列表和材料列表中匹配),是否可以产生所有唯一的情况?

我真的不能使用序列标记器,因为数据结构松散且充满歧义。我有一个实体列表(例如颜色,颜色,产品类型)和关联的值列表。

一种想法是实例化多个PhraseMatcher对象(每个实体一个),分别进行匹配,然后合并结果。每种实体类型都有自己的词汇表。这听起来很简单,但效率不高,尤其是合并部分。值列表相当大。在走这条路线之前,我想知道这是一个好主意还是使用SpaCy做到这一点的简单方法。

Ines Montani:

spaCy PhraseMatcher支持添加包含多个模式的多个规则,并为您添加的每个匹配器规则分配ID。如果两个规则重叠,则将返回两个匹配项。因此,您可以执行以下操作:

color_patterns = [nlp(text) for text in ('red', 'green', 'yellow')]
product_patterns = [nlp(text) for text in ('boots', 'coats', 'bag')]
material_patterns = [nlp(text) for text in ('silk', 'yellow fabric')]

matcher = PhraseMatcher(nlp.vocab)
matcher.add('COLOR', None, *color_patterns)
matcher.add('PRODUCT', None, *product_patterns)
matcher.add('MATERIAL', None, *material_patterns)

当您在matcher调用doc,spaCy将返回一个(match_id, start, end)元组列表因为spaCy将所有字符串存储为整数,所以match_id返回的字符串也将是整数–但是您始终可以通过在词汇表中查找它来获取字符串表示形式StringStore,即nlp.vocab.strings

doc = nlp("yellow fabric")
matches = matcher(doc)
for match_id, start, end in matches:
    rule_id = nlp.vocab.strings[match_id]  # get the unicode ID, i.e. 'COLOR'
    span = doc[start : end]  # get the matched slice of the doc
    print(rule_id, span.text)

# COLOR yellow
# MATERIAL yellow fabric

添加匹配器规则时,您还可以将on_match回调函数定义为的第二个参数Matcher.add如果您想触发特定的操作,这通常很有用–例如,如果COLOR找到匹配项,则做一件事,然后为PRODUCT匹配项做其他事情

如果您想更优雅地解决此问题,则可能还需要考虑将匹配器与自定义管道组件自定义属性结合使用例如,您可以编写一个简单的组件,当您调用nlp()文本,查找匹配项并设置Doc._.contains_productToken._.is_color属性时,该组件会自动运行文档中有一些示例,可以帮助您入门。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

spaCy PhraseMatcher与什么匹配?

最长匹配仅与Spacy Phrasematcher匹配

匹配多种可能的类型?

我可以在空手道中使用具有多种可能类型的模糊匹配器吗?

Spacy - 使用 PhraseMatcher 创建嵌套分类法

在Elasticsearch php API中使用多种类型或索引

如何在NSUserDefaults中使用(多种类型)保存数组

在D3树布局中使用多种链接类型

模式匹配中使用的抽象类型的类型不匹配

Spacy PhraseMatcher值错误码型长度(11)> =短语_匹配器。最大长度(10)

仅来自PhraseMatcher的Spacy实体

在 Ocaml 中使用类型查找 MAX

cleartool查找多种类型的文件

Scala多种类型模式匹配

匹配宏中的多种枚举类型

使用PATINDEX在SQL Server中使用多种格式在文本内查找时间

如何使用SpaCy Matcher(或PhraseMatcher)类提取2个项目的序列?

我可以使用Excel Match函数匹配多种类型的值

Spring Kafka在一个使用者中使用多种消息类型

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

如何匹配查找函数matlab中使用的矩阵元素数

在R中使用查找表匹配时间间隔

在spaCy中使用正则表达式:匹配各种(大小写不同的)单词

将SpaCy PhraseMatcher保存到磁盘

spacy:如何获得基于引理的 PhraseMatcher

PhraseMatcher匹配不同的令牌属性

在 .net 中使用 json 反序列化(多种类型)

是否可以在Flutter / Dart中使用多种类型创建列表?

在ListView中使用Django QuerySets实现多种类型的后端动态过滤器