Libpostal es una biblioteca C para analizar/normalizar direcciones de la calle en todo el mundo utilizando PNL estadística y datos abiertos. El objetivo de este proyecto es comprender las cuerdas basadas en la ubicación en cada idioma, en todas partes. Para obtener una descripción más completa de la investigación detrás de Libpostal, asegúrese de consultar las publicaciones de blog introductorias (largas):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
Las direcciones y las ubicaciones que representan son esenciales para cualquier aplicación que trata con mapas (búsqueda de lugares, transporte, servicios a pedido/entrega, verificación, revisiones). Sin embargo, incluso las direcciones más simples están llenas de convenciones locales, abreviaturas y contexto, lo que hace que sean difíciles de indexar/consultar efectivamente con los motores de búsqueda de texto completo tradicionales. Esta biblioteca ayuda a convertir las direcciones de forma libre que los humanos usan en formas limpias y normalizadas adecuadas para la comparación de la máquina e indexación de texto completo. Aunque Libpostal no es en sí mismo un geocoder completo, puede usarse como un paso de preprocesamiento para que cualquier aplicación de geocodificación sea más inteligente, más simple y más consistente internacionalmente.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
La biblioteca Core está escrita en Pure C. Language Bindings para Python, Ruby, GO, Java, PHP y NodeJS son compatibles oficialmente y es fácil escribir enlaces en otros idiomas.
Si su empresa está utilizando libpostal, considere pedirle a su organización que patrocine el proyecto. Interpretar lo que los humanos significan cuando se refieren a lugares está lejos de ser un problema resuelto, y los patrocinios nos ayudan a seguir nuevas fronteras en la PNL geoespacial. Como patrocinador, el logotipo de su empresa aparecerá prominentemente en la página de repositorio de GitHub junto con un enlace a su sitio. Información de patrocinio
Los usuarios individuales también pueden ayudar a apoyar la investigación de GEO NLP abierto haciendo una donación mensual:
Antes de instalar, asegúrese de tener los siguientes requisitos previos:
En Ubuntu/Debian
sudo apt-get install curl autoconf automake libtool pkg-config
En CentOS/RHEL
sudo yum install curl autoconf automake libtool pkgconfig
En Mac OSX
brew install curl autoconf automake libtool pkg-config
Luego para instalar la biblioteca C:
Si está utilizando un M1 MAC, agregue --disable-sse2 al comando ./configure . Esto dará como resultado un rendimiento más pobre, pero la construcción tendrá éxito.
git clone https://github.com/openvenues/libpostal
cd libpostal
./bootstrap.sh
./configure --datadir=[...some dir with a few GB of space...]
make -j4
sudo make install
# On Linux it's probably a good idea to run
sudo ldconfig
Libpostal tiene soporte para PKG-Config, por lo que puede usar el PKG-Config para imprimir las banderas necesarias para vincular su programa contra él:
pkg-config --cflags libpostal # print compiler flags
pkg-config --libs libpostal # print linker flags
pkg-config --cflags --libs libpostal # print both
Por ejemplo, si escribe un programa llamado App.C, puede compilarlo así:
gcc app.c `pkg-config --cflags --libs libpostal`
Msys2/mingw
Para Windows, el procedimiento de compilación actualmente requiere MSYS2 y MINGW. Esto se puede descargar de http://msys2.org. Siga las instrucciones en el sitio web de MSYS2 para su instalación.
Asegúrese de que MSYS2 esté actualizado ejecutando:
pacman -Syu
Instale los siguientes requisitos previos:
pacman -S autoconf automake curl git make libtool gcc mingw-w64-x86_64-gcc
Luego para construir la biblioteca C:
git clone https://github.com/openvenues/libpostal
cd libpostal
cp -rf windows/* ./
./bootstrap.sh
./configure --datadir=[...some dir with a few GB of space...]
make -j4
make install
Notas: Al configurar el DataDir, la unidad C: se ingresaría como /c . El script de compilación libpostal agrega automáticamente libpostal en el extremo de la ruta, por lo que '/c' se convertiría en C:libpostal en Windows.
El .dll compilado estará en el directorio src/.libs/ y debe llamarse libpostal-1.dll .
Si necesita una biblioteca de importación .lib para vincular esto a su aplicación. Puede generar uno utilizando la herramienta Visual Studio lib.exe y el archivo de definición libpostal.def :
lib.exe /def:libpostal.def /out:libpostal.lib /machine:x64
Un modelo de datos alternativo está disponible para libpostal. Es creado por Senzing Inc. para mejorar el análisis en las direcciones de EE. UU., Reino Unido y Singapur y un mejor manejo de las direcciones de ruta rural de EE. UU. Para habilitar este MODEL=senzing a la línea de coniguración durante la instalación:
./configure --datadir=[...some dir with a few GB of space...] MODEL=senzing
Los datos para este modelo se obtienen de OpenAddress, OpenStreetMap y los datos generados por Senzing en función de los comentarios de los clientes (unos pocos cientos de registros), un total de aproximadamente 1.200 millones de registros de datos de más de 230 países, en más de 100 idiomas. Los datos de OpenStreetMap y OpenAddress son buenos pero no perfectos, por lo que el conjunto de datos se modificó filtrando direcciones mal formadas, corrigiendo tokens de direcciones mal clasificados y eliminando tokens que no pertenecían a las direcciones, cada vez que se encontraban estas condiciones.
Senzing creó un conjunto de datos de 12950 direcciones de 89 países que utiliza para probar y verificar la calidad de sus modelos. El conjunto de datos se generó utilizando direcciones aleatorias de OSM, mínimamente 50 por país. Se obtuvieron direcciones difíciles de ser del equipo de soporte y clientes de Senzing y de la página Libpostal GitHub y se agregaron a este conjunto. El modelo Senzing obtuvo un 4.3% mejores resultados de análisis que el modelo predeterminado, utilizando este conjunto de pruebas.
El tamaño de este modelo es de aproximadamente 2.2 GB en comparación con 1.8 GB para el modelo predeterminado, así que tenga en cuenta si el espacio de los almacenamientos es importante.
Se puede encontrar más información sobre este modelo de datos en: https://github.com/senzing/libpostal-data Si se encuentra con algún problema con este modelo, ya sea que tengan que ver con PARSE, instalación o cualquier otro problema, entonces denunciarlos en https://github.com/senzing/libpostal-dataTaTaTaTaata
La dirección internacional de Libpostal utiliza el aprendizaje automático (campos aleatorios condicionales) y está capacitado en más de mil millones de direcciones en todos los países habitados en la Tierra. Utilizamos OpenStreetMap y OpenAddresses como fuentes de direcciones estructuradas, y las plantillas de formato de dirección OpenCage en: https://github.com/opencagedata/address-formatting para construir los datos de capacitación, complementando con la contención de polígonos y generando componentes sub-building de apartamentos/números de piso de apartamento/números de pisos y PO. También agregamos abreviaturas, los componentes de abandono al azar, etc. para que el analizador sea lo más robusto posible para la entrada desordenada del mundo real.
Estos resultados de análisis de ejemplo se toman del programa Interactive Directs_Parser que se construye con libpostal cuando ejecuta make . Tenga en cuenta que el analizador puede manejar comas frente a no comas, así como varias cubiertas y permutaciones de componentes (si la entrada es, por ejemplo, solo ciudad o solo ciudad/código postal).
El analizador logra una precisión muy alta en los datos retenidos, actualmente 99.45% de analizador completo correcto (lo que significa 1 en el numerador para que cada token sea correcto en la dirección).
Aquí hay un ejemplo de la API de PARSER usando las enlaces de Python:
from postal . parser import parse_address
parse_address ( 'The Book Club 100-106 Leonard St Shoreditch London EC2A 4RH, United Kingdom' )Y un ejemplo con la API C:
#include <stdio.h>
#include <stdlib.h>
#include <libpostal/libpostal.h>
int main ( int argc , char * * argv ) {
// Setup (only called once at the beginning of your program)
if (! libpostal_setup () || ! libpostal_setup_parser ()) {
exit ( EXIT_FAILURE );
}
libpostal_address_parser_options_t options = libpostal_get_address_parser_default_options ();
libpostal_address_parser_response_t * parsed = libpostal_parse_address ( "781 Franklin Ave Crown Heights Brooklyn NYC NY 11216 USA" , options );
for ( size_t i = 0 ; i < parsed -> num_components ; i ++ ) {
printf ( "%s: %sn" , parsed -> labels [ i ], parsed -> components [ i ]);
}
// Free parse result
libpostal_address_parser_response_destroy ( parsed );
// Teardown (only called once at the end of your program)
libpostal_teardown ();
libpostal_teardown_parser ();
}El analizador de la dirección puede usar técnicamente cualquier etiqueta de cadena definida en los datos de capacitación, pero estos son los que actualmente definen actualmente, en función de los campos definidos en la biblioteca de formación de direcciones de OpenCage, así como algunos agregados por libpostal para manejar patrones específicos:
La API Expand_Address convierte las direcciones desordenadas del mundo real en equivalentes normalizados adecuados para la indexación de búsqueda, hashing, etc.
Aquí hay un ejemplo interactivo usando el enlace de Python:
Libpostal contiene un clasificador de lenguaje entrenado con OSM para detectar qué idiomas se usan en una dirección dada para que pueda aplicar las normalizaciones apropiadas. La única entrada necesaria es la cadena de dirección sin procesar. Aquí hay una breve lista de algunas normalizaciones menos directas en varios idiomas.
| Aporte | Salida (puede ser múltiple en libpostal) |
|---|---|
| Ciento veinte e 96th st | 120 East 96th Street |
| C/ ocho, pi 4 | Calle 8 Polígono Industrial 4 |
| V xx setmbre, 20 | a través de 20 setmbre 20 |
| Quatre Vingt Douze R. de L'Église | 92 rue de l eglise |
| ул каретный р, д 4, строение 7 | улица каретныи рд дópicon |
| ул каретный р, д 4, строение 7 | Ulitsa Karetnyy Ryad Dom 4 Stroyeniye 7 |
| Marktstraße 14 | Markt Strasse 14 |
Libpostal actualmente admite este tipo de normalizaciones en más de 60 idiomas , y puede agregar más (sin tener que escribir ninguna C).
Para una lectura adicional y a algunos extraños casos de borde de la dirección, consulte: Los programadores de falsedades creen sobre las direcciones.
Aquí hay un ejemplo que usa los enlaces de Python para la sucinción (la mayoría de las enlaces de lenguaje de nivel superior son similares):
from postal . expand import expand_address
expansions = expand_address ( 'Quatre-vingt-douze Ave des Champs-Élysées' )
assert '92 avenue des champs-elysees' in set ( expansions )El equivalente de C API es algunas líneas más, pero sigue siendo bastante simple:
#include <stdio.h>
#include <stdlib.h>
#include <libpostal/libpostal.h>
int main ( int argc , char * * argv ) {
// Setup (only called once at the beginning of your program)
if (! libpostal_setup () || ! libpostal_setup_language_classifier ()) {
exit ( EXIT_FAILURE );
}
size_t num_expansions ;
libpostal_normalize_options_t options = libpostal_get_default_options ();
char * * expansions = libpostal_expand_address ( "Quatre-vingt-douze Ave des Champs-Élysées" , options , & num_expansions );
for ( size_t i = 0 ; i < num_expansions ; i ++ ) {
printf ( "%sn" , expansions [ i ]);
}
// Free expansions
libpostal_expansion_array_destroy ( expansions , num_expansions );
// Teardown (only called once at the end of your program)
libpostal_teardown ();
libpostal_teardown_language_classifier ();
}Después de construir libpostal:
cd src/
./libpostal "Quatre vingt douze Ave des Champs-Élysées"
Si tiene un archivo de texto o transmisión con una dirección por línea, la interfaz de línea de comandos también acepta la entrada de stdin:
cat some_file | ./libpostal --json
Después de construir libpostal:
cd src/
./address_parser
direcciones_parser es una carcasa interactiva. Simplemente escriba direcciones y Libpostal las analizará e imprimirá el resultado.
Libpostal está diseñado para ser utilizado por idiomas de nivel superior. Si no ve su idioma de elección, o si está escribiendo un idioma vinculante, ¡háganoslo saber!
Bindoces de lenguaje oficialmente compatibles
ANIFICACIONES DE LENGUA DEL LENGUA OFICINA
Extensiones de base de datos
API REST no oficial
Docker de descanso libpostal
Libpostal Zeromq Docker
Libpostal utiliza el mejor para las pruebas automatizadas. Para ejecutar las pruebas, use:
make check
Agregar casos de prueba es fácil, incluso si su C es oxidada/inexistente, y nos encantaría contribuciones. Utilizamos principalmente pruebas funcionales de control de la entrada de cadena contra la salida de cadena.
Libpostal también se prueba periódicamente en millones de direcciones de OSM (Clean), así como consultas anonimizadas de un geocoder de producción (no tan limpio). Durante este proceso, usamos Valgrind para verificar si hay fugas de memoria y otros errores.
Libpostal necesita descargar algunos archivos de datos de S3. Los archivos básicos son representaciones en disco de las estructuras de datos necesarias para realizar la expansión. Para el análisis de las direcciones, dado que la capacitación del modelo lleva unos días, publicamos el modelo totalmente capacitado en S3 y lo actualizaremos automáticamente a medida que se agregan nuevas direcciones a OSM, OpenAddresses, etc. Lo mismo ocurre con el modelo de clasificador de idiomas.
Los archivos de datos se descargan automáticamente cuando ejecuta Make. Para verificar y descargar cualquier archivo de datos nuevos, puede ejecutar make o ejecutar:
libpostal_data download all $YOUR_DATA_DIR/libpostal
Y reemplace $ your_data_dir con lo que haya pasado para configurar durante la instalación.
Libpostal contiene una serie de diccionarios por idioma que influyen en la expansión, el clasificador de idiomas y el analizador. Para explorar los diccionarios o contribuir con abreviaturas/frases en su idioma, consulte recursos/diccionarios.
En el aprendizaje automático, grandes cantidades de datos de capacitación a menudo son esenciales para obtener buenos resultados. Muchos proyectos de aprendizaje automático de código abierto solo liberan el código del modelo (resultados reproducibles si y solo si es Google), o un modelo precipitado donde se desconocen las condiciones de capacitación.
Libpostal es un poco diferente porque está entrenado en datos abiertos que están disponibles para todos, por lo que hemos lanzado toda la tubería de capacitación (el paquete Geodata en este repositorio), así como los datos de capacitación resultantes en el archivo de Internet. Es más de 100 GB desactivado.
Los datos de capacitación se almacenan en Archive.org en la fecha en que se crearon. También hay un archivo almacenado en el directorio principal de este repositorio llamado current_parser_training_set que almacena la fecha del conjunto de capacitación creado más recientemente. Para señalar siempre los datos más recientes, intente algo como: latest=$(cat current_parser_training_set) y use esa variable en lugar de la fecha.
Todos los archivos se pueden encontrar en https://archive.org/download/libpostal-parser-training-data-yyyyymmdd/$file como archivos de valores de tabulación (TSV) formateados como: languagetcountrytaddress .
Si el analizador no funciona tan bien como esperaba un tipo particular de dirección, el mejor recurso es usar GREP/AWK para mirar a través de los datos de entrenamiento e intentar determinar si hay algún patrón/estilo de dirección que no se está capturando.
Expansión de la abreviatura : por ejemplo, expandir "RD" => "Road" pero para casi cualquier idioma. Libpostal admite> 50 idiomas y es fácil agregar nuevos idiomas o expandir los diccionarios actuales. Se respaldan los idiomas ideográficos (no separados por el espacio en blanco, por ejemplo, chino), al igual que los idiomas germánicos donde los tipos de vía se concatenan en el extremo de la cuerda, y se puede separar opcionalmente para que RosenStraße y Rosen Straße sean equivalentes.
Análisis de la dirección internacional : campo aleatorio condicional que analiza "123 Main Street New York" en {"House_Number": 123, "Road": "Main Street", "City": "Nueva York", "Estado": "Nueva York"}. El analizador trabaja para una amplia variedad de países e idiomas, no solo de EE. UU./Inglés. El modelo está capacitado en más de mil millones de direcciones y cadenas similares a la dirección, utilizando las plantillas en la dirección de apertura que formatea el repositorio para construir ejemplos de transmisión formateados y etiquetados para todos los países habitados del mundo. Se realizan muchos tipos de normalizaciones para hacer que los datos de entrenamiento se parezcan a la entrada de geocoder desordenada real lo más cerca posible.
Clasificación del lenguaje : regresión logística multinomial entrenada (utilizando el método FTRL-proximal para inducir dispersión) en todas las formas de OpenStreetMap, Addr:* Etiquetas, topónimos y direcciones formateadas. Las etiquetas se derivan utilizando pruebas de punto en polón para países de OSM y idiomas oficiales/regionales para países y límites de administración 1 respectivamente. Entonces, por ejemplo, el español es el idioma predeterminado en España, pero en diferentes regiones, por ejemplo, Catalunya, Galicia, la región vasca, los idiomas regionales respectivos son el valor predeterminado. La desambiguación basada en el diccionario se emplea en los casos en que el idioma regional no es defecto, por ejemplo, Welsh, Breton, Occitan. Los diccionarios también se utilizan para abreviar frases canónicas como "Calle" => "C/" (realizado tanto en el clasificador de idiomas como en los conjuntos de capacitación de analizador de dirección)
Analización de expresión numérica ("Veinte primero" => 21, "Quatre-vhingt-Douze" => 92, nuevamente utilizando datos proporcionados en CLDR), admite> 30 idiomas. Maneja idiomas con expresiones concatenadas, por ejemplo, Milleottocento => 1800. Opcionalmente normaliza los números romanos, independientemente del idioma (ix => 9) que ocurren en los nombres de muchos monarcas, papas, etc.
Tokenización / lexing rápida y precisa : con reloj de tokens / 1 m / seg, implementa la especificación TR-29 para la segmentación de palabras UTF8, tokeniza los idiomas de Asia Oriental Chract por carácter en lugar de en espacios en blanco.
Normalización de UTF8 : opcionalmente, descompone el formulario de normalización UTF8 a NFD, las marcas de acento de tira, por ejemplo, à => a y/o aplican la transliteración latina-asii.
Transliteración : por ejemplo, уллица => Ulica o Ulitsa. Utiliza todas las transformaciones CLDR, los mismos datos de origen utilizados por la UCI, aunque Libpostal no requiere tirar de toda la UCI (podría entrar en conflicto con la versión de su sistema). Nota: Algunos idiomas, particularmente hebreo, árabe y tailandés pueden no incluir vocales y, por lo tanto, no a menudo coincidirán con una transliteración realizada por un humano. Es posible implementar transliteradores estadísticos para algunos de estos idiomas.
Detección de script : detecta qué script usa una cadena dada (puede ser múltiple, por ejemplo, una dirección Hong Kong o Macau de forma libre puede usar scripts Han y latín en la misma dirección). En la transliteración podemos usar todos los transliteradores aplicables para un script unicode dado (el griego puede, por ejemplo, transliterarse con griego-latina, griego-latina-bgn y griego-latina-unjegn).
Libpostal se creó originalmente como parte del proyecto de Openvenues para resolver el problema de la deduza del lugar. En Openvenues, tenemos un conjunto de datos de millones de lugares derivados de terabytes de páginas web de The Common Crawl. El rastreo común se publica mensualmente, por lo que incluso fusionar los resultados de dos rastreos produce duplicados significativos.
Deduping es un campo relativamente bien estudiado, y para documentos de texto como páginas web, documentos académicos, etc. Existen métodos de similitud aproximados bastante decentes como Minhash.
Sin embargo, para las direcciones físicas, el uso frecuente de abreviaturas convencionales como Road == Rd, California == CA o Nueva York == NYC complica un poco las cosas. Incluso utilizando una técnica como Minhash, que es muy adecuada para coincidencias aproximadas y es equivalente a la similitud de Jaccard de dos conjuntos, tenemos que trabajar con textos muy cortos y a menudo es el caso que dos direcciones equivalentes, una abreviada y otra completamente especificada, no coincidiremos muy cerca en términos de N-Gram Set. En los guiones no latinos, digamos una dirección rusa y su equivalente transliterado, es concebible que dos direcciones que se refieran al mismo lugar pueden no coincidir ni un solo personaje.
Como ejemplo motivador, considere las siguientes dos formas equivalentes de escribir una dirección de calle Manhattan en particular con diferentes convenciones y grados de verbosidad:
Obviamente '30 W 26th St FL #7! = '30 West Twenty-Sixth Street Número 7 'en un sentido de comparación de cuerdas, pero un humano puede acumular que estas dos direcciones se refieren a la misma ubicación física.
Libpostal tiene como objetivo crear cadenas geográficas normalizadas, analizadas en componentes, de modo que podemos razonar de manera más efectiva sobre qué tan bien realmente coinciden dos direcciones y toman decisiones automatizadas del lado del servidor sobre los engaños.
Si lo anterior se parece mucho a la geocodificación, se debe a que es en cierto modo, solo en el caso de Openvenues, tenemos que geocodificar sin una interfaz de usuario o un usuario para seleccionar la dirección correcta en un menú desplegable de autocompletar. Dada una base de datos de direcciones fuente, como OpenAddresses u OpenStreetMap (o todo lo anterior), Libpostal se puede usar para implementar cosas como la deduza de las direcciones y la geocodificación por lotes del lado del servidor en configuraciones como MapReduce o Procesamiento de flujo.
Ahora, en lugar de tratar de hornear convenciones específicas de la dirección en motores de búsqueda de documentos tradicionales como Elasticsearch utilizando archivos de sinónimos gigantes, secuencias de comandos, analizadores personalizados, tokenizadores y similares, la geocoding puede verse así:
De esta manera, Libpostal puede realizar una coincidencia de dirección difusa en un tiempo constante en relación con el tamaño del conjunto de datos.
Libpostal está escrito en C por tres razones (en orden de importancia):
Portabilidad/ubicuidad : Libpostal se dirige a los idiomas de nivel superior que las personas realmente usan día a día: Python, Go, Ruby, NodeJs, etc. La belleza de C es que casi cualquier lenguaje de programación puede unirse a él y a los compiladores C en todas partes, así que elija su favorito, escriba una vinculación y puede usar libpostal directamente en su aplicación sin tener que hacer un servidor separado. Admitimos Mac/Linux (Windows no es una prioridad pero feliz de aceptar parches), tenemos una compilación estándar de AutoTools y un formato de archivo endianness-agnóstico para los archivos de datos. Los enlaces de Python se mantienen como parte de este repositorio, ya que son necesarios para construir los datos de capacitación.
Eficiencia de memoria : Libpostal está diseñado para ejecutarse en una configuración de MapReduce donde podemos limitar a <1GB de RAM por proceso dependiendo de la configuración de la máquina. En la medida de lo posible, Libpostal usa matrices contiguas, intentos (construidos en matrices contiguas), filtros de floración y matrices dispersas comprimidas para mantener bajo el uso de la memoria. Es posible usar libpostal en un dispositivo móvil con modelos capacitados en un solo país o un puñado de países.
Rendimiento : Esto es el último en la lista por una razón. La mayoría de las optimizaciones en libpostal son para el uso de la memoria en lugar del rendimiento. Libpostal es bastante rápido dada la cantidad de trabajo que realiza. Puede procesar direcciones de 10-30k / segundo en un solo hilo / proceso en las plataformas que hemos probado (eso significa procesar cada dirección en el planeta OSM en poco más de una hora). Consulte el programa de referencia simple para probar en su entorno y varios tipos de entrada. En la configuración de MapReduce, el rendimiento por núcleo no es tan importante porque todo se hace en paralelo, pero hay algunas aplicaciones de ingestión de transmisión en Mapzen donde esto debe ejecutar en proceso en proceso.
Libpostal está escrito en modernos, legibles, C99 y utiliza las siguientes convenciones:
El paquete Geodata Python en el repositorio libpostal contiene la tubería para preprocesar los diversos conjuntos de datos GEO y crear datos de capacitación para los modelos C para usar. Este paquete no debería ser necesario para la mayoría de los usuarios, pero para aquellos interesados en generar nuevos tipos de direcciones o mejorar los datos de capacitación de Libpostal, aquí es donde buscar.
En los datos de prueba detenidos (que significa analizados etiquetados que el modelo no ha visto antes), el analizador de dirección alcanza el 99.45% de precisión de análisis total.
Para algunas tareas como el reconocimiento de entidad nombrado, es preferible usar algo como una puntuación F1 o variantes, principalmente porque hay un problema de sesgo de clase (la mayoría de las palabras no son entidades, y un sistema que simplemente predijo que la no entidad para cada token realmente funcionaría bastante bien en términos de precisión). Ese no es el caso para el análisis de la dirección. Cada token tiene una etiqueta y hay millones de ejemplos de cada clase en los datos de entrenamiento, por lo que es preferible la precisión, ya que es una medida de rendimiento limpia, simple e intuitiva.
Aquí usamos la precisión completa de los análisis, lo que significa que solo le damos al analizador un "punto" en el numerador si obtiene cada token en la dirección correcta. Esa debería ser una medida mejor que simplemente mirar si cada token era correcto.
Aunque el analizador actual funciona bastante bien para la mayoría de las direcciones estándar, todavía hay margen de mejora, particularmente para asegurarse de que los datos de capacitación que usamos estén lo más cerca posible de las direcciones en la naturaleza. Hay dos formas principales en que el analizador de la dirección puede mejorarse aún más (en orden de dificultad):
Los informes de errores, los problemas y las solicitudes de extracción son bienvenidos. Lea la guía de contribución antes de enviar su problema, informe de errores o solicitud de extracción.
Envíe problemas en: https://github.com/openvenues/libpostal/issues.
Un agradecimiento especial a @benk10 por la compilación inicial de Windows y @aeroxuk por integrarlo sin problemas en el proyecto y configurar una compilación de Appveyor.
El software está disponible como código abierto bajo los términos de la licencia MIT.