Python 执行Tokenization的5种简单方法

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程