Як перетворити числа зі словесної форми у числову за допомогою numerizer?

У сьогоднішній статті предметом нашого огляду буде невеличка бібліотека під назвою numerizer, яка дозволяє перетворювати числа зі словесної у числову форму.

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

Windows:

pip install numerizer

MacOS:

pip3 install numerizer

Linux:

pip install numerizer

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

Отже, бібліотека numerizer має функцію numerize(). Саме функція numerize() і перетворює числа зі словесної форми у числову.

Тож, імпортуємо бібліотеку та дивимося на приклад:

import numerizer

text = "Twenty-four"
print(numerizer.numerize(text))
24

Тобто ми передали функції numerize() рядок “Twenty four“ (“Двадцять чотири“) та отримали результат у вигляді цілого числа. Але якщо ми спробуємо визначити, який тип даних має наш результат — результат буде str, тобто результат залишається рядком. Перевіримо це на практиці:

text = "Twenty-four"
numerize_text = numerizer.numerize(text)

print(type(numerize_text))
<class 'str'>

Тобто функція numerize() не змінює тип даних.

Тепер чудово було б навести ще приклади використання даної функції:

Приклад 2:

text = "Five hundred and forty three"
numerize_text = numerizer.numerize(text)

print(numerize_text)
543

Приклад 3:

text = "Twenty-one million forty-two thousand seven hundred and sixty-three"
numerize_text = numerizer.numerize(text)

print(numerize_text)
21042763

Приклад 4:

text = "Seven and two quarters"
numerize_text = numerizer.numerize(text)

print(numerize_text)
7.5

Важливий факт: numerize() не розпізнає роздільник point для виведення десятих. Тобто коли ми, наприклад, захочемо перетворити рядок “Seven point thirty“ на 7.30, то ми не зможемо цього зробити. Ось приклад такого намаганняя у коді:

text = "Seven point thirty"
numerize_text = numerizer.numerize(text)

print(numerize_text)
7 point 30

Вдосконалення функції numerizer()

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

По-перше, нам треба замінити слово point на крапку. З цим завданням ми можемо впоратися за допомогою методу replace(), який якраз таки і заміняє потрібну нам частину рядка на вказаний нами символ.

По-друге, прибрати зайві пробіли між числами. Це можна зробити за допомогою того, що ми перетворимо рядок, який ми отримаємо у якості параметра у список. Таким чином ми просто зможемо видалити порожні елементи з новоствореного списка та повернути результат назад до рядкового типу даних.

Тож, тепер дещо модифікуємо функцію numerize(), а саме створюємо нову функцію — modificated_numerize().

Ось код нашої функції:

text = "Seven point thirty"


def modificated_numerize(text):
    totally_modified = None

    numerize_text = numerizer.numerize(text)
    replaced_point = numerize_text.replace("point", ".")
    listed_text = list(replaced_point)

    for i in listed_text:
        if i == " ":
            space_index = listed_text.index(i)
            listed_text.pop(space_index)

        elif " " not in listed_text:
            totally_modified = "".join(listed_text)

    return totally_modified


print(modificated_numerize(text))
7.30

І у підсумку отримали 7.30 як бажаний результат. Тепер пропоную розібрати цей код з поясненнями як він працює.

Розбір коду:

Перший етап. Визначаємо функцію та створюємо для неї параметр text, щоб ми потім могли вказати наш рядок у якості параметра.

Другий етап. Визначаємо змінну totally_modified, яка у майбутньому буде зберігати наш кінцевий результат, а зараз вона просто зберігає порожній рядок.

Третій етап. Використовуємо функцію numerize(), щоб перетворити словесний формат чисел у числовий. Результат роботи функції зберігаємо у змінній numerize_text. Тобто, якщо зараз абстрагуватися від всього іншого коду і залишити тільки numerize(), то ми отримаємо результат 7 point 30.

Четвертий етап. Визначаємо змінну replaced_point та зберігаємо туди наш попередній результат тільки з крапкою замість слова point. Тобто ми отримали “7 . 30” у результаті. Ми досягли цього за допомогою методу replace(), який отримав слово, яке треба замінити, та символ, на який ми хочемо замінити слово. У нашому випадку нам треба замінити слово point на крапку, звідси і такий запис replace(“point“, “.“).

П’ятий етап. Перетворюємо рядок на список. У такому разі кожен символ у рядку буде окремим елементом списку і пусті рядки також.

Шостий етап. Тут ми створюємо цикл for у якому проходимося по кожному елементу нещодавно створеного списку listed_text. Цей цикл має у собі дві умови if i == " " та if " " not in listed_text. Перша умова перевіряє кожен елемент на те, чи є він порожнім рядком, якщо так, то ми знаходимо індекс цього елемента у списку і видаляємо його зі списку за допомогою методу pop(). Якщо ж у списку більше немає жодного елемента, який був би порожнім рядком, то ми просто приєднуємо список до рядка і зберігаємо його у змінній totally_modified. Варто зазначити одну важливу річ, приєднуючи список до рядка ми тим самим ніби конвертуємо список у рядок. Тобто на виході ми отримаємо результат типу str.

Сьомий етап. Повертаємо змінну totally_modified.

Висновок

У цій статті ми познайомилися з бібліотекою numerizer, ознайомилися з функцією numerize(), створили на її основі власну вдосконалену функцію modificated_numerize() та детально розібрали її код. Сподіваюся, що вам сподобався цей матеріал і ви дізналися щось нове для себе. Дякую за увагу!

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

Нічний читач

34Прочитань
10Автори
1Читачі
На Друкарні з 14 липня

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

Вам також сподобається

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

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

Вам також сподобається