Python Regex“机器学习”

2024-09-24 02:19:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有数千行文本需要查找货币表示,例如:

Lorem ipsum dolor sit amet, 100.000,00 USD sadipscing elitr, sed diam nonumy eirmod 
GBP 400 ut labore et dolore magna aliquyam erat, sed diam voluptua. At USD 20 eos et 
accusam et justo duo dolores et 100,000.00 USD  ea rebum. Stet 3,-- USD gubergren, no 

Python脚本应该返回转换为美元的金额。(例如100000美元、400英镑-美元等)

到目前为止,我所做的是为数字货币组合手动创建正则表达式来检索值,然后将货币与数据库进行比较并计算交换量。在

但是,这既没有效率,也无法证明未来(例如,如果添加了另一种货币) 所以我想知道是否有一种有效的机器学习算法,我可以用一些例子“训练”,然后它试图找到“价值货币”的组合?在


Tags: 文本货币sedetusdipsumloremdolor
3条回答

你的问题没有很好的定义,但是没有必要进行机器学习。可能的货币集合是有限的和小的,货币表示的集合不能太复杂以至于不能像正则表达式那样表达。您只是没有充分利用正则表达式的功能。在

例如,要匹配多个货币,请使用:

    currency = r"((USD)|(GBP)(...))"

然后可以表示表示的数字部分

^{pr2}$

编译正则表达式:

    matcher = re.compile(numbers+r"[\s]*+"currency)

您可以创建第二个匹配器,首先匹配货币。您可能可以在可选的捕获组等中使用一些聪明的方法,但是如果性能不是一个大问题,我建议使用一个简单的第二匹配器。在

    matcher2 = re.compile(currency+r"[\s]*"+numbers)

请注意,“currency”正则表达式不需要手动创建。一旦找到匹配项,就可以访问相应的组号(1或3)以获取匹配的货币。例如:

    curren = m.group(1)
    amount = m.group(2)

这是可能的,因为整个“货币”regex被视为一个组。在

除非您的输入中有无限的货币表示模式(可能不可能),否则您的问题肯定可以通过适当的正则表达式来解决。在

我只需要使用regex粗略地提取可能的对:

import re

test = '''Lorem ipsum dolor sit amet, 100.000,00 USD sadipscing elitr, sed diam nonumy eirmod 
GBP 400 ut labore et dolore magna aliquyam erat, sed diam voluptua. At USD 20 eos et 
accusam et justo duo dolores et 100,000.00 USD  ea rebum. Stet 3,  USD gubergren, no'''

number = r'([\d+.,]+)'
currency = r'([A-Z]{2,3})'

r1 = re.compile(number + r'\s+' + currency)
r2 = re.compile(currency + r'\s+' + number)

matches = r1.findall(test) + r2.findall(test)

print(matches)

我得到:

^{pr2}$

从那里,你可以解析数字并过滤出不存在的货币。你只有五到六种可能的格式,所以在这里机器学习对你没有任何帮助。在

人类甚至能知道首字母缩略词是否是一种货币吗?如果一种新货币突然出现,那么它如何与其他任意的首字母缩略词区分开来?假设你遇到了类似“1000cpu”的东西,如果你不知道CPU是什么,你怎么知道它是(或不是)货币?在

您可以使用自然语言处理来查看有关数字的上下文,但这需要更多的处理,而且您永远无法确定。在

我的观点是:对于这个问题,如果机器学习是可行的话,那它就是一种过度杀戮。在

当用另一种方法来做一件事更容易、更准确时,为什么要用艰难的方式去做呢?在

相关问题 更多 >