Разметка POS с помощью NLTK и разбиение на части в NLP [ПРИМЕРЫ]

POS-теги

POS-теги (Тегирование частей речи) — это процесс разметки слов в текстовом формате для определенной части речи на основе ее определения и контекста. Он отвечает за чтение текста на языке и присваивает каждому слову определенный токен (части речи). Это также называется грамматической разметкой.

Давайте изучим пример части речи NLTK:

Входной сигнал: Все, что нам позволяет.

Вывод: [('Все', NN),('кому', ТО), ('разрешить', ВБ), ('нас', ПРП)]

Шаги, связанные с примером маркировки POS

  • Токенизировать текст (word_tokenize)
  • примените pos_tag к шагу выше, то есть nltk.pos_tag(tokenize_text)

Примеры тегов POS NLTK приведены ниже:

Аббревиатура Смысл
CC координационное соединение
CD кардинальная цифра
DT детерминанта
EX экзистенциальное там
FW иностранное слово
IN предлог/подчинительный союз
JJ Этот POS-тег NLTK представляет собой прилагательное (большое).
JJR прилагательное, сравнительный (большой)
JJS прилагательное, превосходная степень (самый большой)
LS листинговый рынок
MD модальный (может, будет)
NN существительное, единственное число (кошка, дерево)
NNS существительное во множественном числе (столы)
ННП имя собственное, единственное число (Сара)
ННПС имя собственное, множественное число (индейцы или американцы)
PDT предопределяющий (все, оба, половина)
POS притяжательное окончание (родительское)
PRP личное местоимение (ее, сама, он, сам)
PRP$ притяжательное местоимение (ее, его, мой, мой, наш)
RB наречие (изредка, быстро)
Расширение RBR наречие, сравнительный (большой)
RBS наречие, превосходная степень (самый большой)
RP частица (о)
К бесконечный маркер (до)
UH междометие (до свидания)
VB глагол (спрашивать)
ВБГ глагол-герундий (судить)
ВБД глагол прошедшего времени (умолял)
ВБН глагол причастие прошедшего времени (воссоединенный)
ВБП глагол, настоящее время, а не 3-е лицо единственного числа(обертка)
ВБЗ Глагол, настоящее время, 3-е лицо единственного числа (основания)
WDT WH-определитель (то, что)
WP WH- местоимение (кто)
ВРБ WH- наречие (как)

Приведенный выше список тегов NLTK POS содержит все теги NLTK POS. Тегер NLTK POS используется для присвоения грамматической информации каждому слову предложения. Установка, импорт и загрузка всех пакетов POS NLTK завершена.

Что такое чанкинг в НЛП?

лязг В НЛП — это процесс, позволяющий взять небольшие фрагменты информации и сгруппировать их в большие блоки. Основное использование фрагментации — создание групп «именных фраз». Он используется для придания структуры предложению путем использования тегов POS в сочетании с регулярными выражениями. Полученная группа слов называется «кусками». Это также называется поверхностным анализом.

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

Правила разбиения на части

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

Например, вам нужно отметить существительное, глагол (прошедшее время), прилагательное и координационное соединение предложения. Вы можете использовать правило, как показано ниже

кусок:{ * * * ?}

В следующей таблице показано, что означают различные символы:

Название символа Описание
. Любой символ, кроме новой строки
* Сопоставьте 0 или более повторений
? Сопоставьте 0 или 1 повторений

Теперь давайте напишем код, чтобы лучше понять правило.

from nltk import pos_tag
from nltk import RegexpParser
text ="learn php from guru99 and make study easy".split()
print("After Split:",text)
tokens_tag = pos_tag(text)
print("After Token:",tokens_tag)
patterns= """mychunk:{<NN.?>*<VBD.?>*<JJ.?>*<CC>?}"""
chunker = RegexpParser(patterns)
print("After Regex:",chunker)
output = chunker.parse(tokens_tag)
print("After Chunking",output)

Вывод:

