Python 执行Tokenization的5种简单方法
Tokenization是将字符串分割成”小块”的过程。在自然语言处理(NLP)的环境中,这些小块通常是单词、标点符号和数字。Tokenization是许多NLP任务的重要预处理步骤,因为它允许您处理单个单词和符号,而不是原始文本。
在本文中,我们将介绍在Python中执行Tokenization的五种方法。我们将从最简单的方法,即使用split()函数开始,然后逐步介绍使用nltk、re、string和shlex等库和模块的更高级技术。
使用split()方法
split()方法是Python的str类的内置函数,允许您根据指定的分隔符将字符串拆分为子字符串列表。这里是一个如何使用它的示例:
text = "This is a sample text"
tokens = text.split(" ")
print(tokens)
此代码将以空格字符为分隔符拆分字符串文本,生成的标记将为
['This', 'is', 'a', 'sample', 'text'].
您还可以通过向split()方法传递字符串列表来指定多个分隔符。例如 –
text = "This is a sample, text with punctuation!"
tokens = text.split([" ", ",", "!"])
print(tokens)
这将根据空格、逗号和感叹号将字符串文本拆分为[‘This’, ‘is’, ‘a’, ‘sample’, ”, ‘text’, ‘with’, ‘punctuation’, ”],注意分隔符也包含在标记列表中,为空字符串。
split()方法的一个限制是它只允许您根据固定的分隔符拆分字符串。如果要根据更复杂的模式(例如单词或数字)拆分字符串,则需要使用更高级的技术。
使用nltk库
Natural Language Toolkit(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不仅将文本分解为单独的单词,还将主题标签和提及作为单独的标记保留。此外,它可以处理在推文中常用的表情符号、表情和其他特殊字符。
如果你正在处理推特数据并想要分析推文的特定方面,例如主题标签和提及,这将非常有用。
使用正则表达式
正则表达式是一个强大的字符串匹配和操作工具,它可以用于执行各种标记化任务。
示例
让我们看一个使用正则表达式在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']
结论
分词是将字符串分割成较小部分或标记的过程。在自然语言处理的背景下,标记通常是单词、标点符号和数字。分词是许多自然语言处理任务的重要预处理步骤,它使您能够使用单词和符号而不是原始文本。
在本教程中,我们介绍了Python中五种执行分词的方法:使用split()方法、nltk库、正则表达式、string模块和shlex模块。每种方法都有自己的优势和局限性,因此选择最适合您需求的方法非常重要。无论您是处理简单字符串还是复杂的人类语言数据,Python都提供了一系列工具和库,您可以使用它们有效地分词您的文本。