输出英国地址的不同变体的Python或R函数

时间:2019-03-30 20:07:46

标签: python r regex

我有一个需要解析的许多英国地址的数据集,对于每个地址,输出不同的(可接受的)地址变体。

首先,我试图找出是否可以将问题简化为更简单的方法(也许使用已经可用的库)?如果没有,我正在尝试找出一种使用不同的Python / R函数来解析每个地址输入并产生可接受的输出的方法。

例如:

(Actual address) Flat 24a Ardshiel Avenue, Drum Brae, Edinburgh EH4 7HP

Python / R代码应输出的可接受的变体:

*Flat24a Ardshiel Avenue, Drum Brae, Edinburgh EH4 7HP
*F24a Ardshiel Avenue, Drum Brae, Edinburgh EH4 7HP
*f24a Ardshiel Avenue, Drum Brae, Edinburgh EH4 7HP
*f24 a Ardshiel Avenue, Drum Brae, Edinburgh EH4 7HP

The following sets are also acceptable variant outputs 
(with postcodes written without space):

*Flat24a Ardshiel Avenue, Drum Brae, Edinburgh EH47HP
*F24a Ardshiel Avenue, Drum Brae, Edinburgh EH47HP
*f24a Ardshiel Avenue, Drum Brae, Edinburgh EH47HP
*f24 a Ardshiel Avenue, Drum Brae, Edinburgh EH47HP

一些其他形式的地址需要解析,允许不同的地址 要识别的变体:

161-163 Newhaven Road, Edinburgh EH6 4QA
49a Torphin Road, Edinburgh EH13 0PQ
23/27 Gylemuir Road, Edinburgh EH12 7UB

该代码应该能够为要解析的每个输入地址输出不同的变体(可能是5或6种不同的类型)。重点应放在地址的前两行(因为这是人们通常缩短单词/简化地址的地方)-其余指示城市/镇/县/国家/地区的地址(可能只需要解析)以提供小写的可能性)。

地址的结构和形式变得更加重要,因为它应该输出“ f24”,因为人们可能会为f24Flat 24甚至在两者之间加空格。使用基于正则表达式的Python / R可以做到这一点吗?有人可以使用以前使用过的示例吗?

更新:我可以想到的一种更简单的用例形式是使用基于规则的解析器。例如,每个英国地址的结构都采用逗号分隔地址中的每一行。因此,可以应用规则,直到每个逗号结束为止。之后,下一条规则将执行并处理下一行,直到逗号结束。

Flat 24a Ardshiel Avenue, Drum Brae, Edinburgh EH4 7HP

Rule 1 = *Flat 24a Ardshiel Avenue*
The acceptable variant outputs that should be provided by the parser is:

1) Flat 24a Ardshiel Avenue (The actual line itself)
2) Flat 24a, Ardshiel Avenue (With a comma)
3) Flat24a Ardshiel Avenue
4) F24a Ardshiel Avenue
5) f24a Ardshiel Avenue
6) f24 Ardshiel Avenue
7) Flat24a Ardshiel Ave
8) F24a Ardshiel Ave
9) f24a Ardshiel Ave
10) f24 Ardshiel Ave


Rule 2 = *Drum Brae*
The acceptable variant outputs that should be provided by the parser is:
Since, not many variants can be produced with these two seperating words, maybe
and acceptable variant could be:

1) Drum Brae (The actual line itself)
2) DrumBrae (Assuming that people can still denote Street names in this way)


Rule 3 = *Edinburgh EH4 7HP*
The acceptable variant outputs that should be provided by the parser is:

1) Edinburgh EH4 7HP (The actual line itself)
2) Edinburgh EH47HP

最后,应将每个输出(片段)附加在一起以形成正确的地址语法。

我试图查看是否存在可以利用的库,或者有人可以通过基于规则的解析器/使用正则表达式来帮助我解决上述问题。

更新2:编写许多IF-ELSE语句对解决此问题是否有帮助?如果是,是否有人可以帮助分享一些我可以开始使用的类似代码示例?

1 个答案:

答案 0 :(得分:-1)

识别邮政地址是一个难题,因为地址是人们希望在上下文中理解的任何地址。

您知道罗马尼亚的这个地址吗? bl. l1 scara 3. aleea putna manastur cluj?

生成变体与一般情况下识别相同。

这表示我一般情况下会选择一些基于NLP和基于数据的解决方案,例如this one

您有一个更简单的用例吗?

相关问题