Controlla attentamente il set di dati per assicurarti che il problema non sia già stato gestito per te.
Ho trascorso un bel po 'di tempo prima di creare una tassonomia del nome della strada che terminava, usando regexp condizionali per provare a strappare il numero civico dalle stringhe di indirizzo completo e tutto e si è scoperto che la tabella degli attributi per i miei shapefile aveva già segmentato questi componenti.
Prima di procedere con il processo di analisi delle stringhe di indirizzo, che è sempre un po 'complicato a causa delle inevitabili strane variazioni (alcuni indirizzi di pacchi sono per pacchi senza sbocco sul mare e hanno indirizzi strani, ecc.), Assicurati che il tuo set di dati non l'ha già fatto per te !!!
ma se non lo fai, esegue attraverso le stringhe di indirizzo, address.split(" ")
crea una serie di 'parole'. Nella maggior parte dei casi la prima "parola" è il numero civico. Questo ha funzionato per circa il 95% dei miei indirizzi. (NOTA: il mio: stringhe di indirizzo non contengono città, provincia, stato, CAP, erano solo gli indirizzi locali)
Mi sono imbattuto nell'intera popolazione di indirizzi e prelevato l'ultima "parola" da ogni indirizzo & esaminato array & eliminava "parole" che non erano "Lane", "Road", "Rd" o qualsiasi altra cosa. Da questo elenco di terminazioni di indirizzo che ho creato questo enorme oggetto corrispondente regexp
streetnm_endings = street_endings.map {|s| /#{s}/ }
endings_matches = Regexp.union(street_endings)
Ho corso attraverso ogni stringa di indirizzo, shift
-ing il primo membro di matrice perché, ancora una volta che è stato il numero quasi sempre via. E poi gsub'd le terminazioni di strada per ottenere quello che dovrebbe essere il numero nome della strada sans strada o di strada terminazioni nome, che i database non piace in generale:
parcels.each do |p|
remainder = p.address.split(" ")
p.streetnum = remainder.shift
p.streetname = remainder.join(" ").gsub(endings_matches, "")
p.save
end
E non sempre funziona, ma ha funzionato la maggior parte di il tempo.
Semplice, non farlo! o chiedere i campi individualmente o memorizzarli nel loro complesso. l'analisi di questo non sarà mai accurata al 100% perché la quantità di variazione è maggiore di quanto tu possa immaginare. Se si desidera un campo numero civico (che non si dovrebbe) avere un campo numero_casa nel modulo. – drhenner
BTW: esiste un'API con USPS. https://www.usps.com/business/web-tools-apis/welcome.htm possono verificare il tuo indirizzo e possibilmente fornirti informazioni dettagliate migliori. – drhenner
Il database delle proprietà di base che sto modificando ha i campi separati in questo modo, motivo per cui il campo casa e il tipo di strada. Ho anche un indirizzo completo. Sto facendo questo per coerenza nei dati dove possibile –