Spaces:
Running
Running
File size: 2,999 Bytes
9ea563b de299f7 2542be6 94a3c4b 2542be6 9ea563b 2542be6 ee270e3 2542be6 9ea563b 2542be6 9ea563b ee270e3 2542be6 9ea563b 2542be6 9ea563b 2542be6 9ea563b 2542be6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# import locationtagger
from geopy.geocoders import Nominatim
from geopy.exc import GeocoderTimedOut, GeocoderUnavailable
from models.location_models import LocationData, Coordinates, ErrorResponse
import requests
class LocationService:
@staticmethod
def extract_location_entities(ner_results):
city, state, country = None, None, None
for entity in ner_results:
word = entity['word'].replace("##", "").strip()
if entity['entity_group'] == 'CITY' and word.isalpha():
city = word
elif entity['entity_group'] == 'STATE' and word.isalpha():
state = word
elif entity['entity_group'] == 'COUNTRY' and word.isalpha():
country = word
if city or state or country:
return {k: v for k, v in {"city": city, "state": state, "country": country}.items() if v is not None}
else:
return None
@staticmethod
def get_coordinates(data:dict,model) -> Coordinates | ErrorResponse:
print("Inside get coordinates")
print(data)
try:
location = data.get('location')
except:
return Coordinates(latitude=None, longitude=None)
city = None
state = None
country = None
if location:
# Assuming `app.nlp` is already initialized elsewhere and accessible
ner_results = model(location)
# Extract city, state, and country using the logic from extract_location_entities
location_entities = LocationService.extract_location_entities(ner_results)
if location_entities:
city = location_entities.get('city')
state = location_entities.get('state')
country = location_entities.get('country')
# Create the location string
location_string = ' '.join(filter(None, [city, state, country]))
if not location_string:
location_string = location
else:
return ErrorResponse(error="No location information provided")
geolocator = Nominatim(user_agent="Geolocation")
print("Printing location string")
print(location_string)
if city or state or country :
location_string = city
elif country is None:
location_string = city
elif city is None:
location_string = state
elif state is None:
location_string = city
try:
getLoc = geolocator.geocode(location_string)
print(getLoc.latitude)
print(getLoc.longitude)
return Coordinates(
latitude=getLoc.latitude,
longitude=getLoc.longitude
)
except Exception as e:
print(f"Error {e}")
return Coordinates(latitude=None , longitude=None) |