Рубрики
Без рубрики

Простое НЛП в Python С TextBlob: Токенизация

В этой статье мы рассмотрим, как маркировать данный текст с помощью библиотеки TextBlob. Мы также рассмотрим примеры того, как маркировать слова и предложения.

Автор оригинала: Natalia Kuzminykh.

Простое НЛП в Python С TextBlob: Токенизация

Вступление

Количество текстовых данных в Интернете значительно возросло за последние десятилетия. Нет никаких сомнений в том, что обработка такого количества информации должна быть автоматизирована, и пакет TextBlob является одним из довольно простых способов выполнения NLP – Обработки естественного языка.

Он предоставляет простой API для погружения в общие задачи обработки естественного языка (НЛП), такие как маркировка частей речи, извлечение именных фраз, токенизация, анализ настроений, классификация, перевод и многое другое.

Никаких специальных технических предпосылок для использования этой библиотеки не требуется. Например, TextBlob применим как для Python2, так и для 3. Если у вас нет под рукой какой-либо текстовой информации, TextBlob предоставляет необходимые корпусы из базы данных NLTK .

Установка TextBlob

Давайте начнем с установки Text Blob и корпусов NLTK:

$ pip install -U textblob
$ python -m textblob.download_corpora

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

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

Прежде чем углубляться в область НЛП вы также должны быть в состоянии распознать эти ключевые термины:

  • Corpus (или corpus во множественном числе) – это просто определенный набор языковых данных (например, текстов). Корпусы обычно используются для обучения различным моделям классификации текста или анализа настроений, например.

  • Токен – это конечная строка, которая отделена от основного текста, или, другими словами, это результат токенизации.

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

Токенизация или сегментация слов-это простой процесс разделения предложений или слов из корпуса на небольшие единицы, то есть лексемы.

Иллюстрацией этого может служить следующее предложение:

  • Ввод (корпус): Зло, которое творят люди, живет после них

  • Вывод (токены): | То | зло | что | люди | делают | живет | после | них |

Здесь входное предложение маркируется на основе пробелов между словами. Вы также можете маркировать символы из одного слова (например, apple from apple ) или отдельные предложения из одного текста.

Токенизация-один из основных и решающих этапов обработки языка. Он преобразует неструктурированный текстовый материал в данные. Это может быть использовано в дальнейшем при разработке различных моделей машинного перевода, поисковой оптимизации или различных бизнес-запросов.

Реализация токенизации в коде

Прежде всего, необходимо установить объект Text Blob и определить образец корпуса, который будет маркирован позже. Например, давайте попробуем токенизировать часть стихотворения Если написано Р. Киплингом:

from textblob import TextBlob

# Creating the corpus
corpus = '''If you can force your heart and nerve and sinew to serve your turn long after they are gone. And so hold on when there is nothing in you except the Will which says to them: 'Hold on!'
'''

После создания объекта он должен быть передан в качестве аргумента конструктору Text Blob :

blob_object = TextBlob(corpus)

После создания мы можем выполнять различные операции над этим blob_object . Он уже содержит наш корпус, классифицированный в определенной степени.

Токенизация слов

Наконец, чтобы получить маркированные слова, мы просто извлекаем атрибут words для созданного blob_object . Это дает нам список, содержащий объекты Word , которые ведут себя очень похоже на объекты str :

from textblob import TextBlob

corpus = '''If you can force your heart and nerve and sinew to serve your turn long after they are gone. And so hold on when there is nothing in you except the Will which says to them: 'Hold on!'
'''

blob_object = TextBlob(corpus)

# Word tokenization of the sample corpus
corpus_words = blob_object.words
# To see all tokens
print(corpus_words)
# To count the number of tokens
print(len(corpus_words))

Выходные команды должны дать вам следующее:

['If', 'you', 'can', 'force', 'your', 'heart', 'and', 'nerve', 'and', 'sinew', 'to', 'serve', 'your', 'turn', 'long', 'after', 'they', 'are', 'gone', 'and', 'so', 'hold', 'on', 'when', 'there', 'is', 'nothing', 'in', 'you', 'except', 'the', 'Will', 'which', 'says', 'to', 'them', 'Hold', 'on']
38

Стоит отметить, что этот подход маркирует слова, используя ПРОБЕЛ в качестве разделительного символа. Мы можем изменить этот разделитель, например, на TAB :

from textblob import TextBlob
from nltk.tokenize import TabTokenizer

corpus = '''If you can force your heart and nerve and sinew to serve your turn long after they are gone. 	And so hold on when there is nothing in you except the Will which says to them: 'Hold on!'
'''

tokenizer = TabTokenizer()
blob_object = TextBlob(corpus, tokenizer = tokenizer)

# Word tokenization of the sample corpus
corpus_words = blob_object.tokens
# To see all tokens
print(corpus_words)

Обратите внимание, что мы добавили TAB после первого предложения здесь. Как, корпус слов выглядит примерно так:

['If you can force your heart and nerve and sinew to serve your turn long after they are gone.','And so hold on when there is nothing in you except the Will which says to them: 'Hold on!']

nltk.tokenize содержит и другие варианты токенизации. По умолчанию он использует токенизатор пространства , который вам не нужно определять явно, но можно. Кроме этих двух, он также содержит полезные токенизаторы, такие как LineTokenizer , Blank Line Tokenizer и WordPunctTokenizer .

Полный список можно найти в их документации .

Токенизация предложений

Для токенизации на уровне предложения мы будем использовать тот же blob_object . На этот раз вместо атрибута words мы будем использовать атрибут sentences . Это возвращает список объектов Sentence :

from textblob import TextBlob

corpus = '''If you can force your heart and nerve and sinew to serve your turn long after they are gone. And so hold on when there is nothing in you except the Will which says to them: 'Hold on!'
'''

blob_object = TextBlob(corpus)

# Sentence tokenization of the sample corpus
corpus_sentence = blob_object.sentences
# To identify all tokens
print(corpus_sentence)
# To count the number of tokens
print(len(corpus_sentence))

Выход:

[Sentence("If you can force your heart and nerve and sinew to serve your turn long after they are gone"), Sentence("And so hold on when there is nothing in you except the Will which says to them: 'Hold on!")]
2

Вывод

Токенизация является очень важным этапом предварительной обработки данных в НЛП и включает в себя разбиение текста на более мелкие фрагменты, называемые токенами. Эти лексемы могут быть отдельными словами, предложениями или символами в исходном тексте.

TextBlob-это отличная библиотека для НЛП, поскольку она предлагает простой API, который позволяет пользователям быстро переходить к выполнению задач НЛП.

В этой статье мы обсуждали только одну из задач НЛП, с которыми имеет дело TextBlob, но в следующей серии мы рассмотрим, как решать более сложные проблемы, такие как работа со словоизменениями, множественными и единственными формами слов и многое другое.