为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁华开满天机 2021-12-16 15:08:22
我有如下代码: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("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] 或其他东西,但这是硬编码要走多远,我不知道我应该扩展索引多远。谢谢
查看完整描述

2 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

我发现 spacy 匹配器对匹配术语的索引进行排序,即使它发现术语列表中列出的术语早于另一个术语。所以我可以在下一个匹配的索引之前结束跨度。代码来显示我的意思:


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("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] = phrase


print(matched_phrases)


查看完整回答
反对 回复 2021-12-16
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

我有一个不使用 spaCy 的想法。


首先,我将字符串拆分为令牌


split = "Species:cat color:orange and white with yellow spots number feet: 4".replace(": ", ":").split()

然后我遍历令牌列表,保存键,然后将值合并到键中,因为有新键


goal = []

key_value = None

for token in split:

    print(token)

    if ":" in token:

        if key_value:

            goal.append(kv)

            key_value = token

        else:

            key_value = token

    else:

        key_value += " " + token

goal.append(key_value)

goal

>>>

['Species:cat', 'color:orange and white with yellow spots number', 'feet:4']


查看完整回答
反对 回复 2021-12-16
  • 2 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信