繁体   English   中英

如何匹配 spacy 中的重复模式?

[英]How to match repeating patterns in spacy?

我有一个与这篇文章中提出的问题类似的问题: How to define a repeating pattern consisting of multiple tokens in spacy? 与链接的帖子相比,我的案例的不同之处在于我的模式是由 POS 和依赖标签定义的。 因此,我不认为我可以轻松地使用正则表达式来解决我的问题(正如链接帖子的接受答案中所建议的那样)。

例如,假设我们分析以下句子:

“她告诉我她的狗又大又黑又强壮。”

下面的代码可以让我匹配句子末尾的形容词列表:

import spacy # I am using spacy 2
from spacy.matcher import Matcher
nlp = spacy.load('en_core_web_sm')

# Create doc object from text
doc = nlp(u"She told me that her dog was big, black and strong.")

# Set up pattern matching
matcher = Matcher(nlp.vocab)
pattern = [{"POS": "ADJ"}, {"IS_PUNCT": True}, {"POS": "ADJ"}, {"POS": "CCONJ"}, {"POS": "ADJ"}]
matcher.add("AdjList", [pattern])


matches = matcher(doc)

运行此代码将匹配“big, black and strong”。 然而,这种模式不会在以下句子“她告诉我她的狗又大又黑”或“她告诉我她的狗又大又黑,强壮又好玩”中找到形容词列表。

我将如何为 spacy 的匹配器定义一个(单个)模式才能找到包含任意数量形容词的列表? 换句话说,我正在寻找一种模式的正确语法,其中部分{"POS": "ADJ"}, {"IS_PUNCT": True}可以在列表以模式{"POS": "ADJ"}, {"POS": "CCONJ"}, {"POS": "ADJ"}

感谢您的任何提示。

解决方案/问题与链接到的问题没有根本的不同,在这样的比赛中没有重复多令牌模式的设施。 您可以使用 for 循环构建多个模式来捕获您想要的内容。

patterns = []
for ii in range(1, 5):
    pattern = [{"POS": "ADJ"}, {"IS_PUNCT":True}] * ii
    pattern += [{"POS": "ADJ"}, {"POS": "CCONJ"}, {"POS": "ADJ"}]
    patterns.append(pattern)

或者你可以用依赖匹配器做一些事情。 在你的例句中它不是那么干净,但是对于像“这是一只大的,棕色的,顽皮的狗”这样的句子,形容词都有直接将它们连接到名词的依赖弧。

作为单独的说明,您不处理带有连续逗号的句子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM