提取德语地址形式的Python正则表达式解决方案

2024-05-29 06:32:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力编写一个Python regex代码来提取德语地址,如下所示。在

Abc Gmbh恩塞希默大街6-8 79346 Endingen

Def股份有限公司。16 77971德国Kippenheim

Ghi Deutschland Gmbh 53169波恩

Jkl Gmbh Ensheimer街。6-8 79346恩丁根

我写了下面的代码来提取单个地址组件,并将它们作为一个正则表达式放在一起,但是仍然无法检测到上面的地址。有人能帮我吗?在

# TEST COMPANY NAME
string = 'Telekom Deutschland Gmbh 53169 Bonn Datum'
result = re.findall(r'([a-zA-Zäöüß]+\s*?[A-Za-zäöüß]+\s*?[A-Za-zäöüß]?)',string,re.MULTILINE)
print(result)

# TEST STREET NAME
result = re.findall(r'([a-zA-Zäöüß]+\s*\.)',string)
print(result)

# TEST STREET NUMBER
result = re.findall(r'(\d{1,3}\s*[a-zA-Z]?[+|-]?\s*[\d{1,3}]?)',string)
print(result)

# TEST POSTAL CODE
result = re.findall(r'(\d{5})',string)
print(result)

# TEST CITY NAME
result = re.findall(r'([A-Za-z]+)?',string)
print(result)

# TEST COMBINED ADDRESS COMPONENTS GROUP
result = re.findall(r'([a-zA-Zäöüß]+\s+?[A-Za-zäöüß]+\s+?[A-Za-zäöüß]+\s+([a-zA-Zäöüß]+\s*\.)+?\s+(\d{1,3}\s*[a-zA-Z]?[+|-]?\s*[\d{1,3}]?)+\s+(\d{5})+\s+([A-Za-z]+))',string)
print(result)

请注意,我的目标是,如果这些地址中的任何一个出现在一个巨大的文本段落中,那么regex应该只提取并打印这些地址。有人能帮我吗?在


Tags: 代码nametestrestreetstring地址result
1条回答
网友
1楼 · 发布于 2024-05-29 06:32:07

{{a1}对其他语言使用{a2,而不是^对其他语言使用}。您必须单独安装libpostal,因为它包含1.8GB的培训数据。在

好在,你可以给它地址部分的任何顺序,它会选择正确的部分大部分时间。 它使用机器学习,在多种语言的OpenStreetMap数据上进行训练。在

对于给定的示例,不一定需要从字符串中删除公司名称和国家/地区:

from postal.parser import parse_address
parse_address('Telekom Deutschland Gmbh 53169 Bonn Datum')

[('telekom deutschland gmbh', 'house'),
 ('53169', 'postcode'),
 ('bonn', 'city'),
 ('datum', 'house')]

parse_address('Keltenstr . 16 77971 Kippenheim')

[('keltenstr', 'road'),
 ('16', 'house_number'),
 ('77971', 'postcode'),
 ('kippenheim', 'city')]

相关问题 更多 >

    热门问题