我问了一个类似的问题:我的post标签和我的in this post个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"她告诉我她的狗又大又黑又壮.")

# 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)

运行此代码将匹配"大、黑、强".她告诉我"不管怎样,她会在下面的黑狗的形容词列表中发现"她说"黑狗很强".

为了找到这样一个包含任意数量形容词的列表,我必须如何为spacy的matcher定义一个(单一)模式?换句话说,我正在寻找一个模式的正确语法,其中第{"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)

或者,您可以使用依赖项匹配器进行一些操作.在你的例句中,它没有那么干净,但对于"它是一只大的、棕色的、顽皮的狗"这样的句子,形容词都有依赖弧,直接将它们与名词连接起来.

另外请注意,你不是在处理带有逗号的句子.

Python相关问答推荐

Python中是否有方法从公共域检索搜索结果

有条件地采样我的大型DF的最有效方法

如何从具有多个嵌入选项卡的网页中Web抓取td类元素

返回nxon矩阵的diag元素,而不使用for循环

更改matplotlib彩色条的字体并勾选标签?

在Python Attrs包中,如何在field_Transformer函数中添加字段?

如何制作10,000年及以后的日期时间对象?

C#使用程序从Python中执行Exec文件

我们可以为Flask模型中的id字段主键设置默认uuid吗

将tdqm与cx.Oracle查询集成

Plotly Dash Creating Interactive Graph下拉列表

如何在Python中使用Pandas将R s Tukey s HSD表转换为相关矩阵''

lityter不让我输入左边的方括号,'

如何在达到end_time时自动将状态字段从1更改为0

基于形状而非距离的两个numpy数组相似性

Flask Jinja2如果语句总是计算为false&

30个非DATETIME天内的累计金额

有没有办法在不先将文件写入内存的情况下做到这一点?

Pandas在rame中在组内洗牌行,保持相对组的顺序不变,

如何在信号的FFT中获得正确的频率幅值