自然语言处理中的标记化
已发表: 2020-12-01在处理文本数据时,最基本的步骤是对文本进行标记。 “令牌”可以被视为单个单词、句子或任何最小单位。 因此,将句子分成单独的单元只不过是 Tokenization。
在本教程结束时,您将掌握以下知识:
- 什么是代币化
- 不同类型的标记化
- 标记化的不同方法
标记化是 NLP 管道中最基本的步骤。
但这是为什么呢?
这些单词或标记稍后会转换为数值,以便计算机可以理解并理解它。 这些令牌被清理、预处理,然后通过“向量化”的方法转换为数值。 然后可以将这些向量馈送到机器学习算法和神经网络。
标记化不仅可以是单词级别,还可以是句子级别。 也就是说,文本既可以用词作为标记,也可以用句子作为标记。 让我们讨论几种执行标记化的方法。

目录
Python 拆分()
Python的split()函数返回被提到的字符分割的标记列表。 默认情况下,它按空格分割单词。
词标记化
Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 任务中是必不可少的。” 令牌 = Mystr.split() |
#输出: >> [ 'This' , 'is' , 'a' , 'tokenization' , 'tutorial.' , 'We' , 'are' , 'learning' , 'different' , 'tokenization' , 'methods,' , 'and' , 'ways?' , 'Tokenization' , 'is' , 'essential' , 'in' , 'NLP' , 'tasks.' ] |
句子标记化
通过将分隔符传递为“.”,可以将相同的文本拆分为句子。
Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 任务中是必不可少的。” 令牌 = Mystr.split( “.” ) |
#输出: >> [ '这是一个标记化教程' , '我们正在学习不同的标记化方法,方法是什么? 标记化在 NLP 任务中是必不可少的, ” ] |
虽然这看起来简单明了,但它有很多缺陷。 如果你注意到,它会在最后一个“。”之后分裂。 也是。 它不考虑“?” 作为下一个句子的指示符,因为它只需要一个字符,即“.”。
现实生活场景中的文本数据非常脏,不能很好地放在单词和句子中。 可能会出现很多垃圾文本,这将使您很难以这种方式进行标记。 因此,让我们继续采用更好、更优化的标记化方式。
必读:你应该知道的 10 大深度学习技术
正则表达式
正则表达式 (RegEx) 是用于匹配字符模式的字符序列。 我们使用 RegEx 查找某些模式、单词或字符来替换它们或对它们进行任何其他操作。 Python 具有用于处理 RegEx的模块re 。 让我们看看如何使用re标记文本。
词标记化
Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。” 令牌 = re.findall( “[\w']+” , Mystr) |
#输出: >> [ 'This' , 'is' , 'a' , 'tokenization' , 'tutorial' , 'We' , 'are' , 'learning' , 'different' , 'tokenization' , 'methods' , 'and' , '方式' , '标记化' , 'is' , 'essential' , 'in' , 'NLP' , 'tasks' ] |
那么,这里发生了什么?
re.findall ()函数匹配与其匹配的所有序列并将它们存储在列表中。 表达式“[\w]+”表示任何字符——无论是字母、数字还是下划线(“_”)。 “+”符号表示模式的所有出现。 所以本质上它会扫描所有字符并将它们作为一个标记放在列表中,当它遇到空格或除下划线之外的任何其他特殊字符时。
请注意,“NLP's”这个词是一个词,但是我们的正则表达式因为撇号而将它分成“NLP”和“s”。
句子标记化
Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。” 令牌 = re.compile( '[.!?]' ).split(Mystr) |
#输出: >> [ '这是一个标记化教程' , '我们正在学习不同的标记化方法和方式' , '标记化在 NLP 任务中是必不可少的。' ] |
现在,这里我们将多个拆分字符组合成一个条件并调用 re.split 函数。 因此,当它碰到这三个字符中的任何一个时,它都会将其视为一个单独的句子。 这是 RegEx 相对于 python split 函数的一个优势,您不能传递多个字符来拆分。
另请阅读:自然语言处理的应用
NLTK 分词器
自然语言工具包 (NLTK) 是一个专门用于处理 NLP 任务的 Python 库。 NLTK 由内置的功能和模块组成,这些功能和模块是为完整 NLP 管道的某些特定过程而制作的。 让我们看看 NLTK 如何处理标记化。
词标记化
NLTK 有一个单独的模块 NLTK.tokenize 来处理标记化任务。 对于词标记化,它包含的方法之一是 word_tokenize。
从nltk.tokenize导入word_tokenize Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。” word_tokenize(Mystr) |
#输出: >>[ 'This' , 'is' , 'a' , 'tokenization' , 'tutorial' , '.' , 'We' , 'are' , 'learning' , 'different' , 'tokenization' , 'methods' , ',' , 'and' , 'ways' , '?' , 'Tokenization' , 'is' , 'essential' , 'in' , 'NLP' , 'tasks' , '.' ] |
请注意word_tokenize将标点符号视为单独的标记。 为了防止这种情况发生,我们需要在此步骤之前删除所有标点符号和特殊字符。
句子标记化
从nltk.tokenize导入sent_tokenize Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。” sent_tokenize(Mystr) |

#输出: >> [ '这是一个标记化教程。' , “我们正在学习不同的标记化方法和方式?” , '标记化在 NLP 任务中是必不可少的。' ] |
SpaCy 分词器
SpaCy 可能是用于 NLP 任务的最先进的库之一。 它包括对近 50 种语言的支持。 因此,第一步是下载英语核心。 接下来,我们需要导入加载分词器、标注器、解析器、NER 和词向量的英文模块。
词标记化
从spacy.lang.en导入英语 nlp = 英语() Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。” my_doc = nlp(Mystr) 代币 = [] 对于my_doc中的令牌: Tokens.append(token.text) 代币 |
#输出: >> [ 'This' , 'is' , 'a' , 'tokenization' , 'tutorial' , '.' , 'We' , 'are' , 'learning' , 'different' , 'tokenization' , 'methods' , ',' , 'and' , 'ways' , '?' , 'Tokenization' , 'is' , 'essential' , 'in' , 'NLP' , "'s" , 'tasks' , '.' ] |
在这里,当我们调用传递了 MyStr 的函数 nlp 时,它会为它创建单词 tokens。 然后我们对它们进行索引并将它们存储在一个单独的列表中。
句子标记化
从spacy.lang.en导入英语 nlp = 英语() sent_tokenizer = nlp.create_pipe( 'sentencizer' ) nlp.add_pipe(sent_tokenizer) Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。” my_doc = nlp(Mystr) 发送 = [] 在doc.sents中发送: 已发送.append(sent.text) 已发送 |
#输出: >> [ '这是一个标记化教程。' , “我们正在学习不同的标记化方法和方式?” , “标记化在 NLP 的任务中是必不可少的。” ] |
对于句子标记化,调用 creat_pipe 方法来创建用于创建句子标记的 sentencizer 组件。 然后我们将管道添加到 nlp 对象。 当我们将文本字符串传递给 nlp 对象时,它会为它创建句子标记。 现在可以按照与前面示例中相同的方式将它们添加到列表中。
Keras 标记化
Keras 是目前最受欢迎的深度学习框架之一。 Keras 还为文本处理任务提供了一个专用类——keras.preprocessing.text。 此类具有text_to_word_sequence函数,该函数从文本创建单词级标记。 让我们快速浏览一下。
从keras.preprocessing.text导入text_to_word_sequence Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。” 令牌 = text_to_word_sequence(Mystr) 代币 |
#输出: >> [ 'this' , 'is' , 'a' , 'tokenization' , 'tutorial' , 'we' , 'are' , 'learning' , 'different' , 'tokenization' , 'methods' , 'and' , '方式' , 'tokenization' , 'is' , 'essential' , 'in' , “nlp's” , 'tasks' ] |
请注意,它将“NLP's”一词视为单个标记。 另外,这个 keras 标记器将所有标记小写,这是一个额外的好处。
Gensim 分词器
Gensim 是另一个流行的库,用于处理基于 NLP 的任务和主题建模。 gensim.utils 类提供了一个 tokenize 方法,可用于我们的标记化任务。

词标记化
从gensim.utils导入标记化 Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。” 列表(标记化(Mystr)) |
#输出: >> [ 'This' , 'is' , 'a' , 'tokenization' , 'tutorial' , 'We' , 'are' , 'learning' , 'different' , 'tokenization' , 'methods' , 'and' , '方式' , '标记化' , 'is' , 'essential' , 'in' , 'NLP' , 's' , 'tasks' ] |
句子标记化
对于句子标记化,我们使用gensim.summarization.textcleaner类中的 split_sentences 方法。
从gensim.summarization.textcleaner导入split_sentences Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。” 令牌 = split_sentences( Mystr ) 代币 |
#输出: >> [ '这是一个标记化教程。' , “我们正在学习不同的标记化方法和方式?” , “标记化在 NLP 的任务中是必不可少的。” ] |
在你走之前
在本教程中,我们讨论了基于应用程序标记文本数据的各种方法。 这是 NLP 管道的重要步骤,但在进行标记化之前有必要清理数据。
如果您有兴趣了解有关机器学习和人工智能的更多信息,请查看 IIIT-B 和 upGrad 的机器学习和人工智能 PG 文凭,该文凭专为在职专业人士设计,提供 450 多个小时的严格培训、30 多个案例研究和作业, IIIT-B 校友身份、5 个以上实用的实践顶点项目和顶级公司的工作协助。