
Geoparsing de texto completo como uma biblioteca Python. Extraia os nomes de lugares de uma peça de texto em inglês, resolva-os para o local correto e devolva suas coordenadas e informações geográficas estruturadas.
Mordecai está pronto para uma atualização! Por favor, faça a pesquisa do usuário aqui para ajudar a moldar como será a V3.
>>> from mordecai import Geoparser
>>> geo = Geoparser()
>>> geo.geoparse("I traveled from Oxford to Ottawa.")
[{'country_conf': 0.96474487,
'country_predicted': 'GBR',
'geo': {'admin1': 'England',
'country_code3': 'GBR',
'feature_class': 'P',
'feature_code': 'PPLA2',
'geonameid': '2640729',
'lat': '51.75222',
'lon': '-1.25596',
'place_name': 'Oxford'},
'spans': [{'end': 22, 'start': 16}],
'word': 'Oxford'},
{'country_conf': 0.83302397,
'country_predicted': 'CAN',
'geo': {'admin1': 'Ontario',
'country_code3': 'CAN',
'feature_class': 'P',
'feature_code': 'PPLC',
'geonameid': '6094817',
'lat': '45.41117',
'lon': '-75.69812',
'place_name': 'Ottawa'},
'spans': [{'end': 32, 'start': 26}],
'word': 'Ottawa'}]
Mordecai exige um serviço de pesquisa de elasticidade em execução com geonoms. Consulte "Instalação" abaixo para obter instruções.
pip install mordecai
Nota : É altamente recomendável que você execute Mordecai em um ambiente virtual. As bibliotecas das quais Mordecai depende nem sempre são as versões mais recentes e o uso de um ambiente virtual impede que as bibliotecas sejam rebaixadas ou que se deparam com outros problemas:
python -m venv mordecai-env
source mordecai-env/bin/activate
pip install mordecai
python -m spacy download en_core_web_lg
docker pull elasticsearch:5.5.2
wget https://andrewhalterman.com/files/geonames_index.tar.gz --output-file=wget_log.txt
tar -xzf geonames_index.tar.gz
docker run -d -p 127.0.0.1:9200:9200 -v $(pwd)/geonames_index/:/usr/share/elasticsearch/data elasticsearch:5.5.2
Consulte os nomes ES-GEONAMES para o código usado para produzir esse índice.
Para atualizar o índice, basta desligar o contêiner antigo, baixar novamente o índice do S3 e reiniciar o contêiner com o novo índice.
Se você usar este software no trabalho acadêmico, cite como
@article{halterman2017mordecai,
title={Mordecai: Full Text Geoparsing and Event Geocoding},
author={Halterman, Andrew},
journal={The Journal of Open Source Software},
volume={2},
number={9},
year={2017},
doi={10.21105/joss.00091}
}
Mordecai pega texto não estruturado e retorna informações geográficas estruturadas extraídas dele.
Ele usa o reconhecimento de entidade nomeado de Spacy para extrair nomes de placens do texto.
Ele usa o Geonames Gazetteer em um índice ElasticSearch (com alguma lógica personalizada) para encontrar as coordenadas potenciais de nomes de lugares extraídos.
Ele usa redes neurais implementadas em Keras e treinadas em novos dados anotados em inglês, rotulados com prodigy para inferir o país correto e as entradas corretas do Gazetteer para cada nome de placen.
Os dados de treinamento para os dois modelos incluem texto protegido por direitos autorais, portanto não podem ser compartilhados livremente. A aplicação de Mordecai ao texto em linguagem não inglesa exigiria dados de rotulagem no idioma e reciclagem de destino.
Ao instantar o módulo Geoparser() , as seguintes opções podem ser alteradas:
es_hosts : Lista de hosts em que o serviço de pesquisa de elasticidade geonal está em execução. O padrão é ['localhost'] , que é onde ele é executado se você estiver usando a configuração padrão do Docker descrita acima.es_port : Em que porta o serviço Elasticsearch está em execução. Padrões para 9200 , que é onde a configuração do Dockeres_ssl : Se o Elasticsearch requer uma conexão SSL. Padrões para False .es_auth : Parâmetros de autenticação HTTP opcionais para usar com ES. Se fornecido, deve ser uma dupla de (user, password) .country_confidence : defina a confiança do modelo do país abaixo da qual nenhuma geolocalização será devolvida. Se estiver muito baixo, o modelo provavelmente está errado e retornará resultados estranhos. Padrões para 0.6 .verbose : retornar todos os recursos usados no modelo de escolha do país? Padrões para False .threads : se deve usar threads para fazer consultas paralelas no banco de dados Elasticsearch. Padrões para True , o que fornece uma aceleração ~ 6x. geoparse é o terminal principal e o único que a maioria dos usuários precisará. Outros métodos principalmente internos podem ser úteis em alguns casos:
lookup_city pega um nome de cidade, país e (opcionalmente) ADM1/Estado/Governoria e faz uma pesquisa baseada em regras para a cidade.infer_country pegue um documento e tenta inferir o país mais provável para cada um.query_geonames e query_geonames_country podem ser usados para realizar uma pesquisa sobre geonoms no Elasticsearch_feature são métodos internos para calcular os recursos de escolha do país a partir do texto. batch_geoparse pega uma lista de documentos e usa o método nlp.pipe da Spacy para processá -los com mais eficiência na etapa de NLP.
Usuários avançados em máquinas grandes podem aumentar o parâmetro lru_cache de 250 para 1000. Isso usará mais memória, mas aumentará a velocidade de análise.
Mordecai inclui testes de unidade. Para executar os testes, cd no diretório mordecai e execute:
pytest
Os testes requerem acesso a um serviço de elástico/geonoms em execução para concluir. Os testes estão atualmente falhando no Travisci com um segfault inexplicável, mas correm bem localmente. Mordecai foi testado apenas com Python 3.
Uma verion anterior deste software foi doada para a Aliança de Dados de Eventos Abertos pela Caerus Associates. Consulte os lançamentos ou a filial do Docker Legacy para as versões de produção de 2015-2016 e 2016-2017 de Mordecai.
Este trabalho foi financiado em parte pelo programa XDATA da DARPA, pelo Laboratório de Pesquisa do Exército dos EUA e pelo Escritório de Pesquisa do Exército dos EUA por meio da Iniciativa Minerva sob o número de concessão W911NF-13-0332, e a National Science Foundation sob o prêmio SBE-SMA-1539302. Quaisquer opiniões, descobertas e conclusões ou recomendações expressas neste material são as dos autores e não refletem necessariamente as opiniões de DARPA, ARO, Minerva, NSF ou governo dos EUA.
As contribuições por meio de solicitações de tração são bem -vindas. Verifique se as alterações passam nos testes de unidade. Quaisquer bugs e problemas podem ser relatados na página de problemas do repo.