НЛП — от нуля до героя с 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 для процесса стемминга.
- Снежок Стеммер
- «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