Витвір і лематизація в Python NLTK з прикладами
⚡ Розумний підсумок
Стемінг та лематизація – це методи нормалізації тексту в Python NLTK, які зводять варіанти слів до спільної основи, де стемінг швидко обрізає суфікси без контексту, а лематизація повертає справжнє словникове слово, використовуючи його значення.

Що таке стемінг і лемматизація Python NLTK?
Стеммінг і лемматизація in Python NLTK – це методи нормалізації тексту для обробки природної мови. Ці методи широко використовуються для попередньої обробки тексту. Різниця між стеммінгом та лематизацією полягає в тому, що стеммінгом можна скористатися швидше, оскільки він скорочує слова без знання контексту, тоді як лематизація – повільніше, оскільки вона знає контекст слів до обробки.
Що таке Стемінг?
Стерління це метод нормалізації слів у Обробка природних мовЦе техніка, за якої набір слів у реченні перетворюється на послідовність для скорочення пошуку. У цьому методі слова, які мають однакове значення, але деякі варіації залежно від контексту або речення, нормалізуються. Іншими словами, є одне кореневе слово, але існує багато варіантів одного й того ж слова. Наприклад, кореневе слово — «їсти», а його варіанти — «їсть, їсти, з'їдений тощо». Так само, за допомогою стемінгу в Python, ми можемо знайти кореневе слово будь-якого варіанта.
Наприклад:
He was riding. He was taking the ride.
У двох наведених вище реченнях значення однакове, тобто це була їзда верхи в минулому. Людина може легко зрозуміти, що обидва значення однакові. Але для машин обидва речення різні. Тому їх важко перетворити в один і той самий рядок даних. Якщо ми не надаємо однаковий набір даних, машина не зможе передбачити. Тому необхідно розрізняти значення кожного слова, щоб підготувати набір даних до машинного навчання. Тут стеммінг використовується для категоризації одного типу даних шляхом отримання його кореневого слова.
Давайте реалізуємо це за допомогою Python програма. NLTK має алгоритм під назвою ПортерШтеммерЦей алгоритм приймає список токенізованих слів і об'єднує їх у кореневі слова.
Програма для розуміння стемінгу
from nltk.stem import PorterStemmer e_words= ["wait", "waiting", "waited", "waits"] ps =PorterStemmer() for w in e_words: rootWord=ps.stem(w) print(rootWord)
вихід:
wait wait wait wait
Code Пояснення:
- У NLTK є імпортований модуль stem. Якщо імпортувати весь модуль, програма стає важкою, оскільки містить тисячі рядків коду. Тому з усього модуля stem ми імпортували лише «PorterStemmer».
- Ми підготували фіктивний список варіаційних даних того самого слова.
- Створюється об'єкт, що належить до класу nltk.stem.porter.PorterStemmer.
- Ми передавали його до PorterStemmer по черзі, використовуючи цикл «for». Зрештою, ми отримали вихідне кореневе слово кожного слова, згаданого у списку.
З вищесказаного, стеммінг є важливим кроком попередньої обробки, оскільки він усуває надлишковість та варіації в одному й тому ж слові. В результаті дані фільтруються, що сприяє кращому машинному навчанню. Тепер ми передаємо повне речення та перевіряємо його вихід.
from nltk.stem import PorterStemmer from nltk.tokenize import sent_tokenize, word_tokenize sentence="Hello Guru99, You have to build a very good site and I love visiting your site." words = word_tokenize(sentence) ps = PorterStemmer() for w in words: rootWord=ps.stem(w) print(rootWord)
вихід:
hello
guru99
,
you
have
build
a
veri
good
site
and
I
love
visit
your
site
Code Пояснення:
- Пакет PorterStemmer імпортується з модуля stem.
- Імпортуються пакети для токенізації речень, а також слів.
- Пишеться речення, яке буде позначено лексиками на наступному кроці.
- Тут створюється об’єкт для PorterStemmer.
- Виконується цикл, і для кожного слова виконується визначення кореневої структури за допомогою об'єкта, створеного в рядку коду 5.
Коротко кажучи, стемінг – це модуль попередньої обробки даних. Англійська мова має багато варіацій одного слова, що створює неоднозначність у навчанні та прогнозуванні машинного навчання. Для побудови успішної моделі життєво важливо фільтрувати такі слова в ті самі послідовні дані за допомогою стемінгу. Це також відомо як нормалізація.
Що таке лематизація?
Лематизація У NLTK це алгоритмічний процес знаходження леми слова залежно від його значення та контексту. Лематизація зазвичай стосується морфологічного аналізу слів, метою якого є видалення словозмінних закінчень. Вона допомагає повернути базову або словникову форму слова, відому як лема. Метод лематизації NLTK базується на вбудованій функції морфінгу WordNet. Попередня обробка тексту включає як стеммінг, так і лематизацію. Багато людей вважають ці два терміни плутаними. Деякі вважають їх однаковими, але між стеммінгом та лематизацією є різниця. Лематизація є кращою за першу з причини, наведеної нижче.
Чому лемматизація краща за стемінінг?
Алгоритм стемінгу працює, вирізаючи суфікс зі слова. У ширшому сенсі він вирізає або початок, або кінець слова. Навпаки, лематизація є потужнішою операцією, яка враховує морфологічний аналіз слів. Вона повертає лему, яка є базовою формою всіх його словозмінних форм. Для створення словників та пошуку правильної форми слова потрібні глибокі лінгвістичні знання. Стемінг – це загальна операція, тоді як лематизація – це інтелектуальна операція, під час якої правильна форма шукається у словнику. Отже, лематизація допомагає у формуванні кращих... навчання за допомогою машини особливості.
Code розрізняти лематизацію та стеммінг
Стерління Code:
import nltk from nltk.stem.porter import PorterStemmer porter_stemmer = PorterStemmer() text = "studies studying cries cry" tokenization = nltk.word_tokenize(text) for w in tokenization: print("Stemming for {} is {}".format(w,porter_stemmer.stem(w)))
вихід:
Stemming for studies is studi Stemming for studying is studi Stemming for cries is cri Stemming for cry is cri
Лематизація Code:
import nltk from nltk.stem import WordNetLemmatizer wordnet_lemmatizer = WordNetLemmatizer() text = "studies studying cries cry" tokenization = nltk.word_tokenize(text) for w in tokenization: print("Lemma for {} is {}".format(w, wordnet_lemmatizer.lemmatize(w)))
вихід:
Lemma for studies is study Lemma for studying is studying Lemma for cries is cry Lemma for cry is cry
Обговорення результату
Якщо розглянути стеммінг для лексем studies та studying, результат буде однаковим (studi), але лематизатор NLTK надає різну лему для обох токенів: study для studies та studying для studying. Тому, коли нам потрібно створити набір функцій для навчання машини, було б чудово, якби перевага була надаватися лематизації.
Випадок використання Lemmatizer
Лематизатор мінімізує неоднозначність тексту. Слова на кшталт bicycle або bicycles перетворюються на базове слово bicycle. Він перетворює всі слова з однаковим значенням, але різним представленням, на їхню базову форму, зменшуючи щільність слів та допомогу.ping підготувати точні функції для навчання машини. Чим чистіші дані, тим точнішою буде ваша модель машинного навчання. Лематизатор NLTK також економить пам'ять та обчислювальні витрати.
Приклад у реальному часі, що демонструє використання лематизації WordNet та POS-тегування в Python:
from nltk.corpus import wordnet as wn from nltk.stem.wordnet import WordNetLemmatizer from nltk import word_tokenize, pos_tag from collections import defaultdict tag_map = defaultdict(lambda : wn.NOUN) tag_map['J'] = wn.ADJ tag_map['V'] = wn.VERB tag_map['R'] = wn.ADV text = "guru99 is a totally new kind of learning experience." tokens = word_tokenize(text) lemma_function = WordNetLemmatizer() for token, tag in pos_tag(tokens): lemma = lemma_function.lemmatize(token, tag_map[tag[0]]) print(token, "=>", lemma)
вихід:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Code Пояснення:
- Імпортовано зчитувач корпусу Wordnet, а WordNetLemmatizer імпортовано з Wordnet.
- Токенізація слів та тег частин мови імпортуються з nltk, а словник за замовчуванням — з колекцій.
- Створюється словник, де перша літера pos_tag є ключем, що відповідає значенню зі словника Wordnet.
- Текст записується та токенізується, а об'єкт lemma_function створюється для використання всередині циклу.
- Цикл виконується, і lemmatize приймає два аргументи: токен та мапу.ping з pos_tag зі значенням wordnet.
Python Лематизація має тісний зв'язок з Словник WordNet, тому важливо вивчити цю тему далі.
