Как перевести уравнение, написанное словами, в целое число, с учетом квантификаторов: "squared", "times", "twice"?
У меня есть много строк, таких как: five hundred thirty-four squared, one billion nine hundred twenty-two million three hundred forty-two thousand fifty-five twice, eight hundred sixty-four times six hundred ten и т.д.
Я должен перевести их в числовое значение. Пробовал word2number но он не распознает squared или twice или sixty-four times (в этих случаях).
Существует ли какая-нибудь библиотека или иной способ решить проблему?
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Как-то так:
import re
import numexpr as ne
from word2number import w2n
tests = [
"five hundred thirty-four squared",
"one billion nine hundred twenty-two million three hundred forty-two thousand fifty-five twice",
"eight hundred sixty-four times six hundred ten"
]
word_map = {
"squared": "**2",
"twice": "*2",
"times": "*",
}
def get_number(s, word_map=word_map):
s = s.casefold()
pat = r"({})".format("|".join(list(word_map)))
res = "".join([
word_map.get(x) if x in word_map else str(w2n.word_to_num(x))
for x in re.split(pat, s)
if x.strip()
])
return ne.evaluate(res).item()
тесты:
In [260]: [get_number(x) for x in tests]
Out[260]: [285156, 3844684110, 527040]