如何使用spaCy提取包含关键词组的句子

4
我曾使用过Spacy,到目前为止,我发现其在自然语言处理方面非常直观和强大。 我正在尝试制作文本句子搜索,它既是基于单词也是基于内容类型的搜索,但到目前为止,我没有找到任何使用Spacy的解决方案。
我有如下文本: 在计算机科学中,人工智能(AI),有时称为机器智能,是由机器展示的智能,不同于人类和动物展示的自然智能。领先的AI教科书将该领域定义为“智能代理”的研究:任何感知其环境并采取行动以最大化成功实现其目标的设备[1]。口语上,术语“人工智能”通常用于描述模仿与人类思维相关的“认知”功能(例如“学习”和“问题解决”)的机器(或计算机)。[2]
随着机器变得越来越有能力,被认为需要“智能”的任务经常从AI的定义中删除,这种现象称为AI效应[3]。特斯勒定理中的一个俏皮话说:“AI是尚未完成的任何事情。”[4]例如,光学字符识别经常被排除在被认为是AI的事物之外[5],因为它已经成为一种例行技术[6]。现代机器的能力通常被归类为AI,包括成功理解人类语音[7],在战略游戏系统中(如象棋和围棋)竞争[8],自主驾驶汽车,在内容交付网络中进行智能路由和军事模拟[9]。
人工智能于1955年作为一门学科创立,在此后的几年中经历了几波乐观主义[10][11],随后失望和资金损失(称为“AI寒冬”)[12][13],然后是新的方法、成功和再次获得资金[11][14]。在其大部分历史上,AI研究一直分为子领域,这些子领域经常无法相互沟通[15]。这些子领域基于技术考虑,例如特定目标(例如“机器人学”或“机器学习”)[16],使用特定工具(“逻辑”或人工神经网络),或者存在深刻的哲学差异[17][18][19]。子领域也基于社会因素(特定机构或特定研究人员的工作)[15]。
现在,我希望提取多个完整的句子,这些句子包含多个单词或字符串匹配。例如,我想搜索intelligentmachine learning,并打印出所有包含这两个给定字符串的完整句子。
是否有任何方法,导入Spacy模型,使用它可以检测短语匹配,例如查找所有包含智能和机器学习的单词并打印出来?同时,是否还可以以搜索机器学习的方式,提示深度学习、人工智能、模式识别等?
import spacy
nlp = spacy.load("en_core_web_sm")
from spacy.matcher import PhraseMatcher
phrase_matcher = PhraseMatcher(nlp.vocab)

phrases = ['machine learning', ''intelligent, 'human']

patterns = [nlp(text) for text in phrases]

phrase_matcher.add('AI', None, *patterns)

sentence = nlp (processed_article)

matched_phrases = phrase_matcher(sentence)

for match_id, start, end in matched_phrases:
    string_id = nlp.vocab.strings[match_id]  
    span = sentence[start:end]                   
    print(match_id, string_id, start, end, span.text)

我尝试过使用这个方法,但是它只提供了包含匹配ID号码的单词而不是完整的句子。

简而言之,

  1. 我正在尝试使用多个单词输入进行搜索,并找到完整的句子,这些句子包含任一输入单个字符串或所有字符串。
  2. 我正试图使用训练模型来找出建议的句子。

我怎样才能知道原始句子中所有短语的起始和结束索引? - Madhur Yadav
2个回答

5
我可以帮您找到包含给定字符串的完整句子,这与智能技术和机器学习有关。请注意,句子边界是通过统计分析确定的,因此,如果输入段落来自新闻或维基百科,它将能够很好地工作,但如果数据来自社交媒体,则效果可能不佳。
import spacy
from spacy.matcher import PhraseMatcher

text = """I like tomtom and I cannot lie. In computer science, artificial intelligence (AI), sometimes called machine intelligence, is intelligence demonstrated by machines, unlike the natural intelligence displayed by humans and animals.  Leading AI textbooks define the field as the study of "intelligent agents": any device that perceives its  environment and takes actions that maximize its chance of successfully achieving its goals.[1] Colloquially,  the term "artificial intelligence" is often used to describe machines (or computers) that mimic "cognitive"  functions that humans associate with the human mind, such as "learning" and "problem solving".[2] """

nlp = spacy.load("en_core_web_sm")

phrase_matcher = PhraseMatcher(nlp.vocab)
phrases = ['machine learning', 'artificial intelligence']
patterns = [nlp(text) for text in phrases]
phrase_matcher.add('AI', None, *patterns)

doc = nlp(text)

for sent in doc.sents:
    for match_id, start, end in phrase_matcher(nlp(sent.text)):
        if nlp.vocab.strings[match_id] in ["AI"]:
            print(sent.text)

输出

In computer science, artificial intelligence (AI), sometimes called machine intelligence, is intelligence demonstrated by machines, unlike the natural intelligence displayed by humans and animals.  
Colloquially,  the term "artificial intelligence" is often used to describe machines (or computers)

第二部分:

它是否也可以像搜索机器学习一样,还建议深度学习、人工智能、模式识别等内容?

是的。完全可以做到这一点,您需要使用 word2vecsense2vec


我怎样才能知道原始句子中所有短语的起始和结束索引? - Madhur Yadav

0
在spaCy中,你可以使用命名实体识别(NER)来提取包含关键短语的句子。首先,加载spaCy模型。然后,分析你的文本。遍历检查句子并使用NER来识别实体。如果一个对象与你的关键短语匹配,提取一个类似的句子。这样,spaCy可以帮助你在文本数据中找到包含特定关键短语的句子。

2
欢迎来到SO。这个问题很久以前就解决了,并且得到了明确的共识。在这种情况下,请进一步解释一下你的回答是如何补充已被接受的回答的。以它目前的状态来看,应该是一条评论。当你获得评论权限时,你可以将其转换为一条评论。 - undefined
谢谢,我不得不使用它来强制将一些标记与一些数组对齐,并跳过缺失的项目或行。对于这个目的,它对我进一步的使用非常有效。如果这是你的问题,或者如果有任何疑问,请随时提问,我将很乐意回答并提供帮助。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接