【问题标题】:Alphabetical numbers parser to Integer字母数字解析器到整数
【发布时间】:2019-11-28 08:40:31
【问题描述】:

我需要一个函数来将诸如“二十二”之类的数字转换为 22。

我必须用西班牙语写,我可能会写下(或搜索)正式语法,它定义了写下数字和制作解析器的完整方法,但是,因为完整的代码是用 Python 编写的,我认为必须有一个已经存在的图书馆才能发挥作用,至少是英文的。

是否有任何已知的图书馆以合理的方式做到这一点?我不需要很大的数字,只需要零到一百万左右。

【问题讨论】:

标签: python python-3.x parsing number-formatting data-conversion


【解决方案1】:

你需要这样的东西: (关键是你将如何准备数据)

words2num = {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6, 'seven': 7, 'eight': 8, 'nine': 9, 'ten': 10, 'eleven': 11, 'twelve': 12, 'thirteen': 13, 'fourteen': 14, 'fifteen': 15, 'sixteen': 16, 'seventeen': 17, 'eighteen': 18, 'nineteen': 19}

words2num2 = {'twenty': 2, 'thirty': 3, 'forty': 4, 'fifty': 5, 'sixty': 6, 'seventy': 7, 'eighty': 8, 'ninety': 9}

def number(Number):
    if len(Number) < 2:
        print (words2num[Number[0]])
    else:
        print ("{}{}".format(words2num2[Number[0]], words2num[Number[1]]))


num = input("Please enter a number between 0 and 99: ")
number(num.split())

输出:

Please enter a number between 0 and 99: fifty five
55

【讨论】:

  • 感谢您的回答。由于我的大多数数字都是低数字,所以前 30 个数字(用西班牙语写成一个单词)我有类似的东西。这种方法的问题在于西班牙语比英语具有更多的可变性,因此字典会增长太多,并且需要大量验证才能可信。此外,我们可以有 22000 和 2(西班牙语没有和那里),所以我需要一些比这更复杂的东西:你需要根据匹配进行乘法和求和。 cuarenta y dos mil doscientos ventidos -> (40 + 2) x1000 + 22
  • 所以在西班牙语中,你有:成千上万的乘法,数百,十和单数的总和。但是你可以有数万,如果你在将十相加之前不进行前瞻以检测它实际上是“十万”,这可能会令人困惑。当您完成添加所有法律上的奇怪案例时,您最终会发现人们写得如此糟糕,如果您没有人可以阅读,就很难发现他们想说什么(我想先纠正,但它变得更加困难 xD )。
  • 为了使其可扩展,最好的方法似乎是尝试像我上面所做的那样从单词中组合数学表达式,然后解释它们。我认为以前有人可以这样做:(。更不用说是否有人决定用单词 xD 写 3 * 10^5,尽管它在西班牙语中更简单:3 (tres) por (*) diez (10) elevado a (^) cinco (5),虽然我们不期望这种数字,甚至是小数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 1970-01-01
相关资源
最近更新 更多