diff --git a/gazpy/element.py b/gazpy/element.py index 769360cd63b77c69d7852edbcef0e63682857f5d..aeeada9e7baa302cb6fcbd79b94010054fad6792 100644 --- a/gazpy/element.py +++ b/gazpy/element.py @@ -99,6 +99,14 @@ class Element(): else: return objectify({lang: self.data[lang] for lang in self.p_holder.label_fields}) + @property + def name(self): + if not isinstance(self.p_holder.label_fields, tuple) and not isinstance(self.p_holder.label_fields, list): + return self.data[self.p_holder.label_fields] + else: + return objectify({lang: self.data[lang] for lang in self.p_holder.label_fields}).en + + @property def alias(self): if not isinstance(self.p_holder.alias_fields, tuple) and not isinstance(self.p_holder.label_fields, list): @@ -121,3 +129,7 @@ class Element(): @property def other(self): return self.data + + def __contains__(self, item): + return item in self.data + diff --git a/gazpy/gazetteer/base.py b/gazpy/gazetteer/base.py index 23d41683b2f958598b250d6a2c1371b8c49c579b..bd365b966276a0b2472ee101717af1b38e24e651 100644 --- a/gazpy/gazetteer/base.py +++ b/gazpy/gazetteer/base.py @@ -12,6 +12,21 @@ geo_term={ "fr":open(__geo_res_path.rstrip("/")+"/geo_term_fr").read().lower().strip().split("\n"), "en":open(__geo_res_path.rstrip("/")+"/geo_term_en").read().strip().split("\n") } + +def return_on_failure(value): + def decorate(f): + def applicator(*args, **kwargs): + try: + f(*args,**kwargs) + except: + return value + print('Error') + + return applicator + + return decorate + + def parse_label2(label : str,lang): if not lang in geo_term: return parse_label(label) @@ -139,5 +154,5 @@ class Base(): df[self.score_field] = df[self.score_field].apply(lambda x: float(x)) else: df[self.score_field] = df.apply(lambda x: 0) - df[self.score_field].fillna(-1, inplace=True) + df[self.score_field].fillna(0, inplace=True) return df \ No newline at end of file diff --git a/gazpy/gazetteer/geodict.py b/gazpy/gazetteer/geodict.py index dc8154b097cdae7382d7a5fc0f776b0a0fd84238..77dbad82db6ccbd143894963646efe0de2cf9ffe 100644 --- a/gazpy/gazetteer/geodict.py +++ b/gazpy/gazetteer/geodict.py @@ -1,39 +1,52 @@ # coding = utf-8 -from .base import Base,parse_label,parse_label2 +from .base import Base, parse_label2, return_on_failure + class Geodict(Base): """""" - def __init__(self,es_client): + def __init__(self, es_client): """Constructor for Geodict""" - Base.__init__(self,es_client) + Base.__init__(self, es_client) def get_by_label(self, label, lang, score=True, size=1): - query=self.qb.query(term=True,field=lang,value=label,sorted=score,sorted_by=self.score_field,sized=True,size=size) - return self.to_element(self.es_client.search("gazetteer","place",query)) + query = self.qb.query(term=True, field=lang, value=label, sorted=score, sorted_by=self.score_field, sized=True, + size=size) + return self.to_element(self.es_client.search("gazetteer", "place", query)) def get_by_alias(self, alias, lang, score=True, size=1): - query = self.qb.query(term=True,nested=True,nested_field=lang,field="aliases", value=alias, sorted=score, sorted_by=self.score_field, sized=True, + query = self.qb.query(term=True, nested=True, nested_field=lang, field="aliases", value=alias, sorted=score, + sorted_by=self.score_field, sized=True, size=size) return self.to_element(self.es_client.search("gazetteer", "place", query)) def get_n_label_similar(self, label, lang, n, score=True): - query = self.qb.query(query_string=True, regexp=True,regexp_value=parse_label2(label,lang), field=lang, value=label, sorted=score, + query = self.qb.query(query_string=True, regexp=True, regexp_value=parse_label2(label, lang), field=lang, + value=label, sorted=score, sorted_by=self.score_field, sized=True, size=n) - return self.to_element(self.es_client.search("gazetteer", "place", query)) + try: + return self.to_element(self.es_client.search("gazetteer", "place", query)) + except : + return [] def get_n_alias_similar(self, alias, lang, n, score=True): - query = self.qb.query(query_string=True, nested=True, nested_field=lang, regexp=True,regexp_value=parse_label2(alias,lang),field="aliases", value=alias, sorted=score, + query = self.qb.query(query_string=True, nested=True, nested_field=lang, regexp=True, + regexp_value=parse_label2(alias, lang), field="aliases", value=alias, sorted=score, sorted_by=self.score_field, sized=True, size=n) - return self.to_element(self.es_client.search("gazetteer", "place", query)) + try: + return self.to_element(self.es_client.search("gazetteer", "place", query)) + except : + return [] + - def get_in_radius(self, lon, lat, unit="km",distance=10, score=True, size=1): - query = self.qb.query(match_all=True,in_radius=True,radius_size=distance,radius_unit=unit,radius_centroid=(lon,lat), sorted=score, - sorted_by=self.score_field, sized=True,geo_field="coord", + def get_in_radius(self, lon, lat, unit="km", distance=10, score=True, size=1): + query = self.qb.query(match_all=True, in_radius=True, radius_size=distance, radius_unit=unit, + radius_centroid=(lon, lat), sorted=score, + sorted_by=self.score_field, sized=True, geo_field="coord", size=size) return self.to_element(self.es_client.search("gazetteer", "place", query)) @@ -42,13 +55,13 @@ class Geodict(Base): size=1) return self.to_element(self.es_client.search("gazetteer", "place", query)) - def get_by_other_id(self,id,identifier="wikidata"): - if not identifier in ['wikidata','geonames']: + def get_by_other_id(self, id, identifier="wikidata"): + if not identifier in ['wikidata', 'geonames']: raise Exception("Identfier type must be taken from the following items : 'wikidata' or 'geonames'") if identifier == 'wikidata': - id_field="wikidataID" + id_field = "wikidataID" else: - id_field="geonameID" + id_field = "geonameID" query = self.qb.query(term=True, field=id_field, value=id, sized=True, size=1) - return self.to_element(self.es_client.search("gazetteer", "place", query)) \ No newline at end of file + return self.to_element(self.es_client.search("gazetteer", "place", query)) diff --git a/gazpy/gazetteer/geonames.py b/gazpy/gazetteer/geonames.py index 936325160739fcb1e81b90df46494507bf25481b..1c64f50f230c7db68fe9f27830a5f2271ddc2cf1 100644 --- a/gazpy/gazetteer/geonames.py +++ b/gazpy/gazetteer/geonames.py @@ -1,5 +1,5 @@ # coding = utf-8 -from .base import Base,parse_label,parse_label2 +from .base import Base,parse_label2,return_on_failure class Geonames(Base):