mrt*_*mrt 4 python regex parsing currency text-mining
假设我在 python 中有以下字符串(输入):
1) "$ 1,350,000"
2) "1.35 MM $"
3) "$ 1.35 M"
4) 1350000(现在是数值)
显然,尽管字符串表示形式不同,但数字是相同的。如何实现字符串匹配,或者换句话说,将它们分类为相等的字符串?
一种方法是使用正则表达式对可能的模式进行建模。不过,可能有一种情况是我没有想到的。
有人看到这个问题的 NLP 解决方案吗?
谢谢
这不是一个 NLP 问题,只是正则表达式的工作,加上一些忽略顺序的代码,并查找已知缩写(/本体)的字典,如“MM”。
\n\n这是一些工作代码:
\n\ndef parse_numeric_string(s):\n\n if isinstance(s, int): s = str(s)\n\n amount = None\n currency = \'\'\n multiplier = 1.0\n\n for token in s.split(\' \'):\n\n token = token.lower()\n\n if token in [\'$\',\'\xe2\x82\xac\',\'\xc2\xa3\',\'\xc2\xa5\']:\n currency = token\n\n # Extract multipliers from their string names/abbrevs\n if token in [\'million\',\'m\',\'mm\']:\n multiplier = 1e6\n # ... or you could use a dict:\n # multiplier = {\'million\': 1e6, \'m\': 1e6...}.get(token, 1.0)\n\n # Assume anything else is some string format of number/int/float/scientific\n try:\n token = token.replace(\',\', \'\')\n amount = float(token)\n except:\n pass # Process your parse failures...\n\n # Return a tuple, or whatever you prefer\n return (currency, amount * multiplier)\n\nparse_numeric_string("$ 1,350,000")\nparse_numeric_string("1.35 MM $")\nparse_numeric_string("$ 1.35 M")\nparse_numeric_string(1350000)\nRun Code Online (Sandbox Code Playgroud)\n\n,and.作为千位分隔符和小数点可以切换,或者\'作为(阿拉伯语)千位分隔符。还有一个第三方Python包“parse”,例如parse.parse(\'{fn}\', \'1,350,000\')(它是相反的format())USD1.3m