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

Простое НЛП в Python с TextBlob: Обнаружение N-грамм

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

Автор оригинала: 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 .