НЛП — от нуля до героя с Python

Пособие по изучению НЛП с основными идеями

Темы для обсуждения:

Фото С уважением Медиа на Unsplash

«Структуры данных Python, типы данных и объекты»

Раздел 1: Введение в НЛП, Руководство по установке Spacy и NLTK

Раздел 2. Основные сведения о тексте, регулярное выражение

Раздел 3. Токенизация и создание базы данных

Раздел 4. Лемматизация и стоп-слова

Раздел 5: Распознавание частей речи (POS) и именованных сущностей (NER)

Давайте поговорим об этом шаг за шагом.

Полезные понятия об объектах классов в python

medium.com

Секция 1:

Введение в НЛП

Инструкция по установке

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

В этой статье мы проведем морфологическое исследование языковой обработки с помощью Python с использованием таких библиотек, как Spacy и NLTK.

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

Давайте рассмотрим, что мы будем использовать Jupyter Notebook для всей нашей обработки и анализа языковой обработки. Jupyter поставляется в дистрибутиве anaconda.

Во-первых, установите дистрибутив Anaconda по этой «ссылке». После установки anaconda устанавливает библиотеку Spacy и NLTK в вашей среде.

Раздел 2:

Для установки Spacy ссылка здесь.

Для установки НЛТК ссылка здесь.

Чтобы загрузить библиотеку английского языка для spacy,

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

python -m spacy download en   #en stands for english

Основная концепция

Регулярное выражение

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

Возьмите пример:

print('Amit')#output: Amit

Название строки GURUGRAM, название моего города. Когда нам нужно выбрать определенный диапазон алфавита, мы используем метод нарезки и метод индексации. Когда мы идем слева направо, индексация начинается с 0, а когда мы хотим алфавит справа налево, то она начинается с минуса (-1), а не с нуля.

Фото создано автором

С питоном

Теперь получаем персонажа с нарезкой

#first insert the string to a variablestring = GURUGRAM#get first alphabet with index
print(string[0])#output: G #printing multiple alphabets
print(string[2], string[5])#output: RR#for getting alphabet with negative indexing
print(string[-4])#output: G

Давайте попробуем разобраться с предложениями. Пример очистки предложения со звездочкой в ​​нем. Давайте

print(string[0:2])#output: GUprint(string[1:4])#output: URU

Я наткнулся на функцию с именем strip(). Эта функция удаляет символы в начале и в конце, но не может удалять символы в середине. Если мы не укажем удаляющий символ, то по умолчанию он удалит пробелы.

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

#A sentence and the removing character from the sentence
sentence = "****Hello World! I am Amit Chauhan****"
removing_character = "*"#using strip function to remove star(*)
sentence.strip(removing_character)#output: 'Hello World! I am Amit Chauhan'

Как и функция полосы, я также столкнулся с другой операцией — операция соединения.

Пример:

Регулярное выражение иногда называют реляционным выражением или RegEx, которое используется для сопоставления символов или строк и, во многих случаях, для поиска и замены символов или строк.

str1 = "Happy"
str2 = "Home"" Good ".join([str1, str2])#output: 'Happy Good Home'

Раздел 3:

Давайте посмотрим, как работать со строкой и шаблоном в регулярном выражении. Во-первых, мы увидим, как импортировать регулярное выражение на практике.

Как использовать «re» для простой строки

# to use a regular expression, we need to import re
import re

Пример:

Пусть у нас есть предложение, в котором мы должны найти строку и некоторые операции над строкой.

Как искать строку в предложении

sentence = "My computer gives a very good performance in a very short time."
string = "very"

Мы также можем выполнять некоторые операции с этой строкой. Чтобы проверить все операции, напишите str_match. Затем нажмите вкладку. Он покажет все операции.

str_match = re.search(string, sentence)
str_match#output:
<re.Match object; span=(20, 24), match='very'>

Все операции над строкой. Фото автора

Здесь показан диапазон первой строки «очень», 20 означает, что она начинается с 20-го индекса и заканчивается 24-м индексом в предложении. Что, если мы хотим найти слово, которое встречается несколько раз, для этого мы используем операцию findall.

