2017-03-06 9 views
1

私は、アドレスから国を得ることができるpythonパッケージを探しています。Pythonパッケージ:アドレス(非ip)に基づいて国を取得

私はpycountryを使用しますが、私はアドレスで国を持っている場合にのみ、私は使用できますが、私が持っている場合、私は元のために、何をするか分からない:

「ジョージタウン、TX」、「サンタフェニューメキシコ州」、「ニュルンベルク州」、「Haarbergstr。67 D-99097エアフルト」。

住所がなく、明確なパターンがない場合、私は何をすべきか分かりません。

答えて

3

と思われます。geopyは比較的簡単に実行できます。採用された例:documentation

>>> 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' 

私たちはそれを手に入れました!さて、あなたはスクリプトでリストを自動化することができ、他の場所

>>> 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' 

上でテスト:

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) 

出力:このことができます

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

希望。

+0

geopyはほとんどの場合、たとえば幅: "A.J. Tuck Co. Brookfield、Ct United States 06804-1814"のように機能しません。間違いなく米国の住所ですが、結果はありません。会社名と電話番号を削除すると機能しますが、アドレス – user3541631

+0

から会社名のような文字列を削除する明確なパターンがないため、私には役に立ちません。既に文字列に国がある場合は、あなたは文字列から国を抽出するだけですか?文字列解析や正規表現を使用していますか? – davedwards

+0

1)はい、それは自分自身に国とその名前のバリエーションのリストを構築しなければならないことを意味します。 - 私はそれのためにpycountryを使用することができますが、 - > 2)国のフォームを削除すると、私もnoneを受け取るので、1)主な問題ではなく、単なる例です。 3)パッケージそのものではなくサービスでの問題 - 私はそれらの多くを試しましたが、それぞれの問題は国によって異なるため、異なる名前を使用していましたので、より多くのものをリサイクルするのは難しいです。 4)Nominatimが応答時間として最も優れており、GoogleV3とYahooはタイムアウトを多く受けています。 – user3541631

関連する問題