Python 中分词的 5 种简单方法


分词是将字符串分割成标记或“更小片段”的过程。在自然语言处理 (NLP) 的上下文中,标记通常是单词、标点符号和数字。分词是许多 NLP 任务的重要预处理步骤,因为它允许您处理单个单词和符号,而不是原始文本。

在本文中,我们将介绍在 Python 中执行分词的五种方法。我们将从最简单的方法开始,使用 split() 函数,然后继续使用 nltk、re、string 和 shlex 等库和模块进行更高级的技术。

使用 split() 方法

split() 方法是 Python 的 str 类的一个内置函数,它允许您根据指定的定界符将字符串分割成子字符串列表。以下是如何使用它的示例:

text = "This is a sample text"
tokens = text.split(" ")
print(tokens)

此代码将在空格字符上分割字符串 text,生成的标记将是

['This', 'is', 'a', 'sample', 'text'].

您还可以通过将字符串列表传递给 split() 方法来指定多个定界符。例如:

text = "This is a sample, text with punctuation!"
tokens = text.split([" ", ",", "!"])
print(tokens)

这将在空格、逗号和感叹号上分割字符串 text,生成的标记为 ['This', 'is', 'a', 'sample', '', 'text', 'with', 'punctuation', '']. 请注意,定界符也作为空字符串包含在标记列表中。

split() 方法的一个限制是它只允许您根据一组固定的定界符分割字符串。如果您想根据更复杂的模式(例如单词或数字)分割字符串,则需要使用更高级的技术。

使用 nltk 库

自然语言工具包 (nltk) 是一个流行的 Python 库,用于处理人类语言数据。它提供了几个分词函数,可用于根据各种标准将字符串分割成标记。

要使用 nltk 库,您需要先安装它。您可以通过运行以下命令来执行此操作:

pip install nltk

安装 nltk 后,您可以使用 word_tokenize() 函数根据单词边界将字符串分割成标记:

import nltk
text = "This is a sample text"
tokens = nltk.word_tokenize(text)
print(tokens)

这将产生与上面 split() 方法相同的结果。

nltk 库还提供了一些其他的分词函数,例如 sent_tokenize(),它将文本分词成句子。

示例

让我们看一个例子:

from nltk.tokenize import sent_tokenize

# Define the text to be tokenized
text = "This is an example sentence for tokenization. And this is another sentence"

# Tokenize the text into sentences
sentences = sent_tokenize(text)

print(sentences)

输出

这将输出一个句子列表:

['This is an example sentence for tokenization.', 'And this is another sentence']

示例

我们还可以使用 nltk.tokenize 模块中的 word_tokenize() 方法对文本进行分词,如下所示:

from nltk.tokenize import word_tokenize
# Define the text to be tokenized
text = "This is an example sentence for tokenization."
# Tokenize the text into words
words = word_tokenize(text)
print(words)

输出

这也会输出一个单词列表:

['This', 'is', 'an', 'example', 'sentence', 'for', 'tokenization', '.']

如您所见,word_tokenize() 方法将文本分词成单个单词,就像 nltk.word_tokenize() 方法一样。

示例

NLTK 库还提供了一个名为 TweetTokenizer 的类,该类专门用于对推文(社交媒体平台 Twitter 上的短文本消息)进行分词。它的工作方式类似于 word_tokenize() 方法,但它考虑了推文的特定功能,例如标签、提及和表情符号。

以下是如何使用 TweetTokenizer 的示例:

import nltk 

# Download the NLTK tokenizer 
nltk.download('punkt')

from nltk.tokenize import TweetTokenizer

# Define the text to be tokenized
tweet = "This is an example tweet with #hashtag and @mention. 😊"

# Create a TweetTokenizer object
tokenizer = TweetTokenizer()

# Tokenize the text
tokens = tokenizer.tokenize(tweet)
print(tokens)

输出

它将产生以下输出:

['This', 'is', 'an', 'example', 'tweet', 'with', '#hashtag', 'and', '@mention', '😊']

如您所见,TweetTokenizer 不仅将文本分词成单个单词,而且还将标签和提及保留为单独的标记。此外,它可以处理推文中常用的表情符号、表情和特殊字符。

如果您正在处理 Twitter 数据并希望分析推文的特定方面(例如标签和提及),这将非常有用。

使用正则表达式

正则表达式是匹配和操作字符串的强大工具,它们可用于执行各种分词任务。

示例

让我们看一个使用正则表达式在 Python 中执行分词的示例:

import re

text = "This is a sample text"

# Split on one or more whitespace characters
pattern = r"\s+"
tokens = re.split(pattern, text)
print(tokens)

# Split on words (any sequence of characters that are not whitespace)
pattern = r"\S+"
tokens = re.split(pattern, text)
print(tokens)

# Split on numbers (any sequence of digits)
pattern = r"\d+"
tokens = re.split(pattern, text)
print(tokens)

在此代码中,我们有三个部分:

  • 第一部分使用匹配一个或多个空格字符的正则表达式模式,生成的标记是字符串中的单词。

  • 第二部分使用匹配任何非空格字符序列的正则表达式模式,生成单个字符列表。

  • 第三部分使用匹配任何数字序列的正则表达式模式,生成的标记是字符串中的单词和标点符号。

输出

当您运行此代码时,它将产生以下输出:

['This', 'is', 'a', 'sample', 'text']
['', ' ', ' ', ' ', ' ', '']
['This is a sample text']

使用 string 模块

Python 中的 string 模块提供了一些字符串处理函数,包括一个可用于分词字符串的 Template 类。

要使用 Template 类,您需要导入 string 模块并定义一个模板字符串,其中包含要提取的标记的占位符。例如:

import string
text = "This is a $token text"
template = string.Template(text)

然后,您可以使用 substitute() 方法将占位符替换为实际值,并在空格字符上分割生成的字符串:

tokens = template.substitute({"token": "sample"}).split(" ")
print(tokens)

这将用单词“sample”替换占位符 $token,并在空格字符上分割生成的字符串,生成标记 ['This', is', 'a', 'sample', 'text']。

Template 类对于分词具有可变值的字符串(例如模板电子邮件或消息)很有用。

使用 shlex 模块

shlex 模块为 shell 风格的语法提供了一个词法分析器。它可以像 shell 一样将字符串分割成标记。

要使用 shlex 模块,您需要先导入它:

import shlex
text = "This is a sample text"
tokens = shlex.split(text)
print(tokens)

这将在空格字符上分割字符串,就像 split() 方法和 nltk 库一样。shlex 模块对于分词具有 shell 风格语法的字符串(例如命令行参数)很有用。

输出

当您运行此代码时,它将产生以下输出:

['This', 'is', 'a', 'sample', 'text']

结论

分词是将字符串分割成更小片段或标记的过程。在自然语言处理的上下文中,标记通常是单词、标点符号和数字。分词是许多 NLP 任务的重要预处理步骤,因为它允许您处理单个单词和符号,而不是原始文本。

在本教程中,我们介绍了在 Python 中执行分词的五种方法:使用 split() 方法、nltk 库、正则表达式、string 模块和 shlex 模块。每种方法都有其自身的优点和局限性,因此选择最适合您需求的方法非常重要。无论您是处理简单的字符串还是复杂的人类语言数据,Python 都提供了一系列工具和库,您可以使用它们有效地对文本进行分词。

更新于:2023年8月21日

4K+ 阅读量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告