python - 确定从 spacy 中提取的文本是否是完整的句子
问题描述
我们正在处理从 PDF 中提取的句子。问题是它包括标题、页脚、目录等。有没有办法确定我们在将文档传递给 spacy 时得到的句子是否是一个完整的句子。有没有办法过滤部分句子,如标题?
解决方案
一个完整的句子至少包含一个主语、一个谓语、一个宾语,并以标点符号结尾。主语和宾语几乎总是名词,谓语总是动词。
因此,您需要检查您的句子是否包含两个名词、一个动词并以标点符号结尾:
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())
更新
我还建议检查句子是否以大写字母开头,我在代码中添加了修改。此外,我想指出我写的对英语和德语是正确的,我不知道它在其他语言中的情况如何。
推荐阅读
- javascript - 如何使用 React + Redux 持久化收藏的项目
- python - 使用 Selenium 抓取 JSON 响应
- java - 关于扫描仪方法的问题 - 多个令牌
- python-3.x - 在 for 循环中加速 Keras 顺序模型
- c++ - 我无法让我的代码以 7 的步幅正常工作 C++
- c++ - 为什么即使我的系统有 `/usr/lib/libglfw.so.3` 文件,`ld` 也找不到`glfw3`?
- javascript - 尝试学习 Firebase。我正在关注“了解 Web 版 Firebase”代码实验室,但并没有走得太远
- c++ - 如何将带有捕获和参数的 lambda 传递给 Qt 的连接
- vscode-extensions - 在远程 SSH 服务器上使用“C/C++ Makefile Project”扩展
- flutter - 从共享首选项获取数据后如何重新加载元素?