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 都提供了一系列工具和库,您可以使用它们有效地对文本进行分词。