SORU
22 HAZİRAN 2012, Cuma


Nasıl metin dışında serbest sokak/posta adresi ayrıştırma ve bileşenlerine

İş büyük ölçüde Amerika Birleşik Devletleri ve kullanıcı deneyimini geliştirmek için tek bir metin alanı içine tüm adres alanları birleştirerek çalışıyoruz. Ama birkaç sorun var:

  • Kullanıcı tipleri doğru olmayabilir adresi veya standart bir formatta
  • Adres parçalar (sokak, şehir, Eyalet, vb.) ayrılmış olmalıdır kredi kartı ile ödeme işlemi
  • Kullanıcılar sadece daha fazla adresi (adı veya şirket gibi) girebilirsiniz
  • Google bunu yapabilir ama Servis ve sorgu sınırları Açısından engelleyicidir, özellikle sıkı bir bütçe

Görünüşe göre, bu ortak bir sorudur:

Bir şekilde etrafındaki metinden bir adres ayırıp parçalara var mı? Adresleri ayrıştırmak için normal bir ifade var mı?

CEVAP
22 HAZİRAN 2012, Cuma


Bir adres için doğrulama şirket çalışırken bu soruyu çok gördüm. İşte cevabı etrafında aynı soru ile arama yapan programcılar için daha erişilebilir hale getirmek için post ediyorum. Şirket adresleri işlenmiş milyarlarca oldu, ve bu süreçte çok şey öğrendik.

İlk olarak, adresleri hakkında bir kaç şey anlamak gerekir.

Adresleri regular değildir

Bu düzenli ifadeler vardır. Hepsini, bu çok özel bir biçimde: adresleri eşleşen basit düzenli ifadeler gördüm

/\s ({2,5} \d\s )(?![|p]m\b)(([a-zA-Z|\s ]{1,5}){1,2})?([|\,|.\s] )?(([a-zA-Z|\s ]{1,30}){1,4})(mahkeme|ct|St|st|sürücü|dr|şerit|ln|road|rd|Boulevard)([\s|\,|.|\;] )?(([a-zA-Z|\s ]{1,30}){1,2})([|\,|.\ s] )?\b(AK|AL|AR|AZ|CA|CO|CT|DC|DE|FL|GA|GU|Hİ|İA|İD|İL|İN|KS|KY|LA|MA|MD|ME|Mİ|MN|MO|MS|MT|NC|ND|NE|NH|NJ|NM|NV|NY|OH|OK|OR|PA|Rİ|SC|SD|TN|TX|UT|VA|Vİ|VT|WA|Wİ|WV|WY)([|\,|.\s] )?(\s \d{5})?([|\,|. \s] )

... line-sınıf dosyası 900 sinek bile daha fazla maç için devasa bir düzenli ifade oluşturur nerede 11**. Bu (örneğin, here's a fiddle of the above regex, that makes plenty of mistakes) tavsiye etmiyorum. Bu işe almak için kolay sihirli bir formül yok. Teoride vetarafındanteori, olası bir düzenli ifade ile adresleri aynı değil.

USPS Publication 28 Olası adresleri, anahtar kelimeler ve onların variatons ile birçok biçimleri belgeler. En kötüsü, adresleri genellikle belirsizdir. Kelimeler birden fazla anlama gelebilir ("St" olabilir "" veya "") Cadde ve onlar icat eminim bu kelimeler vardır. Saint "Stravenue" bir sokaktı soneki?) bilen (

Gerçekten adresleri anlayan bazı kod gerekir ve eğer bu kod yoksa, ticari bir sır değil. Ama muhtemelen Eğer gerçekten hoşlanıyorsan kendi rulo.

Adresleri beklenmedik şekil ve boyutlarda gelir

Burada yapmacık (ama) tam bazı adresler:

1)  102 main street
    Anytown, state

2)  400n 600e #2, 52173

3)  p.o. #104 60203

Hatta bu belki geçerli:

4)  829 LKSDFJlkjsdflkjsdljf Bkpw 12345

5)  205 1105 14 90210

Açıkçası, bu standart değil. Noktalama işaretleri ve Satır sonları garanti değil. Burada neler var:

  1. Sayı 1sokak adresi içerdiği için eksiksiz bir şehir ve eyalet. Bu bilgi ile, yeterince adresini tespit var, ve kabul edilemez "" (bazı standardizasyon ile). m

  2. Sayı 2aynı zamanda bir sokak adresi içerdiği için tam (ikincil/birim sayısı) ve 5 haneli bir adresi tanımlamak için yeterli POSTA kodu,.

  3. Sayı 3tam bir post POSTA kodu içerdiğinden kutusu biçimi ofisi.

  4. Sayı 4ayrıca the ZIP code is unique, özel kuruluş veya bir şirket bu adres alanı satın aldı yani. çünkü tam Benzersiz bir POSTA kodu yüksek hacimli veya konsantre teslim alanlar için. Bir şey kod 12345 ZİP hitaben Schenectady General Electric, NY gider. Bu örnek özellikle kimseye ulaşamaz, ama San Francisco hala sunmak mümkün olacaktır.

  5. 5 numaraayrıca, tam İnan ya da İnanma. Sadece bu rakamlarla, tam adresini olası tüm adresleri bir veritabanında ayrıştırılmış zaman tespit edilebilir. Eksik directionals, ikincil göstergesi ve ZIP 4 kod doyurucu bir bileşen olarak her sayı gördüğünüzde saçmadır. Tamamen genişletilmiş ve standart görünüyor:

