Pregunta

Tenemos un programa que muestra datos de mapas (piense en Google Maps, pero con mucha más interactividad y capas personalizadas para nuestros clientes).

Permitimos la navegación a través de un conjunto de cuadros combinados que completan previamente ciertos campos con una gran cantidad de datos (es decir:País:Canadá, el campo Provincia está completado.Seleccione Ontario y se completará una lista de condados/regiones.Seleccione un condado/región y se completará una ciudad, etc...).

Si bien esto garantiza direcciones precisas, es una molestia para los usuarios si no saben dónde se encuentra una dirección o una ciudad (es decir, ¿en qué condado/región se encuentra Kitchener?).

Así que estamos intentando hacer un analizador de direcciones con un campo de texto de formato libre.

El usuario podría ingresar algo como esto (similar a Google Maps, Bing Maps, etc...):22 Main St, Kitchener, en

Y podríamos compartimentarlo en secciones y realizar búsquedas de datos y llegar al punto que buscan (o sugerir alternativas).

El problema con esto es que ¿cómo compartimos adecuadamente la información?¿Cómo dividimos las secciones y encontramos posibles coincidencias?Supongo que no tendríamos garantía de que el usuario ingresara datos en el formato que siempre esperábamos (obviamente).Una continuación de esto sería cómo presentar los datos si no encontramos una coincidencia exacta (o encontramos varias coincidencias exactas...dos ciudades con el mismo nombre de calle en diferentes condados, por ejemplo).

Tenemos una gran cantidad de datos disponibles en los datos cartográficos (principalmente en formato de pestaña mapinfo).Así podremos hacer escaneos rápidos de nombres de calles, ciudades, estados, etc.Pero no estoy seguro de cuál es la mejor manera de abordar este problema.Claro, usar Google Maps sería bueno, pero la mayoría de nuestros clientes están en redes cerradas donde generalmente no se permite el acceso externo y la mayoría no está dispuesta a confiar en Google Maps (ya que no contiene tanta información como necesitan). , como capas de mapas personalizados).Obviamente, podrían ir a Google y obtener la ubicación adecuada y luego pasar a nuestro software, pero esto llevaría mucho tiempo y la velocidad del proceso puede ser bastante importante.

¿Fue útil?

Solución

Esto es esencialmente una clase del problema Resolución entidad mencionada. NER Wikipedia

La mejor manera de abordar esto es para analizar la dirección mediante un transductor de idioma para identificar diversas construcciones -. Enfoque es similar al uso de expresiones regulares con una máquina de estados finitos

He tenido un gran éxito con el marco aprendizaje de Java PNL y máquina llamada GATE y su lib transductor se llama Jape. El registro de su interfaz gráfica de usuario, y usarlo para escribir código Java para él!

Su incorporado en los ejemplos deben empezar con lo básico, y luego se puede ampliar según sea necesario. En esencia, se compartimenta texto en componentes utilizando las reglas y el motor de reglas, así que algo como:

Xyz, Blah St,
Foo City, 11110, CA

se traduciría a,

Place: Xyz
Street: Blah St
City: Foo
...

Y a continuación, puede utilizar su base de datos de lugares para hacer partidos.

Jape también soporta búsquedas de diccionario, además de reglas - así que si ya tienen "Bla St" en su base de datos, y cuenta con 2 padres - ciudad Foo y Bar. - que acaba de eliminar la ambigüedad mediante el análisis del siguiente línea

Editar: GATE incluye una herramienta llamada Annie - un sistema de extracción de información, que se puede jugar un poco con identificar direcciones. Esto utiliza algunas de ellas construidas en Jape reglas que se pueden construir.

Otros consejos

Por cierto, ¿ha visto un nuevo punto final de la API que está experimentando con SmartyStreets? Extrae direcciones de texto y los valida y las convierte en componentes.

Consulte este otro Pila posterior desbordamiento, que entra en más detalles. Yo trabajo en SmartyStreets y ayudó a desarrollarla, así que puedo decir que este es un muy duro problema, aunque desde la superficie parece sencillo.

Simson Garfinkel trabajó uno para su libreta de direcciones ingenioso para NeXTstep (que más tarde se compila y se actualiza para Mac OS X y sometida a un concurso de diseño de Apple). Desde entonces, ha sido de código abierto y está disponible en su sitio web a continuación:

http://simson.net/ref/sbook5/

Geocoder.ca limpia, estandariza y geocodifica cadenas de direcciones de ubicación.También agrega código postal, zona horaria y código de área.

Por ejemplo:https://geocoder.ca/22%20Main%20St,%20Kitchener,%20On?geoit=xml

<geodata>
        <latt>43.286272</latt>
        <longt>-80.445823</longt>
     <postal>N0B1E1</postal>
<Dissemination_Area><dauid>35300802</dauid><adauid>35300042</adauid></Dissemination_Area>
<AreaCode>226,519</AreaCode>
<TimeZone>America/Toronto</TimeZone>
<standard>
<stnumber>22</stnumber><staddress>Main ST</staddress><city>Kitchener</city><prov>ON</prov><confidence>0.7</confidence></standard>
</geodata>

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top