python - 如何在 Python 中将阿拉伯文本转换为数字
问题描述
使用 Python,我正在尝试编写一个简单的代码,它将阿拉伯文本转换为数字。我使用的代码可以在这里找到,我正在尝试将其从英语改编为阿拉伯语。由于未知原因,它似乎不太好用:
def text2int(textnum, numwords={}):
if not numwords:
units = [
"", "واحد", "اثنان", "ثلاثة", "أربعة", "خمسة", "ستة", "سبعة", "ثمانية",
"تسعة",
"عشرة", "أحد عشر", "اثنا عشر", "ثلاثة عشر", "أربعة عشر", "خمسة عشر",
"ستة عشر", "سبعة عشر", "ثمانية عشر",
"تسعة عشر"
]
tens = [
"عشرون", "ثلاثون", "أربعون", "خمسون", "ستون", "سبعون", "ثمانون",
"تسعون"
]
scales = ["مية", "الف", "مليون", "مليار", "ترليون"]
numwords["و"] = (
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("خمسة و عشرون"))
我得到的方法的输出是5,这是完全错误的,应该是25。有没有办法解决这个问题?此外,秤根本不起作用。
解决方案
尝试改变你tens
的变量
tens = ["", "",
"عشرون", "ثلاثون", "أربعون", "خمسون", "ستون", "سبعون", "ثمانون",
"تسعون" ]
那就是添加 2 个空字符串,或者,您可以这样更改此行:
for idx, word in enumerate(tens): numwords[word] = (1, (idx + 2) * 10)
正如评论中有人建议的那样,只在周围添加括号idx+2
推荐阅读
- apache-spark - Spark join 删除连接列
- python-3.x - 使用 pandas 从 CSV 文件中重新采样日期
- scala - Cassandra 无批次插入
- plasticscm - 如何从现有项目创建 Plasitc SCM 存储库?
- ios - 什么/如何打开名为“systemMedium---[long_name_digits_].chrono-timeline”的文件?
- algorithm - 将 m 叉树转换为 n 叉树
- notion-api - Notion API:有没有办法获取“人”属性中提到的用户的子页面数量?
- javascript - 如何在不使用 += 运算符的情况下重新创建它
- php - 修改 Alpine flash 通知
- encoding - `B64ENCeyJ1c2VMaW...` 是什么编码数据?