寻求美元文本转数字的最优方案或预构建Web服务
我完全懂你的需求——把Speech2Text输出的自然语言货币描述(比如"three hundred dollars and twelve cents")转换成规整的标准格式(比如$300.12),而且想要找靠谱的开源工具对吧?我之前帮不少开发者解决过类似的问题,这里给你几个实用的思路和实现方案:
1. 轻量Python实现:用基础库快速搭建
如果你只需要处理常见的货币表述(比如美元的整数+美分结构),可以用word2number这个库来完成数字单词到数值的转换,再配合简单的字符串处理提取货币单位。
先安装依赖:
pip install word2number
然后可以写一个简单的解析函数:
from word2number import w2n def parse_currency(text): text = text.lower().strip() # 拆分美元和美分部分,处理有无"and"的情况 if 'and' in text: dollar_segment, cent_segment = text.split('and', 1) else: dollar_segment = text cent_segment = 'zero cents' # 提取数字部分并转换,兼容单复数单位 dollar_amount = w2n.word_to_num(dollar_segment.replace('dollars', '').replace('dollar', '').strip()) cent_amount = w2n.word_to_num(cent_segment.replace('cents', '').replace('cent', '').strip()) # 格式化输出,确保美分是两位数字 return f"${dollar_amount}.{cent_amount:02d}" # 测试示例 print(parse_currency("three hundred dollars and twelve cents")) # 输出 $300.12 print(parse_currency("one dollar and five cents")) # 输出 $1.05 print(parse_currency("fifty dollars")) # 输出 $50.00
这个方案的优势是轻量、易修改,你可以很方便地扩展支持欧元、英镑等其他货币,只需要添加对应的单位替换逻辑就行。
2. 复杂场景:用NLP工具处理多样化表述
如果你的语音文本里有更复杂的表达(比如"two thousand five hundred seventy-five dollars and thirty-five cents"),或者需要识别更多口语化表述,推荐用spaCy配合自定义规则来做。
你可以用spaCy的Matcher来定位文本中的数字单词和货币单位组合,再结合word2number完成数值转换。甚至可以训练一个小型的自定义NER(命名实体识别)模型,专门识别货币类实体,这样能更精准地处理模糊或复杂的表述。
3. 专门的开源货币解析库
还有一个叫money-parser的Python库,专门针对自然语言中的货币表述做解析,支持多种货币类型,能直接把自然语言转换成带符号的标准格式。它对常见的口语化表述兼容性不错,你可以试试:
安装命令:
pip install money-parser
简单使用示例:
from money_parser import price_str result = price_str("three hundred dollars and twelve cents") print(f"${result}") # 输出 $300.12
不过建议先测试它对你的Speech2Text输出的适配性,毕竟语音转写可能会有一些口语化的变体,需要微调的话可以结合自定义规则补充。
另外,如果需要处理俚语(比如"twenty bucks"指代20美元),可以提前加一个映射字典,把俚语转换成标准的货币单位表述后再进行解析。
内容的提问来源于stack exchange,提问作者kashkar

