gpt4 book ai didi

阅读文本的算法或模式

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:40:31 25 4
gpt4 key购买 nike

我公司有一个客户跟踪来自不同地点的不同公司的产品的价格。此信息进入数据库。

这些公司每天都会通过电子邮件将价格发送给我们的客户,当然电子邮件的格式各不相同。任何公司都不可能改变他们的格式 - 他们不会这样做。

有些看起来像这样:

    This is example text that could be many lines long...    Location 1    Product 1     Product 2     Product 3    $20.99        $21.99        $33.79    Location 2    Product 1     Product 2     Product 3    $24.99        $22.88        $35.59

其他的看起来有点像这样:

    PRODUCT       PRICE    + / -    ------------  -------- -------    Location 1    1             2007.30 +048.20    2             2022.50 +048.20    Maybe some multiline text here about a holiday or something...    Location 2    1             2017.30 +048.20    2             2032.50 +048.20

目前,我们为每个公司的电子邮件格式编写了单独的解析器。但是这些格式的变化非常频繁。我们不能指望价格每次都在同一行或同一列。

对于我们来说,查看电子邮件并确定哪个价格适用于哪个地点的哪个产品是微不足道的。但对于我们的代码来说并不是那么多。所以我正在努力寻找一个更灵活的解决方案,并希望您就采取何种方法提出建议。我对从正则表达式到神经网络的任何事物都持开放态度——我将学习完成这项工作所需的知识,我只是不知道我需要学习什么。这是 lex/解析问题吗?更类似于 OCR?

代码不必自己找出所有格式。电子邮件分为几种主要的“样式”,如上面的那些。我们真的需要代码足够灵活,新的产品线或空白或其他东西不会使文件无法解析。

感谢您提供有关从哪里开始的任何建议。

最佳答案

我认为这个问题适合适当的解析器生成器。如果正则表达式出错,很难测试和调试。但是,我会选择一个易于使用的解析器生成器,就像它是语言的一部分一样。

对于这些类型的任务,我会选择 pyparsing,因为它具有完整的 lr 解析器的功能,但没有难以定义的语法和非常好的辅助函数。代码也很容易阅读。

from pyparsing import *

aaa =""" This is example text that could be many lines long...
another line

Location 1
Product 1 Product 2 Product 3
$20.99 $21.99 $33.79

stuff in here you want to ignore

Location 2
Product 1 Product 2 Product 3
$24.99 $22.88 $35.59 """

result = SkipTo("Location").suppress() \
# in place of "location" could be any type of match like a re.
+ OneOrMore(Word(alphas) + Word(nums)) \
+ OneOrMore(Word(nums+"$.")) \

all_results = OneOrMore(Group(result))

parsed = all_results.parseString(aaa)

for block in parsed:
print block

这将返回一个列表列表。

['Location', '1', 'Product', '1', 'Product', '2', 'Product', '3', '$20.99', '$21.99', '$33.79']
['Location', '2', 'Product', '1', 'Product', '2', 'Product', '3', '$24.99', '$22.88', '$35.59']

您可以根据需要对事物进行分组,但为简单起见,我只返回了列表。默认情况下忽略空格,这让事情变得简单多了。

我不知道是否有其他语言的等价物。

关于阅读文本的算法或模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1245485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com