使用 Spacy 在 Python 中进行自然语言处理2024年8月29日 | 阅读 8 分钟 NLP 和 SpaCy 简介自然语言处理(NLP)是人工智能领域,旨在使计算机能够理解人类语言。分析、测量、理解和推断自然语言的含义都是 NLP 的一部分。 注意:基于 Transformer 的 NLP 模型目前最有效。Google 的 BERT 和 Open AI 的 GPT 系列就是这类模型的例子。SpaCy 从 3.0 版本开始支持基于 Transformer 的模型。本课程中的示例使用了简化的、针对 CPU 优化的模型。但是,Transformer 模型可以就地执行这些示例。SpaCy 支持所有 Hugging Face Transformer 类型。 NLP 有多种应用,有助于从非结构化文本中提取洞察,包括:
SpaCy 是一个用 Cython 编写的 Python 开源 NLP 库。SpaCy 旨在简化通用自然语言处理或信息提取系统的构建。 SpaCy 安装本节介绍在虚拟环境中安装 spaCy,以及下载英语数据和模型。 使用 Python 包管理器 pip,您可以安装 spaCy。如果您想独立于系统范围的程序,使用虚拟环境是明智的。有关虚拟环境和 pip 的更多信息,请阅读 Python 虚拟环境:入门和使用 Python 的 pip 管理项目依赖项。 第一步是在新的虚拟环境中构建、激活并安装 spaCy。要了解如何选择您的操作系统,请查看下方。 您的虚拟环境已安装 spaCy,您几乎已准备好使用 NLP。但是,您还需要设置一些东西。 对于不同的语言,有几种 spaCy 模型。英语的首选模型是 encore web sm 模型。单独安装模型更好,因为它们占用大量空间——将所有语言打包在一起会太大。 在 encore web sm 模型下载完成后,打开 Python REPL 以确保安装成功。 如果这些行没有错误地执行,则 spaCy 已安装,并且模型和数据已正确下载。您现在已准备好使用 spaCy 探索 NLP! 文本处理的 Document 对象在本节中,您将使用 spaCy 分析提供的输入字符串并从文件中读取相同的文本。 首先,在 spaCy 中加载语言模型实例。 load() 函数返回的 Language 可调用对象通常分配给 NLP 变量。 您创建一个 Doc 对象,然后就可以开始处理数据了。词汇标记由一系列称为 Doc 对象的 Token 对象表示。每个 Token 对象都包含有关特定文本组件的详细信息,通常是一个单词。通过调用 Language 对象并将其输入字符串作为参数传递,您可以创建一个 Doc 对象。 输出 ['This,' 'tutorial,' 'is, ''about,' 'Natural,' 'Language,' 'Processing,' 'in,' 'spaCy,.' ''] 在上面的示例中,使用文本创建了一个 Doc 对象。从那里,您可以获取大量有关已分析文本的数据。 例如,您使用列表推导遍历 Doc 对象,生成了一个 Token 对象字符串。您在每个 Token 对象上使用了它们的 Text 属性来检索构成该 Token 的文本。 但是,您不会经常手动将文本粘贴到函数 Object() { [native code] } 中。您可能会从文件中读取它。 输出 ['This,' 'tutorial,' 'is, ''about,' 'Natural,' 'Language,' 'Processing,' 'in,' 'spaCy,.' '', '\n'] 在此示例中,您使用了 path lib。Path 对象的 Read text() 方法来读取 introduction.txt 文件的内容。您将获得相同的结果,因为该文件包含与上一个示例相同的数据。 句子检测查找每个文本中每个句子的开头和结尾称为句子检测。这使得将文本分成具有语言意义的单元成为可能。当您分析文本以执行命名实体识别和词性 (POS) 标记等活动时(您将在稍后的培训中学习),将使用这些单元。 使用 spaCy 中的 Doc 对象提取句子。句子质量。特定输入的句子总数和单个句子提取如下: 输出 Gus Proto is a Python... He is interested in learning... 在上面的示例中,spaCy 准确地识别了输入中的句子。sents 命令返回一个表示单个短语的 Span 对象列表。Span 项目也可以切割成片段以创建句子。 通过使用唯一的定界符,也可以修改句子检测行为。以下是除了句号(.)之外,省略号(...)如何用作定界符的示例: 输出 Gus, can you... never mind, I forgot what I was saying. So, do you think we should ... 在此示例中,您使用 @Language.component("set custom boundaries") 装饰器定义了一个接受 Doc 对象作为输入的新方法。此函数的职责是找到 Doc 中表示句子开头的标记,并将 .is sent start 属性设置为 True。然后该函数必须再次返回 Doc 对象。 然后,使用 .Add pipe() 方法;您可以将唯一的边界函数包含在 Language 对象中。现在,当使用此更改后的 Language 对象解析文本时,省略号后面的单词将被视为新句子的开头。 SpaCy 中的标记标记文本是构建 Doc 容器的一个步骤。标记化将文本分成其组成部分,或称为标记,在 spaCy 中表示为 Token 对象。 您已经看到,使用 spaCy,迭代 Doc 对象可以打印标记。但是,Token 对象还包含可以研究的其他功能。例如,Token 上的属性仍然支持 Token 在字符串中的原始索引位置。 输出 Gus 0 Proto 4 is 10 a 13 Python 15 developer 22 currently 32 working 42 for 50 a 54 London 56 - 62 based 63 Fintech 69 company 77 . 84 He 86 is 89 interested 92 in 103 learning 106 Natural 115 Language 123 Processing 132 . 142 为了输出 Token 和 .IDX 属性(表示 Token 在原始文本中的起点),您在此示例中迭代 Doc。此信息对于将来进行就地单词替换可能很有用。 像 spaCy 的许多其他功能一样,标记化过程可以修改以识别特殊字符上的标记。这通常用于连字符词,例如“London-based”。 要修改标记化,您必须向可调用 Language 对象的 tokenizer 属性添加一个新的 Tokenizer 对象。 考虑一个使用 @ 符号而不是标准连字符 (-) 连接单词的文本。这将帮助您理解正在发生的事情。因此,您有 London@based 而不是 London-based。 输出 ['for,' 'a', 'London@based,' 'Fintech,' 'company,'. '', 'He'] 如果您使用连字符而不是 @ 符号,您将在此示例中获得三个标记,而不是通常的解析,该解析将 London@based 文本视为单个标记。 如果您想使用 @ 符号作为自定义中缀,则必须创建自己的 Tokenizer 对象。 输出 ['for,' 'a', 'London,' '@,' 'based,' 'Fintech,' 'company'] 在此示例中,您首先创建一个新的 Language 对象。通常,在创建新的 Tokenizer 时,您会提供它:
从编译的正则表达式对象访问的正则表达式函数通常包含涉及的函数。如果您不想更改它们,可以使用第 5 到 10 行显示的默认值生成前缀和后缀的正则表达式对象。 要创建自定义中缀函数,您必须在第 12 行指定一个包含任何所需正则表达式模式的新列表。之后,您将列表连接到 Language 对象。属性 Defaults. Infixes 必须在连接前转换为列表。这样做将合并所有当前使用的中缀。然后,通过将扩展元组作为参数传递给 spacy.Util.compile infix regex(),您可以检索新的中缀正则表达式对象。 当调用 Tokenizer 函数 Object() { [native code] } 时,前缀、后缀和中缀正则表达式对象。Search() 方法 indefinite() 函数将作为参数传递。现在可以更改自定义 NLP 对象的标记器。 之后,您会注意到 @ 符号现在已单独标记。 |
| 自动化测试 人类在多次做同样的工作时会感到厌烦。我们总是在寻找克服它的方法。所以一个解决方案摆在我们面前:我们可以创建一些东西来做这种任务,...
阅读9分钟
联合图是一种理解两个变量之间关系以及每个变量个体分布的方式。联合图主要由三个独立的图组成,其中,中间的图用于查看关系...
阅读 6 分钟
Boost Python 模块是一个 C++ 库,可以实现 Python 和 C++ 之间的无缝互操作性。它提供了将 C++ 类和函数公开给 Python 的工具,允许它们像用 Python 编写的一样使用。使用 Boost Python,可以定义 C++ 类...
阅读 10 分钟
在本教程中,我们将探讨如何使用 PyQt5 开发用户表单。用户表单本质上是一个对话框,它在输入用户数据时为用户提供了额外的控制和易用性。有时有必要创建用户表单,而...
5 分钟阅读
在本教程中,我们将学习 Python 3.11 的全新激动人心的功能。Python 社区正在努力使 Python 变得更好并提高其性能。现在,他们在新版本中带来了全新且有用的功能和属性...
阅读 3 分钟
scikit-learn 的 linear_model 模块实现了普通最小二乘法 (OLS) 和 Ridge 回归。通过模型特征,您可以在使用 OLS 或 Ridge 回归拟合线性回归模型时获得估计的系数和方差。scikit-learn 的 LinearRegression 类可用于 OLS……
阅读 6 分钟
我们大多数人可能都知道,有许多网站不允许其用户将网站内容下载为 PDF 格式文件。相反,他们要么要求他们购买其服务的高级版本,要么不提供...
阅读 4 分钟
给定两个变量,如果一个变量的值依赖于另一个变量的值,我们说这些变量是相关的。两个变量之间关系的统计度量称为“相关性”。在这里,相互依赖的两个变量是...
阅读9分钟
我们都知道端口是什么以及它们如何与 URL 相关联,但我们中许多人可能从未听说过端口扫描器。基本上,端口扫描器是一种应用程序,旨在探测连接到...的主机或服务器。
阅读 6 分钟
使用等值线图可以有效地可视化地理空间数据。这些地图允许您通过使用不同的阴影或颜色来表示不同位置的不同值或数据类别,从而快速发现模式和趋势。然而,默认的等值线图大小可能并不总是...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India