After Split: ['learn', 'php', 'from', 'guru99', 'and', 'make', 'study', 'easy']
After Token: [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN'), ('and', 'CC'), ('make', 'VB'), ('study', 'NN'), ('easy', 'JJ')]
After Regex: chunk.RegexpParser with 1 stages:
RegexpChunkParser with 1 rules:
       <ChunkRule: '<NN.?>*<VBD.?>*<JJ.?>*<CC>?'>
After Chunking (S
  (mychunk learn/JJ)
  (mychunk php/NN)
  from/IN
  (mychunk guru99/NN and/CC)
  make/VB
  (mychunk study/NN easy/JJ))

Вывод из вышеизложенного. Разметка частей речи. Python пример: «make» — это глагол, который не включен в правило, поэтому он не помечен как mychunk.

Вариант использования фрагментации

Чанкинг используется для обнаружения объектов. Сущность — это та часть предложения, с помощью которой машина получает ценность любого намерения.

Example: 
Temperature of New York. 
Here Temperature is the intention and New York is an entity. 

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

Код для демонстрации варианта использования

 import nltk
text = "learn php from guru99"
tokens = nltk.word_tokenize(text)
print(tokens)
tag = nltk.pos_tag(tokens)
print(tag)
grammar = "NP: {<DT>?<JJ>*<NN>}"
cp  =nltk.RegexpParser(grammar)
result = cp.parse(tag)
print(result)
result.draw()    # It will draw the pattern graphically which can be seen in Noun Phrase chunking 

Вывод:

['learn', 'php', 'from', 'guru99']  -- These are the tokens
[('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN')]   -- These are the pos_tag
(S (NP learn/JJ php/NN) from/IN (NP guru99/NN))        -- Noun Phrase Chunking

График

Граф разделения существительной фразы
Граф разделения существительных фраз

Из графика можно сделать вывод, что «learn» и «guru99» — это два разных токена, но они относятся к категории существительных, тогда как токен «from» не относится к именной фразе.

Разделение на части используется для категоризации разных токенов в один и тот же фрагмент. Результат будет зависеть от выбранной грамматики. Дальнейшее разделение NLTK используется для разметки шаблонов и изучения текстовых корпусов.

ПОДСЧЕТ POS-ТЕГОВ

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

Как считать теги:

Здесь сначала мы напишем рабочий код, а затем напишем различные шаги для объяснения кода.

from collections import Counter
import nltk
text = "Guru99 is one of the best sites to learn WEB, SAP, Ethical Hacking and much more online."
lower_case = text.lower()
tokens = nltk.word_tokenize(lower_case)
tags = nltk.pos_tag(tokens)
counts = Counter( tag for word,  tag in tags)
print(counts)

Вывод:

Counter({'NN': 5, ',': 2, 'TO': 1, 'CC': 1, 'VBZ': 1, 'NNS': 1, 'CD': 1, '.': 1 , 'DT': 1, 'JJS': 1, 'JJ': 1, 'JJR': 1, 'IN': 1, 'VB': 1, 'RB': 1})

Разработка кода

ПОДСЧЕТ POS-ТЕГОВ

  1. Для подсчета тегов вы можете использовать пакет Counter из модуля коллекции. Счетчик — это подкласс словаря, который работает по принципу операции «ключ-значение». Это неупорядоченная коллекция, в которой элементы хранятся как ключ словаря, а счетчик — это их значение.
  2. Импортируйте nltk, который содержит модули для токенизации текста.
  3. Напишите текст, pos_tag которого вы хотите посчитать.
  4. Некоторые слова написаны заглавными буквами, а некоторые — строчными, поэтому перед применением токенизации целесообразно преобразовать все слова в нижний регистр.
  5. Передайте слова через word_tokenize из nltk.
  6. Вычислить pos_tag каждого токена
    Output = [('guru99', 'NN'), ('is', 'VBZ'), ('one', 'CD'), ('of', 'IN'), ('the', 'DT'), ('best', 'JJS'), ('site', 'NN'), ('to', 'TO'), ('learn', 'VB'), ('web', 'NN'), (',', ','), ('sap', 'NN'), (',', ','), ('ethical', 'JJ'), ('hacking', 'NN'), ('and', 'CC'), ('much', 'RB'), ('more', 'JJR'), ('online', 'JJ')]
  7. Теперь наступает роль словарного счетчика. Мы импортировали строку кода 1. Слова — это ключ, а теги — это значение, а счетчик будет подсчитывать общее количество каждого тега, присутствующего в тексте.

Распределение частоты

Частотное распределение называется количеством раз, когда возникает результат эксперимента. Он используется для определения частоты появления каждого слова в документе. Оно использует FreqDistclass и определяется nltk.probabilty модуль.

Частотное распределение обычно создается путем подсчета выборок при повторном проведении эксперимента. Число отсчетов каждый раз увеличивается на единицу. Например

freq_dist = FreqDist()

для токена в документе:

freq_dist.inc(токен.тип())

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

  1. Метод подсчета: freq_dist.count('and') Это выражение возвращает значение количества раз, когда произошло "и". Это называется методом подсчета.
  2. Частотный метод: freq_dist.freq('and')Это выражение возвращает частоту заданной выборки.

Мы напишем небольшую программу и подробно объясним ее работу. Мы напишем текст и посчитаем частотное распределение каждого слова в тексте.

import nltk
a = "Guru99 is the site where you can find the best tutorials for Software Testing     Tutorial, SAP Course for Beginners. Java Tutorial for Beginners and much more. Please     visit the site guru99.com and much more."
words = nltk.tokenize.word_tokenize(a)
fd = nltk.FreqDist(words)
fd.plot()

Распределение частоты

Расшифровка кода:

  1. Импортируйте модуль nltk.
  2. Напишите текст, распределение слов которого вам нужно найти.
  3. Маркируйте каждое слово в тексте, который служит входными данными для модуля FreqDist nltk.
  4. Примените каждое слово к nlk.FreqDist в виде списка.
  5. Постройте слова на графике, используя функциюplot().

Пожалуйста, визуализируйте график для лучшего понимания написанного текста.

Распределение частот каждого слова на графике

Распределение частот каждого слова на графике

ПРИМЕЧАНИЕ. Чтобы увидеть приведенный выше график, вам необходимо установить matplotlib.

Обратите внимание на график выше. Это соответствует подсчету встречаемости каждого слова в тексте. Это помогает в изучении текста и дальнейшем осуществлении текстового сентиментального анализа. Вкратце, можно сделать вывод, что в nltk есть модуль для подсчета появления каждого слова в тексте, который помогает подготовить статистику особенностей естественного языка. Он играет значительную роль в поиске ключевых слов в тексте. Вы также можете извлечь текст из PDF-файла, используя такие библиотеки, как Extract, PyPDF2, и передать текст в nlk.FreqDist.

Ключевой термин — «токенизация». После токенизации он проверяет каждое слово в данном абзаце или текстовом документе, чтобы определить, сколько раз оно встречалось. Для этого вам не нужен набор инструментов NLTK. Вы также можете сделать это, используя свои собственные навыки программирования на Python. Инструментарий NLTK предоставляет только готовый к использованию код для различных операций.

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

Словосочетания: биграммы и триграммы

Что такое коллокации?

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

Рассмотрим электромагнитный спектр с помощью таких слов, как ультрафиолетовые лучи, инфракрасные лучи.

Слова ультрафиолет и лучи не используются по отдельности и, следовательно, могут рассматриваться как словосочетание. Другой пример — компьютерная томография. Мы не говорим «КТ» и «Сканирование» отдельно, и, следовательно, они также рассматриваются как словосочетание.

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

Коллокацию можно разделить на два типа:

  • Биграммы cсочетание двух слов
  • Триграммысочетание трех слов

Биграммы и триграммы предоставляют более значимые и полезные функции на этапе извлечения признаков. Они особенно полезны в текстовом сентиментальном анализе.

Пример кода биграмм

import nltk

text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.bigrams(Tokens))
print(output)

