Maison  >  Article  >  développement back-end  >  Comment puis-je convertir des mots numériques en nombres entiers en Python ?

Comment puis-je convertir des mots numériques en nombres entiers en Python ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-20 18:44:20774parcourir

How Can I Convert Number Words to Integers in Python?

Conversion de mots numériques en nombres entiers

Souvent, il est nécessaire de convertir des mots numériques exprimés sous forme de texte (par exemple, "un", "deux ") dans leurs valeurs entières correspondantes.

Solution :

Pour faciliter cette conversion, une fonction Python appelée text2int est introduite, qui utilise un dictionnaire complet de mots numériques ( numwords) pour mapper les représentations textuelles en nombres entiers. Voici la mise en œuvre :

def text2int(textnum, numwords={}):
    if not numwords:
        # Initialize the numwords dictionary only on the first call
        units = [
            "zero", "one", "two", "three", "four", "five", "six", "seven", "eight",
            "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",
            "sixteen", "seventeen", "eighteen", "nineteen",
        ]

        tens = ["", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"]

        scales = ["hundred", "thousand", "million", "billion", "trillion"]

        numwords["and"] = (1, 0)
        for idx, word in enumerate(units):    numwords[word] = (1, idx)
        for idx, word in enumerate(tens):     numwords[word] = (1, idx * 10)
        for idx, word in enumerate(scales):   numwords[word] = (10 ** (idx * 3 or 2), 0)

    current = result = 0
    for word in textnum.split():
        if word not in numwords:
            raise Exception("Illegal word: " + word)

        scale, increment = numwords[word]
        current = current * scale + increment
        if scale > 100:
            result += current
            current = 0

    return result + current

Exemple :

Considérez l'entrée suivante : "sept milliards cent millions trente et un mille trois cent trente-sept"

print text2int("seven billion one hundred million thirty one thousand three hundred thirty seven")  # 7100031337

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn