自动whois数据解析

时间:2015-02-22 00:29:08

标签: regex nlp field extraction whois

我需要将WHOIS原始数据记录解析为字段。 原始数据没有一致的格式,我需要支持所有可能的格式(我知道有大约40种独特的格式)。 例如,以下是3种不同WHOIS原始数据记录的摘录:

Created on: 2007-01-04
Updated on: 2014-01-29
Expires on: 2015-01-04
Registrant Name: 0,75 DI VALENTINO ROSSI
Contact: 0,75 Di Valentino Rossi
Registrant Address: Via Garibaldi 22
Registrant City: Pradalunga
Registrant Postal Code: 24020
Registrant Country: IT
Administrative Contact Organization: Giorgio Valoti
Administrative Contact Name: Giorgio Valoti
Administrative Contact Address: Via S. Lucia 2
Administrative Contact City: Pradalunga
Administrative Contact Postal Code: 24020
Administrative Contact Country: IT
Administrative Contact Email: giorgio_v@mac.com
Administrative Contact Tel: +39 340 4050596
---------------------------------------------------------------
Registrant :
onse telecom corporation
Gangdong-gu Sangil-dong, Seoul

Administrative Contact :
onse telecom corporation    ruhisashi@onsetel.co.kr
Gangdong-gu Sangil-dong, Seoul, 
07079976571

Record created on 19-Jul-2004 EDT.
Record expires on 19-Jul-2015 EDT.
Record last updated on 15-Jul-2014 EDT.
---------------------------------------------------------------
Registrant:

Name:                markaviva comunica??o Ltda
Organization:        markaviva comunica??o Ltda
E-mail:              helissonmaia@markaviva.com.br
Address:             RUA FERNANDES LIMA 360 sala 03
Address:             57300070
Address:             ARAPIRACA - AL
Phone:               55 11 40039011
Country:             BRASIL
Created:             20130405
Updated:             20130405

Administrative Contact:

Name:                markaviva comunica??o Ltda
Organization:        markaviva comunica??o Ltda
E-mail:              helissonmaia@markaviva.com.br
Address:             RUA FERNANDES LIMA 360 sala 03
Address:             57300070
Address:             ARAPIRACA - AL
Phone:               55 11 40039011
Country:             BRASIL
Created:             20130405
Updated:             20130405

如您所见,没有重复模式。 我需要提取诸如“注册人姓名”,“注册人地址”,“管理员姓名”,“管理员城市”等字段。

我首先尝试了一种基本的字段提取方法,基于在找到的第一个冒号上拆分行,但它仅在行前缀不同时才有效,内射(没有2行,前缀相同),以及用冒号分隔......(情况并非总是如此)

现在,我可以逐个查看这些格式并尝试为每个格式提供一个正则表达式,但这需要很多时间,而我不会。 我想知道是否有任何方法可以自动挖掘和处理文本块作为基于上下文的" chunk" (关于它们的间距和常见的重复词,例如“注册人”或“管理员”)并相应地分析它们。 NLP也许?

我很高兴听到任何想法,因为我有点难过。 感谢

2 个答案:

答案 0 :(得分:1)

实际上,有一些方法可以在不对每种格式进行手动分析的情况下完成这项工作,但最终可能会更加复杂和耗时,特别是如果您不熟悉它们。我会尝试,例如,为一种格式创建一个解析器,解析大量数据,然后以其他39种格式获取相同的数据,并使用已经获得的knowldege为每个令牌分配标签(例如" Registant name& #34;,"地址" ...和"其他")。之后,可以使用标记数据训练诸如CRF的一些序列分类器,或者可以应用诸如自动生成正则表达式的一些其他方法。

编辑:请求添加的其他信息。有一项任务,在NLP中称为序列标记,即将一个或多个类分配给令牌。基本的想法是你有标签数据,如"注册人/其他名称/其他:/其他DI /名称 - 开始VALENTIO /名称 - 内部罗西/名称 - 结束联系人/其他"并训练分类器以自动标记更多数据。一旦你用这种方式标记了数据,就很难提取必要的字符串。

广泛使用的分类器是条件随机场(CRF)和(最近)基于递归神经网络的分类器。它们背后的数学有点复杂,但有一些现成的工具可以在某种程度上用作黑盒子。我在this answer中概述了示例用例,您可以在其中找到逐步说明。

注意事项:

  1. 某些分类器只能以已知格式的样本推广到未知格式并非不可能,但通常需要多种不同格式的示例。可以手工标记几个训练样本,或者正如我所建议的,获得这些示例的一种方法是以多种格式获取已知数据,并根据您的知识为标记分配标签。例如,如果您知道DI VALENTINO ROSSI是一种格式的注册人名称,您可以在另一种格式中找到并标记为注册人名称。

  2. CRF和其他分类器不能保证100%完美预测。准确性将取决于训练样本和模板特征的数量,并且因任务而异。一个积极的方面,良好的CRF模型可以很好地抵御格式变化,格式错误和新格式 - 手写解析器通常失败的情况。我认为,对于你的任务,这应该运作良好,但在你真正尝试看之前,没有人能分辨出来。我用这种方法解决了一些类似的问题,比如自由格式价格表解析,邮政地址解析等。

  3. 熟悉整个概念需要一些时间。

答案 1 :(得分:0)

无法绕过分析每种格式。另外,请不要在这里使用正则表达式。

你应该在开始时继续。但是你必须要约束:

  • 如果两行具有相同的标签,则将内容放入数组中(例如“地址”)
  • 如果该行以':'结尾读取,直到以下行为空或以':'结尾。

解析后,您需要标准化数据,这将具有不同级别的键和详细信息。