Вывод:

[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]

Пример кода триграмм

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

Тот же код запускается для расчета триграмм.

import nltk
text = “Guru99 is a totally new kind of learning experience.”
Tokens = nltk.word_tokenize(text)
output = list(nltk.trigrams(Tokens))
print(output)

Вывод:

[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]   

Маркировка предложений

Маркировка предложения в более широком смысле означает добавление меток глагола, существительного и т. Д. В зависимости от контекста предложения. Идентификация POS-меток — сложный процесс. Таким образом, общая пометка POS вручную невозможна, поскольку некоторые слова могут иметь разные (неоднозначные) значения в зависимости от структуры предложения. Преобразование текста в форму списка является важным шагом перед маркировкой, поскольку каждое слово в списке зацикливается и учитывается для определенного тега. Пожалуйста, посмотрите приведенный ниже код, чтобы лучше понять его.

import nltk
text = "Hello Guru99, You have to build a very good site, and I love visiting your site."
sentence = nltk.sent_tokenize(text)
for sent in sentence:
	 print(nltk.pos_tag(nltk.word_tokenize(sent)))

Вывод:

[('Привет', 'NNP'), ('Guru99', 'NNP'), (',', ','), ('Вы', 'PRP'), ('есть', 'VBP') , ('сборка', 'VBN'), ('a', 'DT'), ('очень', 'RB'), ('хорошо', 'JJ'), ('сайт', 'NN') , ('и', 'СС'), ('Я', 'ПРП'), ('люблю', 'ВБП'), ('в гостях', 'ВБГ'), ('ваш', 'ПРП$' ), ('сайт', 'NN'), ('.', '.')]

