Друкарня від WE.UA

Всіх вітаю! У цій статті ми дослідимо, як перевіряти подібність слів у Python за допомогою бібліотек difflib та TheFuzz.

Використання difflib

Дана бібліотека є вбудованою, а тому нам не потрібно витрачати час на її встановлення. У даній бібліотеці нас цікавить конкретно функція get_close_matches(), яка приймає в основному два параметри: головне слово, з яким ми і будемо порівнювати інші, та список зі схожими словами, з яких дана функція потім вибере найбільш схожі до оригінального слова варіанти.

Ось приклад коду:

original_word = "ward"
similar_words = ["word", "sword", "password", "toword", "coward", "foreword", "wardrobe"]

define_matches = get_close_matches(original_word, similar_words)
print(define_matches)

Спершу ми оголосили потрібні змінні, а саме original_word, де зберагіється головне слово, та similar_words, що є списком схожих слів.

Далі ми застосовуємо функцію get_close_matches() та передаємо усі оголошені змінні.

Результат:

['coward', 'word', 'wardrobe']

У результаті ми отримали лише три слова, які найбільш схожі на слово “ward”.

Також ця функція має кілька опціональних параметрів, таких як n та cutoff. Параметр n встановлює максимальну кількість слів, яку ми будемо отримувати у результаті. А cutoff дозволяє встановити відсоток схожості, який повинен задовольняти нас. І, звісно, збільшення або зменшення відсотка схожості слів вплине на кінцевий результат.

Ось приклад застосування цих параметрів:

from difflib import get_close_matches

original_word = "ward"
similar_words = ["word", "sword", "password", "toword", "coward", "foreword", "wardrobe"]

define_matches = get_close_matches(original_word, similar_words, n=4, cutoff=0.4)
print(define_matches)

У даному випадку ми визначили те, що хочемо отримувати максимально чотири слова та знизили рівень схожості до 40% (cutoff=0.4), хоча за замовчуванням даний параметр дорівнює 60% (cutoff=0.6).

Результат:

['coward', 'word', 'wardrobe', 'sword']

Як бачимо, ми отримали рівно чотири схожі слова.

Тепер пропоную підвищити cutoff до 80%, щоб розуміти різницю:

from difflib import get_close_matches

original_word = "ward"
similar_words = ["word", "sword", "password", "toword", "coward", "foreword", "wardrobe"]

define_matches = get_close_matches(original_word, similar_words, n=4, cutoff=0.8)
print(define_matches)

Результат:

['coward']

Тут ми вже отримали не максимальну кількість слів, а лише одне, бо рівень схожості слів значно збільшився.

Використання TheFuzz

Тепер перейдемо до бібліотеки TheFuzz, яку вже треба встановлювати перед використанням. Конкретно ж ми будемо працювати з модулем process.

Встановлення

Спочатку нам треба встановити саму бібліотеку TheFuzz.

Windows:

pip install thefuzz

MacOS:

pip3 install thefuzz

Linux:

pip install thefuzz

Також для коректнох роботи треба встановити бібліотеку python-Levenshtein, бо вона використовується у бібліотеці TheFuzz.

Windows:

pip install python-Levenshtein

MacOS:

pip3 install python-Levenshtein

Linux:

pip install python-Levenshtein

Застосування функції extraxt() у коді

Тепер розглянемо наступний приклад з функцією extract(), яка виконує подібну до минулої функції роботу:

from thefuzz import process

original_word = "ward"
similar_words = ["word", "sword", "password", "toword", "coward", "foreword", "wardrobe"]

define_matches = process.extract(original_word, similar_words, limit=4)
print(define_matches)

Результат:

[('coward', 90), ('wardrobe', 90), ('word', 75), ('password', 68)]

Важливо зазначити той факт, що функція extract() повертає список слів з їхнім рівнем схожості поряд. Як бачимо, перші два слова є найбільш схожими на оригінал.

Щодо параметра limit — це опціональний параметр, який визначає максимальну кількість слів, яку ми отримаємо у результаті.

Далі протестуємо код без параметра limit:

from thefuzz import process

original_word = "ward"
similar_words = ["word", "sword", "password", "toword", "coward", "foreword", "wardrobe"]

define_matches = process.extract(original_word, similar_words)
print(define_matches)

Результат:

[('coward', 90), ('wardrobe', 90), ('word', 75), ('password', 68), ('toword', 68)]

Тут варто розуміти, що за замовчуванням функція extract() виводить п’ять слів з їхнім рівнем схожості.

Крім цього, коли limit більший за кількість слів у списку, то код не повертає жодної помилки. У підсумку він просто видає менше слів у кінцевому списку.

Розглянемо такий приклад:

from thefuzz import process

original_word = "ward"
similar_words = ["word", "sword", "password", "toword"]

define_matches = process.extract(original_word, similar_words, limit=6)
print(define_matches)

Результат:

[('word', 75), ('password', 68), ('toword', 68), ('sword', 67)]

Як бачимо, функція повернула лише чотири слова, хоча ми зазначили 6 у limit.

Застосування функції extraxtOne() у коді

Також у цій бібліотеці є функція extractOne(), єдиною відмінністю якої від усіх попередніх є те, що вона повертає лише одне найбільш схоже слово з усіх наявних у списку similar_words.

Ось приклад:

from thefuzz import process

original_word = "ward"
similar_words = ["word", "sword", "password", "toword", "coward", "foreword", "wardrobe"]

define_matches = process.extractOne(original_word, similar_words)
print(define_matches)

Результат:

('coward', 90)

Висновок

У даній статті ми розглянули одразу дві бібліотеки, що дозволять знаходити схожі слова, та приділили достатню увагу їх особливостям.

Статті про вітчизняний бізнес та цікавих людей:

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Magnifique numérique
Magnifique numérique@nocturnal_reader

Нічний читач

90Довгочити
1.7KПерегляди
27Підписники
Підтримати
На Друкарні з 14 липня 2025

Більше від автора

  • Метод index() у Python

    Всіх вітаю! Сьогодні ми розглянемо метод index() у Python та приклади його застосування.

    Теми цього довгочиту:

    Програмування
  • Метод find() у Python

    У цій статті ми розберемо призначення та застосування методу find() у Python.

    Теми цього довгочиту:

    Програмування
  • Новина блогу Magnifique numérique

    У проєкту Magnifique numérique тепер з'явився власний сайт, де будуть викладатися усі нові статті.

    Теми цього довгочиту:

    It

Це також може зацікавити:

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити: