2017-03-06 2 views
1

Ich suche nach Python-Paket, das mir helfen kann, das Land von der Adresse zu bekommen.Python-Paket: Holen Sie sich das Land basierend auf Adresse (Nicht-IP)

Ich benutze pycountry aber ich konnte nur verwendet, wenn ich das Land in der Adresse haben, aber ich weiß nicht, was passiert, wenn ich zu tun haben, für die Ex:

„Georgetown, TX“, „Santa Fe , New Mexico "," Nürnberg "," Haarbergstr. 67 D-99097 Erfurt ".

Ich weiß nicht, was ich tun soll, wenn ich kein Land in der Adresse habe, und kein klares Muster.

Antwort

3

Scheint, kann es relativ leicht tun. Ein Beispiel aus der documentation angenommen:

>>> import geopy 
>>> from geopy.geocoders import Nominatim 
>>> gl = Nominatim() 
>>> l = gl.geocode("Georgetown, TX") 
    # now we have l = Location((30.671598, -97.6550065012, 0.0)) 
>>> l.address 
[u'Georgetown', u' Williamson County', u' Texas', u' United States of America'] 
# split that address on commas into a list, and get the last item (i.e. the country) 
>>> l.address.split(',')[-1] 
u' United States of America' 

Wir haben es! Nun testen Sie es auf anderen Standorten

>>> l = gl.geocode("Santa Fe, New Mexico") 
l.address.split(',')[-1] 
u' United States of America' 
>>> l = gl.geocode("Nuremberg") 
>>> l.address.split(',')[-1] 
u' Deutschland' 
>>> l = gl.geocode("Haarbergstr. 67 D-99097 Erfurt") 
>>> l.address.split(',')[-1] 
u' Europe' 

So könnte man die Liste in einem Skript automatisieren:

import geopy 
from geopy.geocoders import Nominatim 

geolocator = Nominatim() 

list_of_locations = "Georgetown, TX" , "Santa Fe, New Mexico", "Nuremberg", "Haarbergstr. 67 D-99097 Erfurt" 

for loc in list_of_locations: 
    location = geolocator.geocode(loc) 
    fulladdress = location.address 
    country = fulladdress.split(',')[-1] 
    print '{loc}: {country}'.format(loc=loc, country=country) 

Ausgang:

Georgetown, TX: United States of America 
Santa Fe, New Mexico: United States of America 
Nuremberg: Deutschland 
Haarbergstr. 67 D-99097 Erfurt: Europe 

Hoffnung, das hilft.

+0

Geopy funktioniert in den meisten Fällen nicht, zum Beispiel Breite: "A.J. Tuck Co. Brookfield, Ct USA 06804-1814". Definitiv ist und USA-Adresse, aber das Ergebnis ist keine; Es funktioniert, wenn ich den Firmennamen und die Nummer entferne, aber es hilft mir nicht, weil ich kein klares Muster habe, um Zeichenfolgen wie Firmennamen von der Adresse – user3541631

+0

zu entfernen. Für das Beispiel, das bereits das Land in der Zeichenfolge hat, könnte Sie extrahieren nur das Land aus der Zeichenfolge? Verwenden Sie String-Parsing oder eine Regex? – davedwards

+0

1) Ja, aber das bedeutet, dass ich mir eine Liste von Ländern und deren Namensvarianten zusammenstellen muss; - Ich kann pycountry dafür verwenden, aber -> 2) wenn ich das Land aus der Zeichenfolge entferne, bekomme ich auch keine, also 1) ist nicht das Hauptproblem, ist nur ein Beispiel; 3) die Probleme sind nicht mit dem Paket selbst, aber mit den Dienstleistungen - ich habe mehr von ihnen probiert und jeder von ihnen hat verschiedene Probleme und verschiedene Namen für Land, so dass es schwieriger ist, durch mehr von ihnen zu recyceln; 4) Nominatim ist die beste Antwortzeit, mit GoogleV3 und Yahoo habe ich eine Menge Zeitüberschreitung erhalten. – user3541631

Verwandte Themen