将松散结构化的数据导入数据库

时间:2014-07-25 00:11:48

标签: database perl scripting structured-data

我每天都会获得数据,这些数据只是结构松散。我需要将其导入数据库,以便我可以运行一个报告来查找新记录并更改现有记录。

数据如下所示:

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

正如您所看到的,有一些字段标题,如" blah"," lorum"等等,但有些数据缺少标题,如电话号码或斜线分隔列表。有些标题在同一行,有些标题则没有。

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

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

如果"标题:$"然后抓住下一行,直到下一行" *。:"被读了 和 抓住"标题:价值" 和 如果行以数字开头,则假设标题为" phone" 和 如果line包含斜杠分隔列表,则假定标题为" features"直到" --------..."

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

我认为perl可能对此有好处,但是perl foo非常差。

甚至不知道从哪里开始。

1 个答案:

答案 0 :(得分: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+):(.*)/

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

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