Простое NLP в Python с TextBlob: токенизация
Количество текстовых данных в Интернете значительно увеличилось за последние десятилетия. Нет сомнений в том, что обработка такого количества информации должна быть автоматизирована, и пакет TextBlob - один из довольно простых способов выполнить NLP - обработку естественного языка.
Он предоставляет простой API-интерфейс для решения общих задач обработки естественного языка (NLP), таких как тегирование части речи, извлечение именных фраз, токенизация, анализ тональности, классификация, перевод и многое другое.
Никаких специальных технических условий для использования этой библиотеки не требуется. Например, TextBlob применим как для Python 2, так и для Python 3. Если у вас нет текстовой информации для проекта, над которым вы хотите работать, TextBlob предоставляет необходимые корпуса из базы данных NLTK.
Установка TextBlob
Начнем с установки TextBlob и корпуса NLTK:
pip install -U textblob
python -m textblob.download_corpora
Примечание. Этот процесс может занять некоторое время из-за большого количества алгоритмов и корпусов, содержащихся в этой библиотеке.
Что такое токенизация?
Прежде чем углубиться в область NLP, вы также должны уметь распознавать эти ключевые термины:
- Корпус (или корпус во множественном числе) - это просто определенный набор языковых данных (например, текстов). Корпуса обычно используются, например, для обучения различным моделям классификации текста или анализа тональности.
- Токен - это результирующая строка, которая отделяется от основного текста, или, другими словами, это результат токенизации.
Что такое токенизация?
Токенизация или сегментация слов - это простой процесс разделения предложений или слов из корпуса на небольшие единицы, то есть токены.
Иллюстрацией этого может быть следующее предложение:
- Исходные данные (корпус): The evil that men do lives after them
- Результат (токены): | The | evil | that | men | do | lives | after | them |
Здесь входное предложение размечено на основе пробелов между словами. Вы также можете токенизировать символы из одного слова (например, яблоко от яблока ) или отделять предложения из одного текста.
Токенизация - один из основных и решающих этапов языковой обработки. Он преобразует неструктурированный текстовый материал в данные. Это может быть использовано в дальнейшем при разработке различных моделей машинного перевода, поисковой оптимизации или различных бизнес-запросов.
Реализация токенизации в коде
Прежде всего, необходимо создать объект TextBlob
и определить образец корпуса, который позже будет токенизирован. Например, давайте попробуем токенизировать часть стихотворения написаное Р. Киплингом:
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!'
'''
После того, как объект создан, его следует передать конструктору в качестве аргумента TextBlob
:
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
Стоит отметить, что этот подход токенизирует слова, использующие их SPACE
в качестве ограничивающего символа. Мы можем изменить этот разделитель, например, на 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
также содержит другие варианты токенизации. По умолчанию он использует тот SpaceTokenizer
, который вам не нужно определять явно, но можно. Помимо этих двух, он также содержит полезные токенизаторы, такие как LineTokenizer
, BlankLineTokenizer
и 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
Вывод
Токенизация - очень важный этап предварительной обработки данных в NLP, который включает разбиение текста на более мелкие фрагменты, называемые токенами. Эти токены могут быть отдельными словами, предложениями или символами исходного текста.
TextBlob - отличная библиотека для знакомства с NLP, поскольку она предлагает простой API, который позволяет пользователям быстро переходить к выполнению задач.
В этой статье мы обсудили только одну из задач NLP, с которыми имеет дело TextBlob, но в следующей серии мы рассмотрим, как решать более сложные проблемы, такие как обработка перегибов слов, форм множественного и единственного числа, и не только.