确定从 spacy 中提取的文本是否是一个完整的句子

Cra*_*ete 7 python nlp

我们正在研究从 PDF 中提取的句子。问题是它包括标题、页脚、目录等。有没有办法确定我们将文档传递给spacy时得到的句子是否是一个完整的句子。有没有办法过滤句子的某些部分,例如标题?

tkr*_*tkr 5

一个完整的句子至少包含一个主语、一个谓语、一个宾语,并以标点符号结束。主语和宾语几乎总是名词,谓语总是动词。

因此,您需要检查您的句子是否包含两个名词、一个动词并以标点符号结尾:

import spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("I. Introduction\nAlfred likes apples! A car runs over a red light.")
for sent in doc.sents:
    if sent[0].is_title and sent[-1].is_punct:
        has_noun = 2
        has_verb = 1
        for token in sent:
            if token.pos_ in ["NOUN", "PROPN", "PRON"]:
                has_noun -= 1
            elif token.pos_ == "VERB":
                has_verb -= 1
         if has_noun < 1 and has_verb < 1:
             print(sent.string.strip())
Run Code Online (Sandbox Code Playgroud)

更新

我还建议检查句子是否以大写字母开头,我在代码中添加了修改。此外,我想指出的是,我写的内容对于英语和德语来说都是正确的,我不知道其他语言的情况如何。

  • 这适用于简单的句子,但像“苹果和梨子味道不错。”这样的短语将被错误地识别为完整的句子。 (2认同)

rek*_*a18 0

尝试寻找每个句子中的第一个名词块。That is 通常(但并非总是)是句子的标题主语。

sentence_title = [chunk.text for chunk in doc.noun_chunks][0]
Run Code Online (Sandbox Code Playgroud)