Автор оригинала: Natalia Kuzminykh.
Простое НЛП в Python с TextBlob: Обнаружение N-грамм
Вступление
Постоянный рост данных в Интернете создает спрос на инструменты, обрабатывающие текстовую информацию.
Кроме того, очень важно, чтобы этот инструмент анализа текста мог реализовывать решения как для низко -, так и для высокоуровневых задач НЛП, таких как подсчет частот слов, расчет анализа тональности текстов или обнаружение паттернов в отношениях между словами.
TextBlob – это отличная легкая библиотека для широкого спектра задач НЛП.
В этом уроке мы прольем некоторый свет как выполнить обнаружение N-грамм в Python с помощью TextBlob.
Что такое N-граммы?
N-граммы представляют собой непрерывную последовательность из N элементов из заданного набора текстов. В широком смысле, такие элементы не обязательно означают строки слов, они также могут быть фонемами, слогами или буквами, в зависимости от того, чего вы хотите достичь.
Однако в Обработке естественного языка он чаще всего ссылается на N-граммы как строки слов, где n означает количество слов, которые вы ищете.
Обычно выделяют следующие типы N-грамм:
Unigram – N-грамм с одной строкой внутри (например, это может быть уникальное слово – YouTube или TikTok из данного предложения, например YouTube запускает новый короткий видеоформат, который очень похож на TikTok ).
2-gram или Bigram – Обычно комбинация двух строк или слов, которые появляются в документе: short-form video или video format будет, скорее всего, результатом поиска биграмм в определенном корпусе текстов (а не format video , video short-form так как порядок слов остается прежним).
3-грамм или Триграмма – N-грамм, содержащий до трех элементов, которые обрабатываются вместе (например, short-form video format или new short-form video ) и т. Д.
N-граммы нашли свое основное применение в области вероятностных языковых моделей. Как они оценивают вероятность следующего элемента в последовательности слов.
Такой подход к языковому моделированию предполагает тесную связь между положением каждого элемента в строке, вычисляя вхождение следующего слова относительно предыдущего. В частности, N-граммовая модель определяет вероятность следующим образом – N-1
.
Например, модель триграммы (with) будет предсказывать следующее слово в строке на основе предыдущих двух слов как N-1
.
Другими случаями реализации N-граммовых моделей в отрасли может быть выявление плагиата, когда N-граммы, полученные из двух разных текстов, сравниваются друг с другом для выяснения степени сходства анализируемых документов.
Обнаружение N-грамм в Python с помощью TextBlob
Анализ предложения
Чтобы начать обнаруживать N-граммы в Python, вам сначала нужно будет установить пакет Textblob. Обратите внимание, что эта библиотека применима как для Python2, так и для Python 3.
Мы также хотим загрузить необходимые текстовые корпуса для работы с ними:
$ pip install -U textblob $ python -m textblob.download_corpora
Как только среда настроена, вы готовы загрузить пакет и вычислить N-граммы в образце предложения. Вначале мы рассмотрим N-граммы в цитате М. Малленвега: Технология лучше всего, когда она объединяет людей .
Давайте начнем:
from textblob import TextBlob # Sample sentence for N-gram detection sentence = "Technology is best when it brings people together"
Мы создали строку sentence
, содержащую предложение, которое мы хотим проанализировать. Затем мы передаем эту строку в конструктор Text Blob
, вводя ее в экземпляр Text Blob
, над которым будем выполнять операции:
ngram_object = TextBlob(sentence)
Теперь давайте запустим обнаружение N-граммов. Для начала давайте сделаем 2-граммовое обнаружение. Это конкретно указано в списке аргументов вызова функции ngrams()
:
ngrams = ngram_object.ngrams(n=2) # Computing Bigrams print(ngrams)
Функция ngrams()
возвращает список кортежей n последовательных слов. В нашем предложении модель биграма даст нам следующий набор строк:
[WordList(['Technology', 'is']), WordList(['is', 'best']), WordList(['best', 'when']), WordList(['when', 'it']), WordList(['it', 'brings']), WordList(['brings', 'people']), WordList(['people', 'together'])]
Анализ документов
Несмотря на простоту этой библиотеки Python, TextBlob также предоставляет ряд расширенных функций для анализа. Чаще всего мы не работаем с отдельными предложениями для обнаружения N-граммов. Гораздо чаще приходится работать с документами, статьями или более крупными корпоративными документами.
В нашем следующем примере мы будем использовать статью с новостного портала CNBC о Билле Гейтсе.
Давайте создадим текстовый документ и назовем его чем-то вроде Input.txt
для следующего анализа:
import sys # Opening and reading the `Input.txt` file corpus = open("Input.txt").read()
Затем, как обычно, мы создадим экземпляр Text Blob
, передав corpus
конструктору, и запустим функцию ngrams()
:
ngram_object = TextBlob(corpus) trigrams = ngram_object.ngrams(n=3) # Computing Trigrams print(trigrams)
Это позволит распечатать триграммы предоставленного нами контента. Однако обратите внимание, что выходные данные могут отличаться в зависимости от подхода, применяемого для обработки знаков препинания:
[WordList(['Bill', 'Gates', 'says']), WordList(['Gates', 'says', 'that']), WordList(['says', 'that', 'antitrust']), WordList(['that', 'antitrust', 'regulators']), WordList(['antitrust', 'regulators', 'should']) <...>]
Для сравнения, анализ биграмм для данной статьи предоставит нам другой список:
ngram_object = TextBlob(corpus) Bigram = ngram_object.ngrams(n=) # Computing Bigrams print(Bigram)
Фрагмент из выходных данных:
[WordList(['Bill', 'Gates']), WordList(['Gates', 'says']), WordList(['says', 'that']), WordList(['that', 'antitrust']), WordList(['antitrust', 'regulators']) <...>]
Вывод
Обнаружение N-грамм-простая и распространенная задача во многих проектах НЛП. В этой статье мы рассмотрели как выполнить обнаружение N-грамм в Python с помощью TextBlob .