205 N 1105 W 14 Apt

Beverly Hills 90210-5221 CA

Adres veri kendi değildir

Çoğu ülkede bu hükümet ajansı için kendisine ait ruhsatlı satıcılar için resmi adres veri sağlamak. ABD'de, San Francisco adresleri var. Aynı şekilde her ülke veya mülkiyet biraz zorlar farklı tanımlar olsa da, Kanada Post, Royal Mail, ve diğerleri için de geçerlidir. Bu Bilgi, genellikle ters mühendislik Adres veritabanı yasaklıyor. Almak, saklamak ve verileri kullanmak nasıl dikkatli olmak zorunda.

Google Maps bir ortak go-to için hızlı Adres giderir, ama TOS oldukça engelleyici; örneğin, bir insan değilsin onların veri veya API olmadan gösteren bir Google Harita ve olmayan ticari amaçla sadece (sürece size ödeme) ve mağaza veri (dışında geçici olarak önbelleğe alma). Mantıklı. Google'ın veri dünyanın en iyi bazıları. Ancak, Google Maps yapardeğiladresini doğrulayın. Eğer bir adres varsa, hala nerede adresini size gösterecektireğeryaptıvar (kendi sokakta dene; yok bildiğiniz bir ev Bir Numara kullanın). Bu yararlı bazen, ama o farkında olun.

Nominatim usage policy benzer şekilde sınırlayan, özellikle yüksek hacimli ve ticari kullanım ve veri çoğunlukla çizilmiş ücretsiz kaynaklar, öyle değil mi muhafaza (bu, doğanın açık projeleri) -- ancak, bu hala uygun ihtiyaçları. Büyük bir topluluk tarafından desteklenmektedir.

Posta HİZMETLERİ'NİN bir API kendisi vardır, ama it goes down a lot ve hiçbir garanti de desteği ile geliyor. Kullanımı da çok zor olabilir. Bazı insanlar tutumlu herhangi bir sorun ile kullanabilirsiniz. Ama kolay ERİŞME adresleri onları üzerinden göndermek için teyit için kendi API kullanmanızı gerektiren bir bayan için.

İnsanlar adreslerinin sabit olmasını bekliyoruz

Ne yazık ki, toplumumuzun adresleri karmaşık olmasını beklemek klimalı ettik. Orada onlarca iyi UX makaleler her yerinde İnternet ile ilgili bu, ama gerçek şu ki, eğer bir adres formu ile bireysel alanları, kullanıcıların bile olsa herşeyi daha da zorlaştırıyor kenar-durumu ele uymuyor biçimi şeklidir bekliyor, ya da belki şeklinde gerektiren bir alan olmamalı. Ya da kullanıcıların adres olarak nereye koyacağımı bilmiyorum.

Çıkış formları hakkında kötü UX bu günlerde üzerinde ve gidebiliriz, ama yerine sadece tek bir alana adresleri birleştiren bir olacağını söyleyebilirimhoş geldinizdeğiştir -- insanlar uygun gördükleri nasıl adreslerini, uzun form anlamaya çalışmak yerine yazmak mümkün olacak. Ancak, bu değişiklik olacakbeklenmedikve kullanıcılar ilk başta biraz sarsıcı olabilir. Sadece farkında olun.

Bu acıyı bir bölümü ülke alanının ön, adresi önce ortaya koyarak azaltılabilir. Ülkemizdeki alan ilk doldururken, formun görünmesi için nasıl. Belki Amerika Birleşik Devletleri onlar seçerseniz, tek bir alan için form azaltmak, bileşen alanları göster yoksa tek alan ile başa çıkmak için iyi bir yol BİZİ adresleri var. Düşünmek için sadece bir şey!

Şimdi zor, siz bu konuda ne yapabilirim Neden biliyoruz?

Posta HİZMETLERİ'NİN sürecinden satıcıları CASS™ Sertifika müşterilere doğrulandı adresleri sağlamaya çağırdı lisansları. Bu satıcıların San Francisco veritabanına erişim, aylık güncelledik. Kendi yazılımı titiz standartlarına sahip olması için uygun olmalıdır genellikle yukarıda anlatıldığı gibi sınırlayıcı şartlar için anlaşma gerekmez.

Listeler işlem veya API olan CASS Onaylı birçok şirket var: birkaç isim Melissa Veri, Kredi QAS, ve SmartyStreets.

(Nedeniyle "reklam" bu noktada benim cevabım kesildi ettim. çelik yelek Sizin için çalışan bir çözüm bulmak için.)

Gerçeği:Gerçekten, millet, bu şirketler herhangi bir işim yok. Bir reklam değil.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • circuschina

    circuschina

    16 Mart 2007
  • PhoneBuff

    PhoneBuff

    10 HAZİRAN 2011
  • Pituvision

    Pituvision

    11 Mart 2006