猿问

Python 和 Regex 将书面数字转换为数字

我正在尝试将书面数字转换为数值。


例如,要从此字符串中提取数百万:


text = 'I need $ 150000000, or 150 million,1 millions, 15 Million, 15million, 15Million, 15 m, 15 M, 15m, 15M, 15 MM, 15MM, 5 thousand'

到:


'I need $ 150000000, or 150000000,1000000, 15000000, 15000000, 15000000, 15000000, 15000000, 15000000, 15000000, 15000000, 15000000, 5 thousand'

我首先使用此函数删除数字中的任何分隔符:


def foldNumbers(text):

    """ to remove "," or "." from numbers """"

    text = re.sub('(?<=[0-9])\,(?=[0-9])', "", text) # remove commas

    text = re.sub('(?<=[0-9])\.(?=[0-9])', "", text) # remove points

return text

我编写了这个正则表达式来查找常见的百万符号的所有可能模式。这 1) 查找数字并向前看 2) 数百万的常用符号,3) “[az]?” 部分是处理我已经删除了“'”的百万或数百万的可选“s”。


re.findall(r'(?:[\d\.]+)(?= million[a-z]?|million[a-z]?| Million[a-z]?|Million[a-z]?|m| m|M| M|MM| MM)',text)

正确匹配百万数字并返回:


['150', '1', '15', '15', '15', '15', '15', '15', '15', '15', '15']

我现在需要做的是编写一个替换模式以在数字后插入“000000”,或者迭代并将数字乘以 100000。到目前为止我已经尝试过:


re.sub(r'(?:[\d\.]+)(?= million[a-z]?|million[a-z]?| Million[a-z]?|Million[a-z]?|m| m|M| M|MM| MM)', "000000 ", text)

返回:


'I need $ 150,000,000, or 000000  million,000000  millions, 000000  Million, 000000 million, 000000 Million, 000000  m, 000000  M, 000000 m, 000000 M, 000000  MM, 000000 MM, 5 thousand'

我想我需要看看后面(?<=),但是我之前和几次尝试之后都没有处理过这个问题,我似乎无法解决。


仅供参考:我的计划是首先解决“百万”问题,然后复制千 (K)、十亿 (B)、万亿 (T) 以及其他单位(如距离、货币等)的解决方案。我已经搜索过 SO 和谷歌对于 NLP、文本清理和挖掘文章中的任何解决方案,但没有找到任何内容。


森栏
浏览 173回答 1
1回答
随时随地看视频慕课网APP

相关分类

Python
我要回答