Esempio n. 1
0
 def get_links(self, text: str, kg='wikidata', mode='long') -> List[Pair]:
     db = kg.lower().strip() if kg.lower().strip() in [
         'wikidata', 'dbpedia'
     ] else 'wikidata'
     mode = mode.lower().strip() if mode.lower().strip() in [
         'long', 'short'
     ] else 'long'
     params = {"mode": mode}
     if db == 'dbpedia':
         params['db'] = 1
     try:
         result = self.client.POST(json={
             "text": text
         }, params=params).json()
         ent_key = f'entities_{kg}'
         rel_key = f'relations_{kg}'
         entities = [
             Pair(entity[0], entity[1], 'entity')
             for entity in result[ent_key]
         ] if ent_key in result else []
         relations = [
             Pair(relation[0], relation[1], 'relation')
             for relation in result[rel_key]
         ] if rel_key in result else []
         return entities + relations
     except JSONDecodeError as ex:
         print(ex)
         return []
Esempio n. 2
0
 def get_links(self, text: str) -> List[Pair]:
     self.check_execution_safety()
     from_ner = self.linker.get_links(text=text)
     ents, preds = self.strip_to_ner(from_ner)
     linked_entities = [
         Pair(ent[0], ent[1], 'entity')
         for ent in self.search_in_es(self.entity_es_index_name, ents)
     ]
     linked_relations = [
         Pair(rel[0], rel[1], 'relation')
         for rel in self.search_in_es(self.relation_es_index_name, preds)
     ]
     return linked_entities + linked_relations
 def get_links(self, text: str) -> List[Pair]:
     topics_response = meaningcloud.TopicsResponse(
         meaningcloud.TopicsRequest(MEANING_CLOUD_KEYS[randint(
             0,
             len(MEANING_CLOUD_KEYS) - 1)],
                                    txt=text,
                                    lang='en',
                                    topicType='e').sendReq())
     if topics_response.isSuccessful():
         entities = topics_response.getEntities()
         links = []
         for entity in entities:
             if 'semld_list' not in entity:
                 continue
             found = list(
                 filter(lambda x: x[:23] == 'http://en.wikipedia.org',
                        entity['semld_list']))
             if len(found) > 0:
                 links.append(
                     Pair(
                         f"http://dbpedia.org/resource/{found[0][found[0].rfind('/') + 1:]}",
                         entity['form'], 'entity'))
         return links
     else:
         if topics_response.getResponse() is None:
             print("\nOh no! The request sent did not return a Json\n")
         else:
             print("\nOh no! There was the following error: " +
                   topics_response.getStatusMsg() + "\n")
         return []
Esempio n. 4
0
 def get_links(self, text: str) -> List[Pair]:
     payload = self.prepare_json_request({'query': text})
     result = self.client.POST(data=payload).json()
     return [
         Pair(f"http://www.wikidata.org/entity/{entity['best_qid']}", text[entity['start']:entity['end']], 'entity')
         for entity in result['annotations'] if entity['best_qid'] is not None] \
         if 'annotations' in result else []
Esempio n. 5
0
    def get_links(self, text: str) -> List[Pair]:
        annotations = tagme.annotate(text)

        return [
            Pair(
                f'http://dbpedia.org/resource/{ann.entity_title.replace(" ", "_")}',
                ann.mention, 'entity')
            for ann in annotations.get_annotations(0.1)
        ]
Esempio n. 6
0
 def get_links(self, text: str) -> List[Pair]:
     result = self.client.link.POST(json={"text": text}).json()
     links = []
     for entry in result:
         if entry['type'] in self.allowed_relation_types:
             link_type = 'relation'
         else:
             link_type = 'entity'
         links.append(Pair(entry['uri'], entry['text'], link_type))
     return links
Esempio n. 7
0
 def get_links(self, text: str) -> List[Pair]:
     result = self.client.link.POST(json={"text": text}).json()
     links = []
     for entry in result:
         if entry['uri'] is None or len(entry['uri']) == 0:
             continue
         if re.search(r"R\d+", entry['uri']) is not None:
             link_type = 'entity'
             uri = f"https://www.orkg.org/orkg/resource/{entry['uri']}"
         else:
             link_type = 'relation'
             uri = f"https://www.orkg.org/orkg/predicate/{entry['uri']}"
         links.append(Pair(uri, entry['text'], link_type))
     return links
 def get_links(self, text: str, kg='wikidata') -> List[Pair]:
     graph = kg.lower().strip() if kg.lower().strip() in [
         'wikidata', 'dbpedia'
     ] else 'wikidata'
     client = TextRazor(self.get_api_key(), extractors=['entities'])
     links = []
     response = client.analyze(text)
     for entity in response.entities():
         link = None
         if graph == 'wikidata':
             link = f'http://www.wikidata.org/entity/{entity.wikidata_id}'
         else:
             link = f'http://dbpedia.org/resource/{entity.wikipedia_link[entity.wikipedia_link.rfind("/")+1:]}'
         span = entity.matched_text
         links.append(Pair(link, span, 'entity'))
     return links
Esempio n. 9
0
    def get_links(self, text: str) -> List[Pair]:
        payload = self.prepare_json_request({
            "docId": "doc1",
            "text": text,
            "extractConcepts": True,
            "language": "en"
        })
        # payload = "{\"docId\": \"doc1\", \"text\": \""+text+"\", \"extractConcepts\": \"true\", \"language\": \"en\" }"
        headers = {
            'accept': 'application/json',
            'content-type': 'application/json'
        }

        response = requests.request("POST",
                                    AMBIVERSE_URL,
                                    headers=headers,
                                    data=payload.encode('utf-8'))
        try:
            return [
                Pair(ent['entity']['id'], ent['text'], 'entity')
                for ent in response.json()["matches"] if 'id' in ent['entity']
            ]
        except Exception as e:
            return []
Esempio n. 10
0
 def get_links(self, text: str) -> List[Pair]:
     result = self.client.GET(params={'text': text}, verify=False, headers={"accept": "application/json"}).json()
     if 'Resources' in result:
         return [Pair(entity['@URI'], entity['@surfaceForm'], 'entity') for entity in result['Resources']]
     else:
         return []