Тегирование Pos и ламметизация с использованием пробелов в Python
Python выступает в качестве неотъемлемого инструмента для понимания концепций и применения машинного и глубокого обучения. Он предлагает множество библиотек и модулей, которые обеспечивают великолепную платформу для создания полезных методов. В этой статье мы обсудим одну такую библиотеку, известную как «spaCy».
spaCy — это библиотека с открытым исходным кодом, которая используется для анализа и сравнения текстовых данных. Мы обсудим эту библиотеку подробно, но прежде чем углубиться в тему, давайте быстро пройдемся по обзору этой статьи и поймем ее маршрут.
Эта статья разделена на два раздела —
-
В первом разделе мы поймем значение spaCy и обсудим концепции PoS-тегов и лемматизации.
Что такое спаСи?
spaCy — это библиотека с открытым исходным кодом, используемая в глубоком обучении. Он управляется обработкой естественного языка (NLP). НЛП само по себе является концептуальной областью искусственного интеллекта. он прокладывает путь для взаимодействия человека и компьютера, придавая смысл человеческим языкам для машин. С помощью SpaCy мы обрабатываем данные в больших масштабах и придаем значение машине.
spaCy написан на Cython и предоставляет интерактивные API.
Монтаж
spaCy устанавливается с помощью «pip».
pip установить пространство
После установки spaCy мы можем импортировать его в нашу IDE. Мы также загрузим пакет конвейера, передав правильное соглашение об именах. Для маркировки PoS и лемматизации мы будем использовать —
en_core_web_sm
Это соглашение об именах определяет, какой пакет конвейера нам нужен. «en» определяет язык, «core» определяет возможности, «web» определяет жанр и «sm » решает размер.
Таким образом, это соглашение загружает пакет на английском языке, его возможности включают в себя тегирование PoS и лемматизацию, а также обучение на письменном веб-тексте.
Что такое pos-теги?
Маркировка PoS (ЧАСТЬ РЕЧИ) — это метод категоризации слов в текстовых данных. Мы можем проанализировать каждое слово и понять его контекст и боковые значения. Мы можем грамматически проверить речь и описать ее структуру.
Он также включает неизвестные слова и изменяет словарный запас. Сам переданный набор данных подвергается глубокому анализу. Мы можем проверить, какой частью речи является глагол, существительное, местоимение, предлог и т. д.
Что такое лемматизация?
Лемматизация — это метод группировки терминов или слов разных версий, которые являются одним и тем же словом. Это неотъемлемый инструмент НЛП, который используется для классификации изменяемых слов, встречающихся в речи.
Мы можем морфологически проанализировать речь и выделить слова с изменяемыми окончаниями, чтобы удалить их. Вся логика лемматизации заключается в том, чтобы собрать слово-основу для изменяемого слова.
Пример
Мы создадим программу для разделения разных частей речи с помощью SpaCy. Сначала мы будем использовать теги PoS и посмотрим, как они работают –
- Мы импортировали spacy после его установки в командной строке.
- Мы создали переменную с именем «load_capabilites», которая инициирует «NLP». Мы загрузили конкретный пакет, то есть «en_core_web_sm».
- Мы передали текстовые данные на анализ.
- Мы создали переменную с именем «Анадата».
- Эта Анадата будет хранить все слова из текстовых данных для анализа в пространстве.
- Мы выполним итерацию для одного слова, а затем с помощью «word.pos_» выполним тегирование PoS для всех слов.
import spacy load_capabilites = spacy.load("en_core_web_sm") data_text = """Python programming can be used to perform numerous mathematical operations and provide solutions for different problems. Python is a very powerful language as it offers multiple modules and methods that are tailor made to perform various operations""" Anadata = load_capabilites(data_text) for word in Anadata: print(word, word.pos_)
Выход
Python PROPN programming NOUN can AUX be AUX used VERB to PART perform VERB numerous ADJ mathematical ADJ operations NOUN and CCONJ provide VERB solutions NOUN for ADP different ADJ problems NOUN . PUNCT SPACE Python PROPN is AUX a DET very ADV powerful ADJ language NOUN as SCONJ it PRON offers VERB multiple ADJ modules NOUN and CCONJ methods NOUN that PRON are AUX tailor AUX made VERB to PART perform VERB various ADJ operations NOUN
Здесь каждый тег что-то означает, например, «PROPN» означает имя собственное, «PUNC» означает пунктуацию. «ADJ» означает прилагательное.
Пример
Мы даже можем выбрать отдельные теги и распечатать их отдельно.
import spacy load_capabilites = spacy.load("en_core_web_sm") data_text = """Python programming can be used to perform numerous mathematical operations and provide solutions for different problems. Python is a very powerful language as it offers multiple modules and methods that are tailor made to perform various operations""" visdata = load_capabilites(data_text) for word in visdata: pass print("Ajectives:", [word.text for word in visdata if word.pos_ == "ADJ" ])
Выход
Ajectives: ['numerous', 'mathematical', 'different', 'powerful', 'multiple', 'various']
Пример
Теперь, когда мы поняли, как работает тегирование PoS, давайте поймем, как работает лемматизация.
import spacy load_capabilites = spacy.load("en_core_web_sm") data_text = """Python programming can be used to perform numerous mathematical operations and provide solutions for different problems. Python is a very powerful language as it offers multiple modules and methods that are tailor made to perform various operations""" visdata = load_capabilites(data_text) for word in visdata: print(word, word.lemma_)
Выход
Python Python programming programming can can be be used use to to perform perform numerous numerous mathematical mathematical operations operation and and provide provide solutions solution for for different different problems problem . . Python Python is be a a very very powerful powerful language language as as it it offers offer multiple multiple modules module and and methods method that that are be tailor tailor made make to to perform perform various various operations operation
Здесь мы использовали «lemma_» для выполнения лемматизации. Все изменяемые слова печатаются в их базовой форме, и теперь мы можем добавить эти слова во внешний словарь, чтобы расширить местный словарь.
Заключение
В этой статье мы рассмотрели основные концепции тегирования и лемматизации PoS и поняли их значение в глубоком обучении. Мы также обсудили различные приложения библиотеки spaCy и ее роль в НЛП.
Что такое pos в python
The pos function searches for a grouping of characters, represented in a substring , within a source_string . The function returns the beginning position of the first occurrence of the substring. Both arguments are string expressions, and they are case sensitive, meaning that «children» is recognized as different from «CHILDREN» .
If using an alpha string or dictionary item, be aware that searching for a space character can lead to the function finding one at the end of your string. You may want to strip alphanumeric variables before searching for spaces.
Return Value
The function returns the position of the first occurrence of the substring, or if the substring is not found, the function returns 0.
VALUE = pos ( «L» , «FOR THE CHILDREN» ); // VALUE will be 12; this is where the
// substring (the letter «L») occurs in the
// source string («FOR THE CHILDREN»)
VALUE = pos ( «DRE» , «CHILDREN» ); // VALUE will be 5; this is where the
// substring («DRE») occurs in the source string
VALUE = pos ( «DCN» , «CHILDREN» ); // VALUE will be 0; the substring («DCN») does
// not occur in the source string
Функция Pos
Функция Pos в Паскале ищет подстроку в строке. Синтаксис функции имеет довольно много вариантов для разных типов данных:
function Pos(const substr : shortstring; const s : shortstring) : SizeInt; function Pos(C : Char; const s : shortstring) : SizeInt; function Pos(const Substr : ShortString; const Source : AnsiString) : SizeInt; function pos(const substr : shortstring; c : Char) : SizeInt; function Pos(const Substr : AnsiString; const Source : AnsiString) : SizeInt; function Pos(c : Char; const s : AnsiString) : SizeInt; function Pos(const Substr : UnicodeString; const Source: UnicodeString) : SizeInt; function Pos(c : Char; const s : UnicodeString) : SizeInt; function Pos(c : UnicodeChar; const s : UnicodeString) : SizeInt; function Pos(c : AnsiString; const s : UnicodeString) : SizeInt; function Pos(c : UnicodeString; const s: AnsiString) : SizeInt; function Pos(c : ShortString; const s : UnicodeString) : SizeInt; function Pos(const Substr : WideString; const Source : WideString) : SizeInt; function Pos(c : Char; const s : WideString) : SizeInt; function Pos(c : WideChar; const s : WideString) : SizeInt; function Pos(c : WideChar; const s : AnsiString) : SizeInt; function Pos(c : AnsiString; const s : WideString) : SizeInt; function Pos(c : WideString; const s : AnsiString) : SizeInt; function Pos(c : ShortString; const s : WideString) : SizeInt; function Pos(c : Char; const v : Variant) : SizeInt; function Pos(s : ShortString; const v : Variant) : SizeInt; function Pos(a : AnsiString; const v : Variant) : SizeInt; function Pos(w : WideString; const v : Variant) : SizeInt; function Pos(w : UnicodeString; const v : Variant) : SizeInt; function Pos(v : Variant; const c: Char) : SizeInt; function Pos(v : Variant; const s : ShortString) : SizeInt; function Pos(v : Variant; const a : AnsiString) : SizeInt; function Pos(v : Variant; const w : WideString) : SizeInt; function Pos(v : Variant; const w : UnicodeString) : SizeInt; function Pos(v1 : Variant; const v2 : Variant) : SizeInt;
Вся эта куча вариантов взята из документации. Так что просьба не критиковать за излишние подробности )))
Функция Pos возвращает индекс подстроки Substr в строке S, если строка S содержит в себе подстроку Substr. Если подстрока Substr не найдена в строке, то функция возвращает 0. Поиск чувствителен к регистру.
Как найти подстроку в строке
Разумеется, сделать это можно без использования специальных функций.
Проще всего найти в строке символ — это можно сделать простым перебором символов в строке.
Найти вхождение подстроки из нескольких символов будет сложнее. Но тоже возможно — существуют специальные алгоритмы.
Однако зачем “изобретать велосипед”, если есть готовые функции. Такие, например, как функция Pos.
С помощью этой функции можно найти символ или подстроку в строке.
Как часто приходится это делать? Зависит от специфики вашей работы.
Если вы работаете, например, с математикой, то почти никогда.
Если же вы работаете с большими объёмами текстовой информации, с файлами, то довольно часто.
S := 'abcdefgcde'; Writeln(Pos('f', S)); //Pos = 6 Writeln(Pos('F', S)); //Pos = 0 - буква F не найдена Writeln(Pos('cde', S)); //Pos = 3, потому что функция //возвращает индекс первого //найденного вхождения Writeln(Pos('cdf', S)); //Pos = 0 - такой подстроки нет
В принципе, здесь всё понятно. Особых разъяснений не требуется.
Единственное замечание по варианту поиска подстроки cde. Как видите, в исходной строке есть две подстроки cde. Но функция возвращает число 3, то есть индекс первого элемента первой найденной подстроки.
program posfunc; var S : string; begin //Ищем индекс первого пробела в строке S := ‘The first space in this sentence is at position : ‘; Writeln(S, Pos(‘ ‘, S)); //Pos = 4 //Ищем последнюю букву английского алфавита в строке S := ‘The last letter of the alphabet doesn»t appear in this sentence ‘; //Так как такой буквы в строке нет, то будет выведено сообщение об этом if (Pos(‘Z’, S) = 0) and (Pos(‘z’, S) = 0) then Writeln(S); //Проверяем, что функция Pos действительно чувствительна к регистру S := ‘abcdefgcde’; Writeln(Pos(‘f’, S)); //Pos = 6 Writeln(Pos(‘F’, S)); //Pos = 0 — буква F не найдена Writeln(Pos(‘cde’, S)); //Pos = 3, потому что функция //возвращает индекс первого //найденного вхождения Writeln(Pos(‘cdf’, S)); //Pos = 0 — такой подстроки нет ReadLn; end.
POS() Function — Scan a String
The POS() function scans stringB for a substring with a specific relationship to stringA .
Relational operator, which can be one of the following:
>= Greater than or equal to
String to be scanned.
For example, if intA is a 3, then POS() looks for substrings beginning at every third character in stringB. A backward scan may be performed by giving a negative value for intA. For example, if a -3 is given, POS() starts with the third character from the end of stringB and scans for substrings beginning at every third character, skipping backward. A value of 0 for intA is not allowed. If no value is given, intA defaults to 1.
Occurrence of the desired substring.
For example, a value of 3 would cause POS() to find the third occurrence of any substring(s) satisfying the relation. If intB is not given, the beginning character position of the first occurrence will be reported. If intB is zero, the total number of occurrences is returned, instead of the position of a specific occurrence.
If the relation condition is satisfied, POS() returns the position of the first character in stringB of the matched substring. If the search fails, POS() returns zero.
POS() follows these logic steps:
- If stringA or stringB is null, return 0.
- Start with the first byte in stringB if intA is positive, or the Nth byte from the end of stringB if intA is negative (-N).
- If past either the beginning or end of stringB , return 0 (or occurrence count if intB is 0).
- Compare stringA with the substring at the current position in stringB . The length of the substring will be either the length of stringA or the remainder of stringB , whichever is shorter.
- If the given relation is true, and if this was the Nth successful try (specified by intB =N), then return the current scan position.
- If the relation was not satisfied, then bump the scan position (backwards if intA is negative), go to step 3, and try again.
Examples
>A$=»MONTUEWEDTHUFRISATSUN»
>PRINT POS(«WED»=A$)
7
>PRINT POS(«ON»=A$)
2
>PRINT POS(«ON»=A$,3)
0
>PRINT POS(«SAT»4
1000 REM — remove trailing spaces from A$
1010 LET A$=A$(1,POS(» «<>A$,-1))
