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

Як перетворити числа зі словесної форми у числову за допомогою 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

Нічний читач

439Прочитань
21Автори
12Читачі
Підтримати
На Друкарні з 14 липня

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

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

  • λanguage: Неформальний опис мови

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

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

    Js
  • Як ноутбук може стати найкращим другом вашої дитини (і чому це ок)

    Погляньмо правді в очі: у наш час ноутбук — це вже не просто гаджет. Для сучасних дітей він може стати вікном у світ можливостей, інструментом для розвитку і навіть місцем для пошуку друзів. І якщо це звучить тривожно, не поспішайте хвилюватися. Зараз розповімо, чому

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

    Батьківство
  • Як перемагати на хакатонах

    Розкажу про хакатони, у яких я брав участь з 2015 року. Ідеї, презентації, перемоги, висновки, смішні ситуації та меми

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

    Hackathon

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

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

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

  • λanguage: Неформальний опис мови

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

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

    Js
  • Як ноутбук може стати найкращим другом вашої дитини (і чому це ок)

    Погляньмо правді в очі: у наш час ноутбук — це вже не просто гаджет. Для сучасних дітей він може стати вікном у світ можливостей, інструментом для розвитку і навіть місцем для пошуку друзів. І якщо це звучить тривожно, не поспішайте хвилюватися. Зараз розповімо, чому

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

    Батьківство
  • Як перемагати на хакатонах

    Розкажу про хакатони, у яких я брав участь з 2015 року. Ідеї, презентації, перемоги, висновки, смішні ситуації та меми

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

    Hackathon