从“London”出发,8步搞定自然语言处理(Python代码)

图灵汇官网

自然语言处理:计算机如何理解人类语言?

自然语言处理(NLP)是人工智能的一个重要分支,致力于使计算机能够理解并处理人类日常使用的语言。本文将用通俗易懂的语言介绍自然语言处理的基础知识,并通过Python实现几个有趣的应用实例。

NLP:理解语言的奥秘

NLP的工作原理是将非结构化的文本信息转换为结构化数据,从而使计算机能够理解和处理这些信息。本文旨在帮助读者理解NLP的基本机制,并提供实际操作指南。

计算机能否真正理解语言?

自从计算机问世以来,编程人员就一直试图让计算机理解人类语言。这是因为人类使用语言的历史悠久,如果计算机能够理解所有的语言信息,将会带来巨大的好处。尽管目前计算机还不能像人类一样真正理解语言,但在某些领域,NLP已经取得了显著的进展。

从文本中提取意义的挑战

阅读和理解语言是一项复杂的任务,计算机在处理语言时面临着诸多挑战。例如,下面这条新闻标题的含义是什么?

"Environmental regulators grill business owner over illegal coal fires."

环境监管机构就非法燃煤一事_企业主。(grill:追问,炙烤)

环境监管机构是在质疑企业存在非法燃煤行为,还是在烹饪企业主?可见,用计算机解析语言问题复杂。

构建NLP Pipeline

为了解决这些问题,我们通常采用管道(pipeline)方法。我们将问题分解成多个小部分,通过机器学习逐个击破,最终完成复杂任务。NLP同样如此,我们将文本理解过程分解成多个小块,逐一处理。

分句处理

第一步是将文本分割成单独的句子。例如:

  1. 伦敦是英格兰和英国的首府,也是英国人口最多的城市。
  2. 它位于大不列颠岛东南部的泰晤士河畔,2000年来一直是这一地区的主要定居点之一。
  3. 伦敦最初由罗马人建立,取名为伦蒂尼恩。

每个句子都是独立的单元,相比理解整段文字,理解单个句子要容易得多。

单词分词

接下来,我们对句子进行单词分词。例如:

"London is the capital and most populous city of England and the United Kingdom."

分割后的结果为:

“London”、“is”、“the”、“capital”、“and”、“most”、“populous”、“city”、“of”、“England”、“and”、“the”、“United”、“Kingdom”、“。”

通过空格分隔单词,标点符号也被视为单独的单元。

词性标注

然后,我们给每个单词加上词性标签,例如名词、动词等。这有助于我们理解句子的意义。

文本归一化

接下来,我们将单词还原为其基本形式,例如将“ponies”还原为“pony”。

停用词处理

有些词在文本中出现频率很高,但并没有太多实际意义,例如“and”、“the”等。我们把这些词称为停用词,并在分析前将其过滤掉。

句法分析

句法分析帮助我们了解句子中单词之间的关系。通过构建依存树,我们可以更清晰地理解句子结构。

命名实体识别

命名实体识别(NER)可以帮助我们识别文本中的特定实体,例如地点、人物等。

指代消解

指代消解则是解决代词问题,例如“它”指的是什么。这在处理长文本时非常重要。

实现NLP Pipeline的Python代码

通过Python和一些开源库(如spaCy和textacy),我们可以轻松实现上述功能。下面是一些示例代码:

```python import spacy

加载大型英语NLP模型

nlp = spacy.load('encoreweb_lg')

要分析的文本

text = """London is the capital and most populous city of England and the United Kingdom. Standing on the River Thames in the south east of the island of Great Britain, London has been a major settlement for two millennia. It was founded by the Romans, who named it Londinium."""

解析文本

doc = nlp(text)

打印所有检测到的命名实体

for entity in doc.ents: print(f"{entity.text} ({entity.label_})")

数据清洗

def replacenamewithplaceholder(token): if token.entiob != 0 and token.enttype == "PERSON": return "[REDACTED] " else: return token.string

def scrub(text): doc = nlp(text) for ent in doc.ents: ent.merge() tokens = map(replacenamewith_placeholder, doc) return "".join(tokens)

s = """ In 1950, Alan Turing published his famous article "Computing Machinery and Intelligence". In 1957, Noam Chomsky’s Syntactic Structures revolutionized Linguistics with 'universal grammar', a rule based system of syntactic structures. """

print(scrub(s))

提取事实

import textacy.extract

解析文档

doc = nlp(text)

提取半结构化陈述

statements = textacy.extract.semistructured_statements(doc, "London")

打印结果

print("Here are the things I know about London:") for statement in statements: subject, verb, fact = statement print(f" - {fact}") ```

通过这些步骤,我们可以从文本中提取有用信息,并进行多种操作,从而更好地理解和处理自然语言数据。

还可以做什么?

通过上述方法,你可以进一步探索NLP的各种应用,例如自动补全搜索建议、文本摘要、情感分析等。spaCy和textacy提供了丰富的工具和方法,可以帮助你实现这些功能。

本文来源: 图灵汇 文章作者: