POS тегування за допомогою NLTK і Chunking у NLP [ПРИКЛАДИ]
POS тегування
POS тегування (Parts of Speech Tagging) – це процес позначення слів у текстовому форматі для певної частини мови на основі її визначення та контексту. Він відповідає за читання тексту мовою та присвоєння певної лексеми (частини мови) кожному слову. Його також називають граматичним тегом.
Давайте навчимося на прикладі частини мови NLTK:
Вхідний сигнал: Все, щоб нам дозволити.
вихід: [('Усе', NN),('до', ДО), ('дозвіл', VB), ('нас', PRP)]
Етапи, включені до прикладу тегування 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 | іменник множина (парти) |
НПП | власний іменник, однина (сара) |
NNPS | власний іменник, множина (індіанці або американці) |
PDT | передвизначник (все, обидва, половина) |
POS | присвійне закінчення (батьківський) |
PRP | особистий займенник (hers, herself, him, yourself) |
PRP$ | присвійний займенник (її, його, моє, мій, наш) |
RB | прислівник (зрідка, швидко) |
Розширення RBR | прислівник, порівняльний (більший) |
RBS | прислівник, найвищий ступінь (найбільший) |
RP | частка (про) |
TO | нескінченний маркер (до) |
UH | вставне слово (до побачення) |
VB | дієслово (питати) |
ГЗН | дієслівний герундій (судження) |
VBD | дієслово минулого часу (просив) |
ВБН | дієприкметник минулого часу (повторно) |
VBP | дієслово, теперішній час, а не 3-я особа однини (загорнути) |
VBZ | дієслово теперішнього часу з 3-ю особою однини (основи) |
вага | wh-визначник (що, що) |
WP | wh- займенник (хто) |
WRB | wh- прислівник (як) |
Наведений вище список тегів NLTK POS містить усі теги NLTK POS. Теггер NLTK POS використовується для призначення граматичної інформації кожному слову речення. Встановлення, імпортування та завантаження всіх пакетів POS NLTK завершено.
Що таке Чанкінг в НЛП?
Чунчінг в НЛП - це процес взяття невеликих фрагментів інформації та групування їх у великі одиниці. Основним використанням Chunking є створення груп «фраз з іменниками». Він використовується для додавання структури до речення за допомогою тегів 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» — це дві різні лексеми, але вони класифікуються як іменникова фраза, тоді як лексема «від» не належить до іменникової фрази.
Розбиття на фрагменти використовується для класифікації різних токенів в один фрагмент. Результат залежатиме від вибраної граматики. Подальше фрагментування 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)
вихід:
Лічильник ({'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})
Розробка коду
- Щоб підрахувати теги, ви можете використовувати пакет Counter з модуля колекції. Лічильник - це підклас словника, який працює за принципом операції ключ-значення. Це невпорядкована колекція, де елементи зберігаються як словниковий ключ, тоді як кількість є їхнім значенням.
- Імпортуйте nltk, який містить модулі для токенізації тексту.
- Напишіть текст, чий pos_tag ви хочете підрахувати.
- Деякі слова написані у верхньому регістрі, а деякі – у нижньому, тому доцільно перетворити всі слова у нижній регістр перед застосуванням токенізації.
- Передайте слова через word_tokenize з nltk.
- Обчисліть 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')]
- Тепер настає роль лічильника словника. Ми імпортували рядок коду 1. Слова є ключем, а теги — значенням, а лічильник підраховуватиме загальну кількість кожного тегу в тексті.
Розподіл частоти
Розподілом частоти називають кількість випадків, коли результат експерименту виникає. Він використовується для визначення частоти кожного слова, що зустрічається в документі. Це використовує FreqDistclass і визначається nltk.probabilty модуль
Частотний розподіл зазвичай створюється шляхом підрахунку вибірок багаторазового проведення експерименту. Кількість підрахунків щоразу збільшується на одиницю. напр
freq_dist = FreqDist()
для маркера в документі:
freq_dist.inc(token.type())
Для будь-якого слова ми можемо перевірити, скільки разів воно зустрічалося в певному документі. напр
- Метод підрахунку: freq_dist.count('and')Цей вираз повертає значення кількості разів "і". Він називається методом підрахунку.
- Частотний метод: 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()
Пояснення коду:
- Імпортувати модуль nltk.
- Запишіть текст, розподіл слів якого потрібно знайти.
- Токенізуйте кожне слово в тексті, який подається як вхідні дані для модуля FreqDist nltk.
- Застосуйте кожне слово до nlk.FreqDist у вигляді списку
- Побудуйте слова на графіку за допомогою plot()
Будь ласка, візуалізуйте графік для кращого розуміння написаного тексту

ПРИМІТКА. Вам потрібно встановити matplotlib, щоб побачити наведений вище графік
Зверніть увагу на графік вище. Це відповідає підрахунку появи кожного слова в тексті. Це допомагає у вивченні тексту та подальшому впровадженні текстового сентиментального аналізу. У двох словах можна зробити висновок, що nltk має модуль для підрахунку появи кожного слова в тексті, який допомагає підготувати статистику властивостей природної мови. Він відіграє важливу роль у пошуку ключових слів у тексті. Ви також можете витягти текст із PDF-файлу за допомогою таких бібліотек, як extract, PyPDF2, і передати текст у nlk.FreqDist.
Ключовим терміном є «токенізація». Після токенізації він перевіряє кожне слово в певному абзаці чи текстовому документі, щоб визначити, скільки разів воно повторилося. Для цього вам не потрібен інструментарій NLTK. Ви також можете зробити це за допомогою власних навичок програмування на Python. Набір інструментів NLTK надає лише готовий до використання код для різних операцій.
Підрахунок кожного слова може бути не дуже корисним. Замість цього слід зосередитися на колокації та біграмах, які мають справу з великою кількістю слів у парі. Ці пари визначають корисні ключові слова для кращих функцій природної мови, які можна передати машині. Будь ласка, перегляньте їх деталі нижче.
Сполучення: біграми та триграми
Що таке колакації?
Словосполучення — це пари слів, які багато разів зустрічаються разом у документі. Він обчислюється за кількістю цих пар, які зустрічаються разом, до загальної кількості слів у документі.
Розглянемо електромагнітний спектр такими словами, як ультрафіолетові промені, інфрачервоні промені.
Слова ультрафіолет і промені не вживаються окремо, тому їх можна розглядати як словосполучення. Іншим прикладом є КТ. Ми не говоримо, що КТ і сканування окремо, і, отже, вони також розглядаються як сумісне розташування.
Можна сказати, що пошук словосполучень вимагає обчислення частот слів і їх появи в контексті інших слів. Ці специфічні набори слів потребують фільтрації, щоб зберегти терміни корисного вмісту. Потім кожен грам слів може бути оцінений відповідно до певної міри асоціації, щоб визначити відносну ймовірність того, що кожен Ingram є словосполученням.
Спільне розташування можна розділити на два типи:
- Біграми 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)))
вихід:
[('Hello', 'NNP'), ('Guru99', 'NNP'), (',', ','), ('You', 'PRP'), ('have', 'VBP') , ('build', 'VBN'), ('a', 'DT'), ('very', 'RB'), ('good', 'JJ'), ('site', 'NN') , ('and', 'CC'), ('I', 'PRP'), ('love', 'VBP'), ('visiting', 'VBG'), ('your', 'PRP$' ), ('сайт', 'NN'), ('.', '.')]
Пояснення коду:
- Код для імпорту nltk (набір інструментів природної мови, який містить такі підмодулі, як tokenize речення та word tokenize.)
- Текст, теги якого потрібно надрукувати.
- Токенізація речень
- Реалізовано цикл for, у якому слова виділяються з речення, а тег кожного слова друкується як результат.
У Corpus існує два типи POS тегерів:
- На основі правил
- Стохастичні POS тегери
1. POS Tagger на основі правил: Для слів, що мають неоднозначне значення, застосовано підхід, заснований на правилах на основі контекстної інформації. Це робиться шляхом перевірки або аналізу значення попереднього або наступного слова. Інформація аналізується з оточення слова або всередині нього самого. Тому слова позначені граматичними правилами певної мови, такими як використання великих літер і пунктуація. наприклад, теггер Брилла.
2.Stochastic POS Tagger: За цим методом застосовуються різні підходи, такі як частота або ймовірність. Якщо слово здебільшого позначене певним тегом у навчальному наборі, тоді в тестовому реченні йому надається саме цей тег. Тег слова залежить не лише від власного тегу, а й від попереднього тегу. Цей метод не завжди точний. Інший спосіб - розрахувати ймовірність появи певного тега в реченні. Таким чином, остаточний тег обчислюється шляхом перевірки найвищої ймовірності слова з певним тегом.
POS тегування за допомогою прихованої марковської моделі
Проблеми тегування також можна моделювати за допомогою HMM. Він розглядає вхідні маркери як спостережувану послідовність, тоді як теги розглядаються як приховані стани, а метою є визначення послідовності прихованих станів. Наприклад х = х1,x2,…………,xn де x — послідовність лексем while y = y1,y2,y3,y4………рnце прихована послідовність.
Як працює прихована модель Маркова (HMM)?
HMM використовує розподіл об’єднань, який є P(x, y), де x — вхідна послідовність/послідовність маркерів, а y — послідовність тегів.
Послідовність тегів для x буде argmaxy1….ynp(x1,x2,….xn,y1,y2,y3,…..). Ми класифікували теги з тексту, але статистика таких тегів життєво важлива. Отже, наступна частина — це підрахунок цих тегів для статистичного дослідження.
Підсумки
- POS тегування в НЛТК це процес позначення слів у текстовому форматі для певної частини мови на основі її визначення та контексту.
- Деякі приклади тегів NLTK POS: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO тощо.
- POS теггер використовується для призначення граматичної інформації кожному слову речення. Встановлення, імпортування та завантаження всіх пакетів додавання тегів частини мови за допомогою NLTK завершено.
- Розбиття на фрагменти в НЛП - це процес взяття невеликих фрагментів інформації та групування їх у великі блоки.
- Немає попередньо визначених правил, але ви можете поєднувати їх відповідно до потреби та вимоги.
- Для виявлення сутності використовується фрагментація. Сутність — це та частина речення, за допомогою якої машина отримує значення будь-якого наміру.
- Розбиття на фрагменти використовується для класифікації різних токенів в один фрагмент.