str_match.span()#output:
(20, 24)

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

find_all = re.findall("very", sentence)
find_all#output: ['very', 'very']

Некоторые из регулярных выражений: (a–z), (A–Z), (0–9), (\- \.), (@, #, $, %). Эти выражения используются для поиска шаблонов в тексте и, при необходимости, для очистки данных. С шаблонами, когда мы можем использовать квантификаторы, чтобы узнать, сколько выражений мы ожидаем.

for word in re.finditer("very", sentence):
    print(word.span())#output:(20, 24)
(47, 51)

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

Токенизация

Стемминг

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

Мы можем получить токены от индексации и нарезки.

#import library
import spacy#Loading spacy english library
load_en = spacy.load('en_core_web_sm')#take an example of string
example_string = "I'm going to meet\ M.S. Dhoni."#load string to library 
words = load_en(example_string)#getting tokens pieces with for loop
for tokens in words:
    print(tokens.text)#output:"
I
'm
going
to
meet
M.S.
Dhoni
.
"

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

str1 = load_en(u"This laptop belongs to Amit Chauhan")#getting tokens with index
str1[1]#output: laptop#getting tokens with slicing
str1[2:6]#output: belongs to Amit Chauhan

Раздел 4:

Типы стеммера

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

  1. Снежок Стеммер
  2. «https://www.scitechnol.com/peer-review-pdfs/bjoi/rkto/Seahawks-v-Eagles-Nflive0.html»
    «https://www.scitechnol.com/peer-review- pdfs/bjoi/rkto/Seahawks-v-Eagles-Nflive1.html»
    «https://www.scitechnol.com/peer-review-pdfs/bjoi/rkto/Seahawks-v-Eagles-Nflive2.html »
    «https://www.scitechnol.com/peer-review-pdfs/bjoi/rkto/Seahawks-v-Eagles-Nflive3.html»
    «https://www.scitechnol.com /peer-review-pdfs/bjoi/rkto/Seahawks-v-Eagles-Nflive4.html»
    «https://www.scitechnol.com/peer-review-pdfs/bjoi/rkto/Seahawks-v- Eagles-Nflive5.html»
    «https://www.scholarscentral.org/editorial-tracking/video-submissions/disk/rkto/Seahawks-v-Eagles-Nflive0.html»
    «https: //www.scholarscentral.org/editorial-tracking/video-submissions/disk/rkto/Seahawks-v-Eagles-Nflive1.html»
    «https://www.scholarscentral.org/editorial-tracking/video -submissions/disk/rkto/Seahawks-v-Eagles-Nflive2.html»
    «https://www.scholarscentral.org/editorial-tracking/video-submissions/disk/rkto/Seahawks -v-Eagles-Nflive3.html»
    «https://www.scholarscentral.org/editorial-tracking/video-submissions/disk/rkto/Seahawks-v-Eagles-Nflive4.html»
    «https://www.scholarscentral.org/editorial-tracking/video-submissions/disk/rkto/Seahawks-v-Eagles-Nflive5.html»
    «https://ceds.ed.gov/cnnb/ bnd/Seahawks-v-Eagles-Nflive0.html»
    «https://ceds.ed.gov/cnnb/bnd/Seahawks-v-Eagles-Nflive1.html»
    «https:// ceds.ed.gov/cnnb/bnd/Seahawks-v-Eagles-Nflive2.html»
    «https://ceds.ed.gov/cnnb/bnd/Seahawks-v-Eagles-Nflive3.html»< br /> «https://ceds.ed.gov/cnnb/bnd/Seahawks-v-Eagles-Nflive4.html»
    «https://ceds.ed.gov/cnnb/bnd/Seahawks-v -Eagles-Nflive5.html»
    «https://www.scitechnol.com/peer-review-pdfs/bjoi/rkto/Seahawks-v-Eagles-nflive-00.html»
    «https ://www.scitechnol.com/peer-review-pdfs/bjoi/rkto/Seahawks-v-Eagles-nflive-01.html»
    «https://www.scitechnol.com/peer-review- pdfs/bjoi/rkto/Seahawks-v-Eagles-nflive-02.html»
    «https://www.scitechnol.com/peer-review-p dfs/bjoi/rkto/Seahawks-v-Eagles-nflive-03.html»
    «https://www.scitechnol.com/peer-review-pdfs/bjoi/rkto/Seahawks-v-Eagles-nflive -04.html»
    «https://www.scitechnol.com/peer-review-pdfs/bjoi/rkto/Seahawks-v-Eagles-nflive-05.html»
    «https:/ /www.scitechnol.com/peer-review-pdfs/bjoi/rkto/Seahawks-v-Eagles-nflive-06.html»
    «https://www.scitechnol.com/peer-review-pdfs/ bjoi/rkto/Seahawks-v-Eagles-nflive-07.html»
    «https://www.scitechnol.com/peer-review-pdfs/bjoi/rkto/Seahawks-v-Eagles-nflive-08 .html»
    «https://www.scitechnol.com/peer-review-pdfs/bjoi/rkto/Seahawks-v-Eagles-nflive-09.html»
    «https://ceds .ed.gov/cnnb/bnd/Seahawks-v-Eagles-nflive-00.html»
    «https://ceds.ed.gov/cnnb/bnd/Seahawks-v-Eagles-nflive-01. html»
    «https://ceds.ed.gov/cnnb/bnd/Seahawks-v-Eagles-nflive-02.html»
    «https://ceds.ed.gov/cnnb/ bnd/Seahawks-v-Eagles-nflive-03.html»
    «https://ceds.ed.gov/cnnb/bnd/Seahawks-v-Eagles-nflive-04.html»
    « https://ceds.ed.gov/cnnb/ bnd/Seahawks-v-Eagles-nflive-05.html»
    «https://ceds.ed.gov/cnnb/bnd/Seahawks-v-Eagles-nflive-06.html»
    « https://ceds.ed.gov/cnnb/bnd/Seahawks-v-Eagles-nflive-07.html»
    «https://ceds.ed.gov/cnnb/bnd/Seahawks-v-Eagles -nflive-08.html»
    «https://ceds.ed.gov/cnnb/bnd/Seahawks-v-Eagles-nflive-09.html»
    «https://www.scholarscentral .org/editorial-tracking/video-submissions/disk/rkto/Seahawks-v-Eagles-nflive-00.html»
    «https://www.scholarscentral.org/editorial-tracking/video-submissions/ disk/rkto/Seahawks-v-Eagles-nflive-01.html»
    «https://www.scholarscentral.org/editorial-tracking/video-submissions/disk/rkto/Seahawks-v-Eagles-nflive -02.html»
    «https://www.scholarscentral.org/editorial-tracking/video-submissions/disk/rkto/Seahawks-v-Eagles-nflive-03.html»
    «https ://www.scholarscentral.org/editorial-tracking/video-submissions/disk/rkto/Seahawks-v-Eagles-nflive-04.html»
    «https://www.scholarscentral.org/editorial- отслеживание/видео-подачи/диск/r kto/Seahawks-v-Eagles-nflive-05.html»
    «https://www.scholarscentral.org/editorial-tracking/video-submissions/disk/rkto/Seahawks-v-Eagles-nflive-06 .html»
    «https://www.scholarscentral.org/editorial-tracking/video-submissions/disk/rkto/Seahawks-v-Eagles-nflive-07.html»
    «https:/ /www.scholarscentral.org/editorial-tracking/video-submissions/disk/rkto/Seahawks-v-Eagles-nflive-08.html»
    «https://www.scholarscentral.org/editorial-tracking/ видео-представления/диск/rkto/Seahawks-v-Eagles-nflive-09.html»
    «https://www.ppi.ph/sites/default/files/webform/Seahawks-v-Eagles-nflive -00.html»
    «https://www.ppi.ph/sites/default/files/webform/Seahawks-v-Eagles-nflive-01.html»
    «https://www .ppi.ph/sites/default/files/webform/Seahawks-v-Eagles-nflive-02.html»
    «https://www.ppi.ph/sites/default/files/webform/Seahawks- v-Eagles-nflive-03.html»
    «https://www.ppi.ph/sites/default/files/webform/Seahawks-v-Eagles-nflive-04.html»
    « https://www.ppi

Стеммер Портера, разработанный в 1980 году. Он используется для приведения слова к его основе или корневому слову.

Как мы видим выше, слова сведены к своему основному слову, но одно замечено, что стеммер портера не дает много хороших результатов. Вот почему стеммер Snowball используется для более совершенного метода.

#import nltk library
import nltk#import porter stemmer from nltk
from nltk.stem.porter import PorterStemmer
pot_stem = PorterStemmer()#random words to test porter stemmer
words = ['happy', 'happier', 'happiest', 'happiness', 'breathing', 'fairly']for word in words:
    print(word + '----->' + pot_stem.stem(word))#output:happy----->happi
happier----->happier
happiest----->happiest
happiness----->happi
breathing----->breath
fairly----->fairli

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

from nltk.stem.snowball import SnowballStemmer
snow_stem = SnowballStemmer(language='english')for word in words:
    print(word + '----->' + snow_stem.stem(word))#output:happy----->happi
happier----->happier
happiest----->happiest
happiness----->happi
breathing----->breath
fairly----->fair

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

Стоп-слова

Описание слов в процессе лемматизации. Фото автора

#import library
import spacy#Loading spacy english library
load_en = spacy.load('en_core_web_sm')#take an example of string
example_string = load_en(u"I'm happy in this happiest place with all happiness. It feels how happier we are")for lem_word in example_string:
    print(lem_word.text, '\t', lem_word.pos_, '\t', lem_word.lemma, '\t', lem_word.lemma_)

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

Стоп-слово используется для фильтрации некоторых слов, которые часто повторяются и не дают информации о тексте. В Spacy есть встроенный список некоторых стоп-слов.

Раздел 5:

Некоторые стоп-слова по умолчанию. Фото автора

#import library
import spacy#Loading spacy english library
load_en = spacy.load('en_core_web_sm')print(load_en.Defaults.stop_words)

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

Часть речи (POS)

Вывод:

Проверяйте токены с индексной позицией.

#import library
import spacy#Loading spacy english library
load_en = spacy.load('en_core_web_sm')str1 = load_en(u"This laptop belongs to Amit Chauhan")

Как вызывать различные операции этим токеном

print(str1[1])#output: laptop

Таким образом, тег грубый – это СУЩЕСТВИТЕЛЬНОЕ, а мелкое зерно тег – это NN, поэтому он говорит, что это существительное в единственном числе. Давайте узнаем, что такое количество POS с помощью spacy.

#pos_ tag operation 
print(str1[1].pos_)#output: NOUN#to know fine grained information
print(str1[1].tag_)#output: NN

Ой! Вы запутались в том, что это за числа, и я проясню ваше замешательство.

pos_count = str1.count_by(spacy.attrs.POS)
pos_count#output: {90: 1, 92: 1, 100: 1, 85: 1, 96: 2}

Давайте проверим, что означает это число 90.

DET означает, что число 90 принадлежит определителю, а значение 1 принадлежит ему в том, что этот DET повторяется один раз в предложении.

str1.vocab[90].text#output: DET

Распознавание именованных объектов (NER)

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

Мы будем делать примеры NER с помощью spacy.

В приведенном выше коде мы видим, что текст проанализирован с помощью NER и нашел Индию как название страны или название штата. Таким образом, мы можем проанализировать, что тегирование выполняется с помощью аннотации объекта.

#import library
import spacy#Loading spacy english library
load_en = spacy.load('en_core_web_sm')#lets label the entity in the text filefile = load_en(u" I am living in India, Studying in IIT")
doc = fileif doc.ents:
    for ner in doc.ents:
        print(ner.text + ' - '+ ner.label_ + ' - ' + 
               str(spacy.explain(ner.label_)))else:
    print(No Entity Found)#output:India - GPE - Countries, cities, states

Эти концепции очень полезны для учащихся и могут дать представление об обработке естественного языка.

Портер Стеммер

Свяжитесь со мной на моем «LinkedIn»

НЛП — От нуля до героя с Python