Инструментарий естественного языка - токенизация текста
Что такое токенизация?
Его можно определить как процесс разделения текста на более мелкие части, такие как предложения и слова. Эти более мелкие части называются токенами. Например, слово - это токен в предложении, а предложение - это токен в абзаце.
Поскольку мы знаем, что 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.")
Вывод
[ ]
Это даст нам пустой результат.