Учебники

Python Web Scraping — Работа с текстом

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

Вступление

Вы можете выполнить анализ текста с помощью библиотеки Python, которая называется Natural Language Tool Kit (NLTK). Прежде чем перейти к концепции NLTK, давайте разберемся в связи между анализом текста и анализом веб-страниц.

Анализ слов в тексте может помочь нам узнать, какие слова важны, какие слова необычны, как слова сгруппированы. Этот анализ облегчает задачу веб-очистки.

Начало работы с NLTK

Инструментарий естественного языка (NLTK) — это коллекция библиотек Python, которая разработана специально для идентификации и маркировки частей речи, встречающихся в тексте на естественном языке, таком как английский.

Установка НЛТК

Вы можете использовать следующую команду для установки NLTK в Python —

pip install nltk

Если вы используете Anaconda, тогда пакет conda для NLTK может быть собран с помощью следующей команды —

conda install -c anaconda nltk

Загрузка данных НЛТК

После установки NLTK мы должны загрузить предустановленные текстовые репозитории. Но перед загрузкой текстовых предустановленных репозиториев нам необходимо импортировать NLTK с помощью команды import следующим образом:

mport nltk

Теперь с помощью следующей команды NLTK можно загрузить данные —

nltk.download()

Установка всех доступных пакетов NLTK займет некоторое время, но всегда рекомендуется устанавливать все пакеты.

Установка других необходимых пакетов

Нам также нужны некоторые другие пакеты Python, такие как gensim и pattern, для анализа текста, а также для создания приложений обработки естественного языка с использованием NLTK.

gensim — надежная библиотека семантического моделирования, которая полезна для многих приложений. Это может быть установлено следующей командой —

pip install gensim

pattern — Используется для правильной работы пакета gensim . Это может быть установлено следующей командой —

pip install pattern

лексемизацию

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

пример

лексемизацию

Модуль NLTK предоставляет различные пакеты для токенизации. Мы можем использовать эти пакеты согласно нашему требованию. Некоторые из пакетов описаны здесь —

Пакет sent_tokenize — этот пакет разделит введенный текст на предложения. Вы можете использовать следующую команду для импорта этого пакета —

from nltk.tokenize import sent_tokenize

Пакет word_tokenize — этот пакет разделит введенный текст на слова. Вы можете использовать следующую команду для импорта этого пакета —

from nltk.tokenize import word_tokenize

Пакет WordPunctTokenizer — этот пакет будет разделять вводимый текст и знаки препинания на слова. Вы можете использовать следующую команду для импорта этого пакета —

from nltk.tokenize import WordPuncttokenizer

Морфологический

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

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

Модуль NLTK предоставляет различные пакеты для стволовых. Мы можем использовать эти пакеты согласно нашему требованию. Некоторые из этих пакетов описаны здесь —

Пакет PorterStemmer . Алгоритм Портера используется этим пакетом stemming для извлечения базовой формы. Вы можете использовать следующую команду для импорта этого пакета —

from nltk.stem.porter import PorterStemmer

Например, после ввода слова «запись» в качестве входных данных для этого стеммера, результатом будет слово «запись» после стемминга.

Пакет LancasterStemmer. Алгоритм Lancaster используется этим пакетом stemming для извлечения базовой формы. Вы можете использовать следующую команду для импорта этого пакета —

from nltk.stem.lancaster import LancasterStemmer

Например, после того, как в качестве входных данных для этого стеммера задано слово «Writing», после стемминга на выходе будет слово «writ» .

Пакет SnowballStemmer. Алгоритм Snowball используется этим пакетом stemming для извлечения базовой формы. Вы можете использовать следующую команду для импорта этого пакета —

from nltk.stem.snowball import SnowballStemmer

Например, после указания слова «запись» в качестве входных данных для этого стеммера после вывода будет выводиться слово «запись».

лемматизации

Другой способ извлечь базовую форму слов — лемматизация, обычно целью которой является удаление флективных окончаний с помощью словарного и морфологического анализа. Базовая форма любого слова после лемматизации называется леммой.

Модуль NLTK предоставляет следующие пакеты для лемматизации —

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

from nltk.stem import WordNetLemmatizer

лязг

Разделение на части, что означает разделение данных на маленькие куски, является одним из важных процессов в обработке естественного языка для определения частей речи и коротких фраз, таких как существительные. Chunking — это маркировка токенов. Мы можем получить структуру предложения с помощью процесса разбиения на фрагменты.

пример

В этом примере мы собираемся реализовать разбиение Noun-Phrase с помощью модуля NLTK Python. NP chunking — это категория фрагментирования, которая найдет в предложении фрагменты имен существительных.

