Ummmm .....
Eso requiere el uso de expresiones regulares. El tema es que te va a dar
bastantes quebraderos de cabeza encontrar un conjunto de expresiones
regulares que te sirva.
Al final es un tema de prueba y error. Para el ejemplo que poners para la
expresión regular que detectaría el nombre de la calle podrías verificar que
si una palabra va seguida de "de" entonces es un nombre (de ciudad, calle
...) y no un número.
A bote pronte lo que se me ocurre es identificar los "separadores".
Entiendo que separan cada tipo de dato por coma o por un salto de línea y si
lo separan por espacio habrá que suponer un orden en los elementos de la
dirección.
Para determinados elementos como "Calle", "Rua", "Kalea" y
el equivalente
en catalán, y lo mismo para la palabra "de" tendrás que ser capaz de
identificarlos en los distintos idiomas (así rapidamente se me ocurre crear
un array asociativo para cada idioma, donde cada elemento tenga un
identificador ....) pero la lógica del algoritmo debería de ser la misma.
Al final habrá elementos que no podrás identificar de manera automática
(órden extraño en los elementos, errores de ortografía ...) pero bueno, eso
va a ser inevitable.
Aquí <http://perldoc.perl.org/index-tutorials.html> hay algunos tutoriales
sobre expresiones regulares. Aunque son de Perl, las puedes usar en PHP y
en cualquier otro lenguaje.
Va a ser un trabajo de chinos (prueba, error, mejora de la expresión,
prueba, error, mejora de la expresión .....) pero bueno, la aplicación que
están haciendo es así.
Si necesitas que te eche una mano envía las dudas a la lista. Lo
interesante sería disponer de las líneas de texto con el listado de las
direcciones para ir intentando parsearlo.
Un saludo
Ciges
2010/5/5 isaac1024 <caasi1024(a)gmail.com>
Bueno, pois dame a sensación de que na empresa
onde fago as practicas
pedíronme crear unha aplicación que supera en moito as miñas capacidades
como programador. Quixera facer algunha consulta con vos.
Na empresa reciven en documentos (diferentes formatos) unha lista de
direccions (tipo via, via, numero, provincia, poblacion, codigo postal,
telefono,... poden vir todos os datos ou uns cantos, e tampoco segen este
orde). eles o que queren é unha aplicación que sexa capaz de crear unha
folla de calculo onde os datos esten ben estructurados para poder traballar
con eles. ademas as provincias e poblacións teñen unha codificacion
especial.
Eles xa estaban creando esta aplicación, pero cando a provei vin que o
unico correcto era o titulo. Así que recreei a aplicación reciclando a
estructura xeral da aplicación e algunha función que era correcta.
O maior problema que teño é que a xente que crea os documentos que recive
a empresa escrive as direccións como lles dá gana e isto dame moitos
problemas para detectar o municipio e a dirección xa que poden estar en 4
idiomas (castelan, galego, catalan, vasco), e ademais fan abreviaturas,
utilizan diferentes separadores, ...
Cada vez que procuro solventar un problema xurdeme un novo (un exemplo é:
hay xente que usa un . para abreviar, outros para separar, algo similar
pasame con -).
Creei unha base de datos pra consultar Codigos postais, municipios e
Provincias o problema é que parece que alguns codigos postais son
incorrectos e para detectar os municipios costame moito xa que teños que
controlar 8500 municipios (xa que cada persoa o escribe dunha forma distinta
xd. de momento a principal solucion que lle atopei foi quetalle os artigos e
por varias solucions aos municipios principais, pero facer isto ultimo para
todos os municipios pareceme moi lioso xa que incrementara en moito os
rexistros e poderia dar problemas coa base de datos (creo)). Unha base de
daos con vias xa non a planteo, se teño problemas cos municipios as vias
ainda sera moitisimo peor.
Como solución para as vias demomento creei unha funcion que "consegue
detectar" abrebiaturas de tipos de vias, o principal problema desta función
e que corrixe demasiado: a palabra paz a interpreta como abreviatura de
plaza nun principio estaba pensando en implementar unha serie de puntucion
para disciminar estes casos (pero creo que é demasiado complexo para mi e
costríame demasiado faceo correcto, despois pensei en crear unha base de
datos con palabras que non tome con abreviaturas ¿será mellor esta
solución?) otro problema son as vias que teñen como nome números ¿se vos
ocurre algunha forma de conseguir saber se ese número é o nome da calle ou o
numero da dirección? (exemplo c/ 5 de ferbero; ou algún poligono que teña
unha dirección numérica)
a verdade é que me está costando moito facelo como queren, eu penso que os
datos deben estár controlados por persoas xa que poden dar moitos problemas
(que falte unha letra, que se equivoque de poboación ou que a dirección esté
mal detectada); pero eles queren que sexa o mais automático posible.
De momento as solucións que xa pensei foi: migrar para sudamerica, tirarme
pola ventá (estou nun 6º piso),... ¿tedes algunha alternativa?
Xa sei que está moi mal descrito o que teño que facer, pero é que
realmente estoi moi liado coa aplicación.
--
----------Analogia del software libre, por Richard Stallman----------
Hay muchos puntos en común entre un programa y una receta. Con una lista
de etapas que hay que seguir y reglas que determinan en que momento se ha
terminado o como dar marcha atrás y al final se obtiene un cierto resultado.
Si a usted le gusta cocinar, sin duda intercambia sus recetas con sus
amigos, y tal vez tenga tendencia a modificarlas. Si ha modificado usted la
receta, si el resultado le gusta y a sus amigo también, existe la
posibilidad de que usted les pase la nueva versión de la receta.
Y ahora imagine un mundo en el que no podrían cambiar su receta porque
alguien ha decidido que es imposible modificarla, e imagine que si comparte
esa receta con sus amigos le tratarán de pirata y harán todo lo posible por
mandarle a la cárcel durante unos cuantos años.
_______________________________________________
GALPon mailing list
GALPon(a)listas.galpon.org
https://listas.galpon.org/cgi-bin/mailman/listinfo/galpon