Инструментарий естественного языка - токенизация текста

Что такое токенизация?

Его можно определить как процесс разделения текста на более мелкие части, такие как предложения и слова. Эти более мелкие части называются токенами. Например, слово - это токен в предложении, а предложение - это токен в абзаце.

Поскольку мы знаем, что NLP используется для создания приложений, таких как анализ тональности, системы контроля качества, языковой перевод, интеллектуальные чат-боты, голосовые системы и т. Д., Поэтому для их создания жизненно важно понимать закономерности в тексте. Упомянутые выше токены очень полезны для поиска и понимания этих шаблонов. Мы можем рассматривать токенизацию как базовый шаг для других рецептов, таких как стемминг и лемматизация.

Пакет НЛТК

nltk.tokenize - это пакет, предоставляемый модулем NLTK для выполнения процесса токенизации.

Преобразование предложений в слова

Разделение предложения на слова или создание списка слов из строки - важная часть каждого действия по обработке текста. Давайте разберемся с этим с помощью различных функций / модулей, предоставляемыхnltk.tokenize пакет.

модуль word_tokenize

word_tokenizeмодуль используется для базовой токенизации слов. В следующем примере этот модуль будет использоваться для разбиения предложения на слова.

пример

import nltk
from nltk.tokenize import word_tokenize
word_tokenize('Tutorialspoint.com provides high quality technical tutorials for free.')

Вывод

['Tutorialspoint.com', 'provides', 'high', 'quality', 'technical', 'tutorials', 'for', 'free', '.']

Класс TreebankWordTokenizer

word_tokenize модуль, использованный выше, в основном представляет собой функцию-оболочку, которая вызывает функцию tokenize () как экземпляр TreebankWordTokenizerкласс. Результат будет тот же, что и при использовании модуля word_tokenize () для разделения предложений на слова. Давайте посмотрим на тот же пример, реализованный выше -

пример

Во-первых, нам нужно импортировать инструментарий естественного языка (nltk).

import nltk

Теперь импортируйте TreebankWordTokenizer класс для реализации алгоритма токенизатора слов -

from nltk.tokenize import TreebankWordTokenizer

Затем создайте экземпляр класса TreebankWordTokenizer следующим образом:

Tokenizer_wrd = TreebankWordTokenizer()

Теперь введите предложение, которое вы хотите преобразовать в токены -

Tokenizer_wrd.tokenize(
   'Tutorialspoint.com provides high quality technical tutorials for free.'
)

Вывод

[
   'Tutorialspoint.com', 'provides', 'high', 'quality', 
   'technical', 'tutorials', 'for', 'free', '.'
]

Полный пример реализации

Давайте посмотрим на полный пример реализации ниже

import nltk
from nltk.tokenize import TreebankWordTokenizer
tokenizer_wrd = TreebankWordTokenizer()
tokenizer_wrd.tokenize('Tutorialspoint.com provides high quality technical
tutorials for free.')

Вывод

[
   'Tutorialspoint.com', 'provides', 'high', 'quality', 
   'technical', 'tutorials','for', 'free', '.'
]

Наиболее важным условием токенизатора является разделение сокращений. Например, если мы используем для этой цели модуль word_tokenize (), он выдаст следующий результат:

пример

import nltk
from nltk.tokenize import word_tokenize
word_tokenize('won’t')

Вывод

['wo', "n't"]]

Такая конвенция TreebankWordTokenizerнедопустимо. Вот почему у нас есть два альтернативных токенизатора слов, а именноPunktWordTokenizer и WordPunctTokenizer.

WordPunktTokenizer - класс

Альтернативный токенизатор слов, который разбивает все знаки препинания на отдельные токены. Давайте разберемся с этим на следующем простом примере -

пример

from nltk.tokenize import WordPunctTokenizer
tokenizer = WordPunctTokenizer()
tokenizer.tokenize(" I can't allow you to go home early")

Вывод

['I', 'can', "'", 't', 'allow', 'you', 'to', 'go', 'home', 'early']

Преобразование текста в предложения

В этом разделе мы собираемся разбить текст / абзац на предложения. НЛТК предоставляетsent_tokenize модуль для этой цели.

Зачем это нужно?

У нас возник очевидный вопрос: когда у нас есть токенизатор слов, зачем нам токенизатор предложений или зачем нам токенизировать текст в предложения. Предположим, нам нужно посчитать среднее количество слов в предложениях, как мы можем это сделать? Для выполнения этой задачи нам нужна как токенизация предложения, так и токенизация слова.

Давайте поймем разницу между токенизатором предложения и слова с помощью следующего простого примера -

пример

import nltk
from nltk.tokenize import sent_tokenize
text = "Let us understand the difference between sentence & word tokenizer. 
It is going to be a simple example."
sent_tokenize(text)

Вывод

[
   "Let us understand the difference between sentence & word tokenizer.", 
   'It is going to be a simple example.'
]

Токенизация предложений с использованием регулярных выражений

Если вы чувствуете, что вывод word tokenizer неприемлем, и хотите полностью контролировать процесс токенизации текста, у нас есть регулярное выражение, которое можно использовать при токенизации предложения. НЛТК предоставляетRegexpTokenizer класс, чтобы добиться этого.

Давайте разберемся в концепции с помощью двух примеров ниже.

В первом примере мы будем использовать регулярное выражение для сопоставления буквенно-цифровых токенов плюс одинарные кавычки, чтобы не разбивать сокращения вроде “won’t”.

Пример 1

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer("[\w']+")
tokenizer.tokenize("won't is a contraction.")
tokenizer.tokenize("can't is a contraction.")

Вывод

["won't", 'is', 'a', 'contraction']
["can't", 'is', 'a', 'contraction']

В первом примере мы будем использовать регулярное выражение для токенизации пробелов.

Пример 2

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = True)
tokenizer.tokenize("won't is a contraction.")

Вывод

["won't", 'is', 'a', 'contraction']

Из вышеприведенного вывода мы видим, что знаки препинания остаются в токенах. Параметр gaps = True означает, что шаблон будет определять пробелы для токенизации. С другой стороны, если мы будем использовать параметр gaps = False, тогда шаблон будет использоваться для идентификации токенов, которые можно увидеть в следующем примере -

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = False)
tokenizer.tokenize("won't is a contraction.")

Вывод

[ ]

Это даст нам пустой результат.