Шаги по реализации разбиения имен существительных

Нам нужно следовать приведенным ниже шагам для реализации разбиения на именные фразы —

Шаг 1 — Определение грамматики чанка

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

Шаг 2 — Создание парсера чанка

Теперь мы создадим парсер чанков. Было бы разобрать грамматику и дать вывод.

Шаг 3 — Выход

На этом последнем шаге вывод будет производиться в древовидном формате.

Во-первых, нам нужно импортировать пакет NLTK следующим образом:

import nltk

Далее нам нужно определить предложение. Здесь DT: определитель, VBP: глагол, JJ: прилагательное, IN: предлог и NN: существительное.

sentence = [("a", "DT"),("clever","JJ"),("fox","NN"),("was","VBP"),("jumping","VBP"),("over","IN"),("the","DT"),("wall","NN")]

Далее мы даем грамматику в форме регулярного выражения.

grammar = "NP:{<DT>?<JJ>*<NN>}"

Теперь следующая строка кода определит парсер для разбора грамматики.

parser_chunking = nltk.RegexpParser(grammar)

Теперь парсер проанализирует предложение.

parser_chunking.parse(sentence)

Далее мы даем наш вывод в переменной.

Output = parser_chunking.parse(sentence)

С помощью следующего кода мы можем нарисовать наш вывод в виде дерева, как показано ниже.

output.draw()

Фраза Чанкинг

Модель Bag of Word (BoW) Извлечение и преобразование текста в цифровую форму

Bag of Word (BoW), полезная модель в обработке естественного языка, в основном используется для извлечения функций из текста. После извлечения функций из текста его можно использовать при моделировании в алгоритмах машинного обучения, поскольку необработанные данные нельзя использовать в приложениях ML.

Рабочая модель BoW

Изначально модель извлекает словарь из всех слов в документе. Позже, используя матрицу терминов документа, он построит модель. Таким образом, модель BoW представляет документ только как пакет слов, а порядок или структура отбрасываются.

пример

Предположим, у нас есть следующие два предложения —

Предложение1 — это пример модели Bag of Words.

Предложение 2 — Мы можем извлекать функции, используя модель Bag of Words.

Теперь, рассматривая эти два предложения, мы имеем следующие 14 различных слов —

  • это
  • является
  • пример
  • мешок
  • из
  • слова
  • модель
  • мы
  • Можно
  • экстракт
  • функции
  • от
  • с помощью

Построение модели мешка слов в НЛТК

Давайте посмотрим на следующий скрипт Python, который создаст модель BoW в NLTK.

Сначала импортируйте следующий пакет —

from sklearn.feature_extraction.text import CountVectorizer 

Затем определите набор предложений —

Sentences=['This is an example of Bag of Words model.', ' We can extract
   features by using Bag of Words model.']
   vector_count = CountVectorizer()
   features_text = vector_count.fit_transform(Sentences).todense()
   print(vector_count.vocabulary_)

Выход

Это показывает, что у нас есть 14 различных слов в двух вышеупомянутых предложениях —

{
   'this': 10, 'is': 7, 'an': 0, 'example': 4, 'of': 9, 
   'bag': 1, 'words': 13, 'model': 8, 'we': 12, 'can': 3, 
   'extract': 5, 'features': 6, 'by': 2, 'using':11
}

Моделирование темы: идентификация шаблонов в текстовых данных

Обычно документы группируются по темам, а моделирование тем — это метод определения шаблонов в тексте, который соответствует определенной теме. Другими словами, тематическое моделирование используется для выявления абстрактных тем или скрытой структуры в заданном наборе документов.

Вы можете использовать тематическое моделирование в следующих сценариях —

Классификация текста

Классификация может быть улучшена с помощью тематического моделирования, поскольку она группирует сходные слова, а не использует каждое слово отдельно в качестве признака.

Рекомендательные Системы

Мы можем создавать рекомендательные системы, используя меры сходства.

Алгоритмы моделирования тем

Мы можем реализовать тематическое моделирование, используя следующие алгоритмы:

Латентное распределение Дирихле (LDA) — это один из самых популярных алгоритмов, который использует вероятностные графические модели для реализации тематического моделирования.

Скрытый семантический анализ (LDA) или Скрытое семантическое индексирование (LSI) — Он основан на линейной алгебре и использует концепцию SVD (разложение по единственному значению) в матрице терминов документа.

Неотрицательная матричная факторизация (NMF) — она ​​также основана на линейной алгебре, как и LDA.

Вышеупомянутые алгоритмы будут иметь следующие элементы —