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

Введение Объем текстовых данных в Интернете значительно увеличился за последние десятилетия. Нет сомнений в том, что обработка такого количества информации должна быть автоматизирована, и пакет TextBlob [https://textblob.readthedocs.io/en/dev/] является одним из довольно простых способов выполнения NLP - обработки естественного языка. Он предоставляет простой API для погружения в общие задачи обработки естественного языка (NLP), такие как тегирование части речи, извлечение именных фраз, токенизация и т. Д.

Вступление

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

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

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

Установка TextBlob

Начнем с установки TextBlob и корпуса NLTK:

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

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

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

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

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

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

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

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

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

  • Исходные данные (корпус): зло, творимое людьми, живет после них.

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

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

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

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

Прежде всего, необходимо создать 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 

Заключение

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

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

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

comments powered by Disqus