строка pyttsx3 в числовые значения

Поэтому я пытаюсь преобразовать озвученную буквенно-цифровую строку в полезную переменную. Пример - голосовой IP-адрес. Например:

string(one nine two period one six eight period zero period one slash twenty four) 

превратить это в

192.168.000.001/24

Я понимаю некоторое форматирование строк, но мне это неизвестно. Думаю, я мог бы превратить это в словарь. Используйте переменную и сравните буквенно-цифровое значение с числовым. Я пытаюсь сделать это без сервисов Google, поскольку он делает номера телефонов и адреса, но не что-то вроде IP-адреса.

Любая помощь приветствуется.

2 ответа

Решение

Если я правильно понимаю проблему, вам нужно превратить строку прописанных символов (обозначенных пробелами) в строку самих символов. Если это так, я думаю, это должно помочь:

def convert_spelled_chars(string:str, mapping:dict):
    # split at whitespace
    tokens = string.split()
    # map to values
    chars = [str(mapping[t]) for t in tokens]
    # join into one string again
    result = "".join(chars)
    return result

Он принимает строку и возвращает строковую форму IP-адреса (я предполагаю, вы хотите, чтобы он был строкой?). Тогда его можно использовать следующим образом:

mapping = {
    "one": 1,
    "two": 2,
    "slash": "/"
}

print(convert_spelled_chars("one two slash two one", mapping))
#> "12/21"

Предполагается, что вы знаете все возможные голосовые символы, которые могут появиться, что кажется разумным предположением, если вы используете его только для IP-адресов.

Я НЕ ПРИНИМАЮ ЭТОТ ОТВЕТ КРЕДИТА. ПОЛНЫЕ КРЕДИТЫ УПРАВЛЯЮТСЯ recursive, КОТОРЫЙ ПРЕДОСТАВИЛ ЭТО КРАСИВЫЙ ОТВЕТ В ЭТОМ потоке.

def text2int(textnum, numwords={}):
if not numwords:
  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

 print text2int("seven billion one hundred million thirty one thousand three hundred thirty seven")
 #7100031337
Другие вопросы по тегам