строка 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