helper/src/myontology.py

50 lines
1.7 KiB
Python
Raw Normal View History

2022-01-25 16:08:20 +04:00
from typing import List, Optional
from owlready2 import get_ontology, Ontology
class MyOntology:
def __init__(self) -> None:
self.__onto: Ontology = get_ontology("file://./ontology.owl").load()
2022-01-25 16:08:20 +04:00
def __find_str_in_list(self, string: str, string_list: List[str]) -> int:
2022-01-25 16:08:20 +04:00
try:
string_list.index(string)
return 1
except ValueError:
return 0
def __get_property_value(self, values: [], instance):
2022-01-25 16:08:20 +04:00
if len(values) != 1:
raise ValueError(f'Wrong values in {instance.name}')
return values[0]
def __get_event_instance(self, instances: []):
2022-01-25 16:08:20 +04:00
max_instance: Optional = None
max_priority: int = 0
for instance in instances:
event = self.__get_property_value(instance.hasEvent, instance)
priority = self.__get_property_value(event.hasPriority, event)
2022-01-25 16:08:20 +04:00
if priority > max_priority:
max_instance = event
max_priority = priority
return max_instance
def __find_instances_by_terms(self, nouns: List[str]) -> []:
2022-01-25 16:08:20 +04:00
instances = []
for instance in self.__onto.Concept.instances():
2022-01-25 16:08:20 +04:00
terms = instance.hasTerm
match: int = 0
for term in terms:
match = match + self.__find_str_in_list(term.name, nouns)
2022-01-25 16:08:20 +04:00
if match >= len(terms) * 0.5:
instances.append(instance)
return instances
def get_event_description(self, nouns: List[str]) -> str:
instances: [] = self.__find_instances_by_terms(nouns)
event = self.__get_event_instance(instances)
2022-01-25 16:08:20 +04:00
if event is None:
return ''
return self.__get_property_value(event.hasDescription, event)