使用 Python spacy 执行句子分割

pythonserver side programmingprogramming

执行句子分割是自然语言处理 (NLP) 中的一项重要任务。在本文中,我们将研究如何使用 spacy(一个强大的 NLP Python 库)实现句子分割。句子分割将文本记录的一部分拆分成单独的句子,为各种 NLP 应用程序奠定基础。我们将介绍三种方法:使用 spacy 预训练示例的基于规则的分割、使用自定义准备的基于机器学习的分割以及使用 spacy Matcher 类创建自定义分段。这些方法提供了灵活性和效率,允许开发人员在基于 Python 的 NLP 项目中有效地分割句子。

使用 Python spacy 执行句子分割

  • 简单集成 − spacy 以其速度和效率而闻名。它以智能性能为基础构建,并使用优化的算法,非常适合高效处理大量内容。

  • 高效快速 - spacy 为各种语言(包括英语)提供预训练模型,其中包含开箱即用的句子分割功能。这些模型是在大型语料库上准备的,并不断更新和改进,为您节省了从头开始准备句子模型的精力。

  • 预训练模型 - spacy 的预训练模型和词源规则根据重音、大写和其他语言特定符号精确区分句子边界。这确保了可靠的句子分割,即使在句子边界不是始终用句号表示的情况下也是如此。

  • 精确的句子边界 - spacy 允许您根据您的特定需求自定义和微调句子分割过程。您可以使用解释的数据准备自己的机器学习模型,或者使用 Matcher 类创建自定义规则来处理特定情况或特定领域的先决条件。

  • 可定制性 - 句子分割是许多 NLP 任务的关键步骤,例如词性标记、命名实体识别和语义分析

方法 1:基于规则的句子分割

算法

  • 我们将要研究的主要方法是使用 spacy 的基于规则的句子分割方法。

  • Spacy 提供了一个名为"en_core_web_sm"的预训练英语库,其中包含一个默认的句子分割器。

  • 这演示了如何使用一组规则根据重音和其他特定语言的提示来确定句子边界

示例

#pip install spacy
#python -m spacy download en_core_web_sm

import spacy

nlp = spacy.load("en_core_web_sm")

text = "这是第一句。这是第二句。这是第三句。"

doc = nlp(text)

sentences = [sent.text for sent in doc.sents]

for sentence in sentences:
    print(sentence)

输出

这是第一句。
这是第二句。
这是第三句。

方法 2:基于机器学习的句子分割

算法

  • 我们将要研究的第二个方法是使用 spacy 的基于机器学习的句子分割方法。

  • spacy 允许您使用解释的数据准备自定义句子分割器。

  • 要训练基于机器学习的句子分割器,我们需要一个使用句子边界进行物理注释的内容语料库

  • 语料库中的每个句子都应该标有开始和结束偏移量

示例

import spacy
from spacy.gold import GoldParse
from spacy.language import EntityRecognizer

nlp = spacy.load("en_core_web_sm")

text = "这是第一句。这是第二句。这是第三句。"

句子 = ["这是第一句。","这是第二句。","这是第三句。"]

注释 = [{"entities":[(0, 25)]}, {"entities":[(0, 26)]}, {"entities":[(0, 25)]}]


train_data = list(zip(sentences, annotations))
nlp.entity.add_label("SENTENCE")

other_pipes = [pipe for pipe in nlp.pipe_names if pipe != "ner"]

with nlp.disable_pipes(*other_pipes):
    optimizer = nlp.begin_training()

    for i in range(10):
        losses = {}

        for text, annotations in train_data:
            doc = nlp.make_doc(text)
            gold = GoldParse(doc, entities=annotations)
            nlp.update([gold], sgd=optimizer, losses=losses)

        print(losses)

doc = nlp(text)

sentences = [sent.text for sent in doc.sents]

for sentence in sentences:
    print(sentence)

输出

这是第一句。
这是第二句。
这是第三句。

结论

在本文中,我们研究了使用 Python 中的 spacy 执行句子分割的两种不同方法。我们从 Spacy 内置的基于规则的句子分割器开始,它提供了一种基于重音和特定于语言的规则来分割句子的有用方法。然后,我们研究了一种基于机器学习的方法,我们使用澄清的数据设置了一个自定义句子分割器。每种方法都有自己的偏好,可以根据您的 NLP 项目的需求进行连接。无论您想要一个简单的基于规则的分割器还是更高级的基于机器学习的解决方案,spacy 都能提供灵活性和控制力来有效地处理句子分割。 


相关文章