如何扩展匹配文本输出的空间范围以包含下一场比赛之前的所有内容?

我有如下代码:


data = u"Species:cat color:orange and white with yellow spots number feet: 4"

from spacy.matcher import PhraseMatcher

import en_core_web_sm

nlp = en_core_web_sm.load()


data=data.lower()

matcher = PhraseMatcher(nlp.vocab)



terminology_list = [u"species",u"color", u"number feet"]

patterns = list(nlp.tokenizer.pipe(terminology_list))

matcher.add("TerminologyList", None, *patterns)


doc = nlp(data)

for idd, (match_id, start, end) in enumerate(matcher(doc)):

    span = doc[start:end]

    print(span.text)

我希望能够抓住一切,直到下一场比赛。所以比赛看起来像这样:


种类:猫


颜色:橙色和白色,有黄色斑点


脚数:4


我试图延长跨度,但我不知道如何说在下一场比赛之前停止。我知道我可以让它像 span = doc[start:end+4] 或其他东西,但这是硬编码要走多远,我不知道我应该扩展索引多远。


谢谢


繁华开满天机
浏览 122回答 2
2回答

翻过高山走不出你

我发现 spacy 匹配器对匹配术语的索引进行排序,即使它发现术语列表中列出的术语早于另一个术语。所以我可以在下一个匹配的索引之前结束跨度。代码来显示我的意思:data = u"Species:cat color:orange and white with yellow spots number feet: 4"from spacy.matcher import PhraseMatcherimport en_core_web_smnlp = en_core_web_sm.load()data=data.lower()matcher = PhraseMatcher(nlp.vocab)terminology_list = [u"species",u"color", u"number feet"]patterns = list(nlp.tokenizer.pipe(terminology_list))matcher.add("Terms", None, *patterns)doc = nlp(data)matches=matcher(doc)matched_phrases={}for idd, (match_id, start, end) in enumerate(matches):    key_match = doc[start:end]    if idd != len(matches)-1:        end_index=matches[idd+1][1]    else:        end_index=len(doc)    phrase = doc[end:end_index]    if phrase.text != '':        matched_phrases[key_match] = phraseprint(matched_phrases)

慕标琳琳

我有一个不使用 spaCy 的想法。首先,我将字符串拆分为令牌split = "Species:cat color:orange and white with yellow spots number feet: 4".replace(": ", ":").split()然后我遍历令牌列表,保存键,然后将值合并到键中,因为有新键goal = []key_value = Nonefor token in split:    print(token)    if ":" in token:        if key_value:            goal.append(kv)            key_value = token        else:            key_value = token    else:        key_value += " " + tokengoal.append(key_value)goal>>>['Species:cat', 'color:orange and white with yellow spots number', 'feet:4']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python