0

我每天都会收到包含结构松散的数据的数据馈送。我需要将它导入数据库,这样我就可以运行一个报告来查找新记录和对现有记录的更改。

数据如下所示:

--------------------------------
blah:
foo
bar
lorum: ipsum
dolor: sit
foo: bar
bar: foo
123-555-1212
Lorum / Ipsum / Dolor / Sit
Foo / Bar
--------------------------------

如您所见,有一些字段标题,如“blah”、“lorum”等,但有些数据缺少标题,如电话号码或斜线分隔列表。有些标题在同一行,有些则不在。

只是为了让我们保持警惕,记录没有相同数量的字段。

所以我认为解析需要至少有3种方法来解析数据,比如,

如果 "heading:$" 然后抓取下一行,直到读取下一个 "*.:" 并抓取 "heading: value",如果行以数字开头,则假设标题为 "phone",如果行包含斜杠分隔列表假设标题 "功能”直到“--------...”

但我不知道如何开始编写这样的代码。尽管我必须在 MacOS 中运行代码,但此时该语言是开放的。

我想 perl 可能对此有好处,但是 perl foo 很差。

甚至不知道从哪里开始。

4

1 回答 1

0

你总是需要对你的文本做一些假设,否则你在 NLP 中有一个练习。

我们可以假设非键值部分到底是什么吗?是这样,以下正则表达式将帮助您:

 # split the text into records:
 @records = split /\n-----------------\n/, $text;
 # this will find lines that have another key/value pair after it
 qr/\A(\w+):(.*?)(?=\n\w+:)/ms

 # then the last key/value, that probably must be one line:
 qr/^(\w+):(.*)/

我建议每次匹配成功后,删除匹配的文本并继续。

其他有用的假设:电话号码在记录中只能出现一次,(而不是作为其他键/值的一部分)标签在最后。

于 2014-07-25T02:04:27.747 回答