Геоданные

Работаем с адресами

Когда мы собираем информацию с сайтов, зачастую бывает, что адреса компаний или объектов написаны в свободной форме или в одном контейнере. В таких случаях разбитие адреса на составляющие: номер дома, улица, квартира, город, область, почтовый индекс и страна может оказаться сложной задачей. Для упрощения работы с адресами мы внедрили поддержку известной библиотеки libPostal. Эта библиотека написана на C и использует для разбора и нормализации адресов статистический NLP вместе с открытыми наборами данных от OSM и OpenAddresses.

Для разбора адресов используется команда address_parse, которая использует следующие параметры:

Параметр Описание
address Почтовый адрес, который необходимо разобрать.

Пример разбора адреса.

              # ПЕРЕХОДИМ В ГЕО КОНТЕКСТ
- geo:
    do:
    # Парсим адрес
    - address_parse:
        address: 350033, Краснодарский край, Краснодар, ул.Привокзальная Площадь,5
        do:
            
Time Level Message
2018-07-11 21:05:25:806 info Scrape is done
2018-07-11 21:05:25:792 debug Page content: ...
2018-07-11 21:05:24:760 info Retrieving page (POST/JSON): https://geo.diggernaut.net/parse
2018-07-11 21:05:24:752 debug Address: 350033, Краснодарский край, Краснодар, ул.Привокзальная Площадь,5
2018-07-11 21:05:24:739 debug Parsing address
2018-07-11 21:05:24:728 info Starting scrape
2018-07-11 21:05:24:690 debug Setting up surf
2018-07-11 21:05:24:657 info Starting digger: OSM test [2794]
                      <html>

<head></head>

<body>
    <body_safe>
        <body_safe>
            <components>
                <label>postcode</label>
                <value>350033</value>
            </components>
            <components>
                <label>state</label>
                <value>краснодарский край</value>
            </components>
            <components>
                <label>city</label>
                <value>краснодар</value>
            </components>
            <components>
                <label>road</label>
                <value>ул.привокзальная площадь</value>
            </components>
            <components>
                <label>house_number</label>
                <value>5</value>
            </components>
            <status>success</status>
        </body_safe>
    </body_safe>
</body>

</html>
                      

Пример нормализации адреса.

                  # ПЕРЕХОДИМ В ГЕО КОНТЕКСТ
    - geo:
        provider: osm
        do:
        # Нормализуем адрес
        - address_expand:
            address: One-hundred twenty E 96th St
            do:
                
Time Level Message
2018-07-12 01:58:42:548 info Scrape is done
2018-07-12 01:58:42:530 debug Page content: ...
2018-07-12 01:58:41:317 info Retrieving page (POST/JSON): https://geo.diggernaut.net/expand
2018-07-12 01:58:41:309 debug Address: One-hundred twenty E 96th St
2018-07-12 01:58:41:301 debug Normalizing address
2018-07-12 01:58:41:293 info Starting scrape
2018-07-12 01:58:41:253 debug Setting up surf
2018-07-12 01:58:41:221 info Starting digger: OSM test [2794]
                        <html>

<head></head>

<body>
    <body_safe>
        <body_safe>
            <expansions>120 east 96th saint</expansions>
            <expansions>120 east 96th street</expansions>
            <expansions>120 e 96th saint</expansions>
            <expansions>120 e 96th street</expansions>
            <expansions>120 east 96 saint</expansions>
            <expansions>120 east 96 street</expansions>
            <expansions>120 e 96 saint</expansions>
            <expansions>120 e 96 street</expansions>
            <status>success</status>
        </body_safe>
    </body_safe>
</body>

</html>
                          

Далее мы рассмотрим ряд вспомогательных команд, которые могут быть полезны в различных ситуациях.