Маркировка предложений

Пояснение к коду:

  1. Код для импорта nltk (набор инструментов естественного языка, который содержит подмодули, такие как токенизация предложений и токенизация слов.)
  2. Текст, теги которого необходимо напечатать.
  3. Токенизация предложения
  4. Реализован цикл for, в котором слова маркируются из предложения, а тег каждого слова выводится как выходные данные.

В Corpus есть два типа POS-тегеров:

  • на основе правил
  • Стохастические POS-теггеры

1. POS-теггер на основе правил: Для слов, имеющих неоднозначное значение, применяется правильный подход на основе контекстной информации. Это делается путем проверки или анализа значения предыдущего или последующего слова. Информация анализируется из окружения слова или внутри него самого. Поэтому слова помечаются грамматическими правилами конкретного языка, такими как использование заглавных букв и пунктуация. например, тагер Брилла.

2. Стохастический POS-теггер: В рамках этого метода применяются различные подходы, такие как частота или вероятность. Если слово в основном помечено определенным тегом в обучающем наборе, то в тестовом предложении ему присваивается этот конкретный тег. Словесный тег зависит не только от своего собственного тега, но и от предыдущего тега. Этот метод не всегда точен. Другой способ — вычислить вероятность появления определенного тега в предложении. Таким образом, окончательный тег рассчитывается путем проверки наибольшей вероятности слова с определенным тегом.

Маркировка POS со скрытой марковской моделью

Проблемы с маркировкой также можно смоделировать с помощью HMM. Он рассматривает входные токены как наблюдаемую последовательность, в то время как теги считаются скрытыми состояниями, и цель состоит в том, чтобы определить последовательность скрытых состояний. Например х = х1,x2,…………,Иксn где x — последовательность токенов, а у = у1,y2,y3,y4………йnэто скрытая последовательность.

Как работает скрытая марковская модель (HMM)?

HMM использует распределение соединений, которое представляет собой P(x, y), где x — входная последовательность/последовательность токенов, а y — последовательность тегов.

Последовательность тегов для x будет argmaxу1….ынp(x1,x2,….xn,y1,y2,y3,…..). Мы классифицировали теги из текста, но статистика по таким тегам очень важна. Итак, следующая часть — подсчет этих тегов для статистического исследования.

Итого

  • POS-теги НЛТК Это процесс разметки слов в текстовом формате для определенной части речи на основе ее определения и контекста.
  • Некоторые примеры тегов POS NLTK: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO и т. д.
  • POS-тегер используется для присвоения грамматической информации каждому слову предложения. Установка, импорт и загрузка всех пакетов тегирования части речи с помощью NLTK завершены.
  • Разбиение на части в НЛП — это процесс, в ходе которого небольшие фрагменты информации группируются в большие блоки.
  • Предопределенных правил нет, но вы можете комбинировать их в соответствии с потребностями и требованиями.
  • Чанкинг используется для обнаружения объектов. Сущность — это та часть предложения, с помощью которой машина получает ценность любого намерения.
  • Разделение на части используется для категоризации разных токенов в один и тот же фрагмент.