fuzzy-dl-owl2 1.0.4__py3-none-any.whl → 1.0.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fuzzy_dl_owl2/fuzzydl/fuzzydl_to_owl2.py +31 -4
- fuzzy_dl_owl2/fuzzyowl2/fuzzyowl2_to_fuzzydl.py +3 -4
- fuzzy_dl_owl2/fuzzyowl2/parser/owl2_parser.py +15 -8
- {fuzzy_dl_owl2-1.0.4.dist-info → fuzzy_dl_owl2-1.0.5.dist-info}/METADATA +2 -2
- {fuzzy_dl_owl2-1.0.4.dist-info → fuzzy_dl_owl2-1.0.5.dist-info}/RECORD +7 -7
- {fuzzy_dl_owl2-1.0.4.dist-info → fuzzy_dl_owl2-1.0.5.dist-info}/LICENSE +0 -0
- {fuzzy_dl_owl2-1.0.4.dist-info → fuzzy_dl_owl2-1.0.5.dist-info}/WHEEL +0 -0
|
@@ -5,6 +5,8 @@ import sys
|
|
|
5
5
|
import typing
|
|
6
6
|
from functools import partial
|
|
7
7
|
|
|
8
|
+
from rdflib import RDF, XSD, Literal, Namespace, URIRef
|
|
9
|
+
|
|
8
10
|
from fuzzy_dl_owl2.fuzzydl.assertion.assertion import Assertion
|
|
9
11
|
from fuzzy_dl_owl2.fuzzydl.concept.all_some_concept import AllSomeConcept
|
|
10
12
|
from fuzzy_dl_owl2.fuzzydl.concept.choquet_integral import ChoquetIntegral
|
|
@@ -125,7 +127,6 @@ from pyowl2.expressions.object_property import OWLObjectProperty
|
|
|
125
127
|
from pyowl2.individual.named_individual import OWLNamedIndividual
|
|
126
128
|
from pyowl2.literal.literal import OWLLiteral
|
|
127
129
|
from pyowl2.ontology import OWLOntology
|
|
128
|
-
from rdflib import RDF, XSD, Literal, Namespace, URIRef
|
|
129
130
|
|
|
130
131
|
|
|
131
132
|
# @utils.timer_decorator
|
|
@@ -346,12 +347,14 @@ class FuzzydlToOwl2:
|
|
|
346
347
|
return self.__get_class_weighted_min_max_sum(c)
|
|
347
348
|
elif c_type in (
|
|
348
349
|
ConceptType.OWA,
|
|
349
|
-
ConceptType.QUANTIFIED_OWA,
|
|
350
|
+
# ConceptType.QUANTIFIED_OWA,
|
|
350
351
|
ConceptType.CHOQUET_INTEGRAL,
|
|
351
352
|
ConceptType.SUGENO_INTEGRAL,
|
|
352
353
|
ConceptType.QUASI_SUGENO_INTEGRAL,
|
|
353
354
|
):
|
|
354
355
|
return self.__get_class_weighted(c)
|
|
356
|
+
elif c_type == ConceptType.QUANTIFIED_OWA:
|
|
357
|
+
return self.__get_class_q_owa(c)
|
|
355
358
|
cls = OWLClass(self.iri(str(c)))
|
|
356
359
|
self.ontology.add_axiom(OWLDeclaration(cls))
|
|
357
360
|
return cls
|
|
@@ -392,14 +395,14 @@ class FuzzydlToOwl2:
|
|
|
392
395
|
"""Get the class for OWA, Quantified OWA, Choquet Integral, Sugeno Integral, or Quasi Sugeno Integral"""
|
|
393
396
|
type_dict: dict[ConceptType, str] = {
|
|
394
397
|
ConceptType.OWA: FuzzyOWL2Keyword.OWA.get_str_value(),
|
|
395
|
-
ConceptType.QUANTIFIED_OWA: FuzzyOWL2Keyword.Q_OWA.get_str_value(),
|
|
398
|
+
# ConceptType.QUANTIFIED_OWA: FuzzyOWL2Keyword.Q_OWA.get_str_value(),
|
|
396
399
|
ConceptType.CHOQUET_INTEGRAL: FuzzyOWL2Keyword.CHOQUET.get_str_value(),
|
|
397
400
|
ConceptType.SUGENO_INTEGRAL: FuzzyOWL2Keyword.SUGENO.get_str_value(),
|
|
398
401
|
ConceptType.QUASI_SUGENO_INTEGRAL: FuzzyOWL2Keyword.QUASI_SUGENO.get_str_value(),
|
|
399
402
|
}
|
|
400
403
|
type_cast: dict[ConceptType, typing.Callable] = {
|
|
401
404
|
ConceptType.OWA: partial(typing.cast, OwaConcept),
|
|
402
|
-
ConceptType.QUANTIFIED_OWA: partial(typing.cast, QowaConcept),
|
|
405
|
+
# ConceptType.QUANTIFIED_OWA: partial(typing.cast, QowaConcept),
|
|
403
406
|
ConceptType.CHOQUET_INTEGRAL: partial(typing.cast, ChoquetIntegral),
|
|
404
407
|
ConceptType.SUGENO_INTEGRAL: partial(typing.cast, SugenoIntegral),
|
|
405
408
|
ConceptType.QUASI_SUGENO_INTEGRAL: partial(typing.cast, QsugenoIntegral),
|
|
@@ -423,6 +426,30 @@ class FuzzydlToOwl2:
|
|
|
423
426
|
self.add_entity_annotation(annotation, c4)
|
|
424
427
|
return c4
|
|
425
428
|
|
|
429
|
+
def __get_class_q_owa(self, c: Concept) -> OWLClassExpression:
|
|
430
|
+
"""Get the class for OWA, Quantified OWA, Choquet Integral, Sugeno Integral, or Quasi Sugeno Integral"""
|
|
431
|
+
type_dict: dict[ConceptType, str] = {
|
|
432
|
+
ConceptType.QUANTIFIED_OWA: FuzzyOWL2Keyword.Q_OWA.get_str_value(),
|
|
433
|
+
}
|
|
434
|
+
type_cast: dict[ConceptType, typing.Callable] = {
|
|
435
|
+
ConceptType.QUANTIFIED_OWA: partial(typing.cast, QowaConcept),
|
|
436
|
+
}
|
|
437
|
+
if c.type not in type_dict:
|
|
438
|
+
return None
|
|
439
|
+
curr_concept: QowaConcept = type_cast[c.type](c)
|
|
440
|
+
c4: OWLClassExpression = self.get_new_atomic_class(str(c))
|
|
441
|
+
annotation: str = (
|
|
442
|
+
f'<{FuzzyOWL2Keyword.FUZZY_OWL_2.get_str_value()} {FuzzyOWL2Keyword.FUZZY_TYPE.get_str_value()}="{FuzzyOWL2Keyword.CONCEPT.get_str_value()}">\n',
|
|
443
|
+
f'\t<{FuzzyOWL2Keyword.CONCEPT.get_tag_name()} {FuzzyOWL2Keyword.TYPE.get_str_value()}="{type_dict[c.type]}" {FuzzyOWL2Keyword.QUANTIFIER.get_tag_name()}="{curr_concept.quantifier}">\n',
|
|
444
|
+
f"\t\t<{FuzzyOWL2Keyword.CONCEPT_NAMES.get_tag_name()}>\n",
|
|
445
|
+
)
|
|
446
|
+
for ci in curr_concept.concepts:
|
|
447
|
+
c5: OWLClassExpression = self.get_base(ci)
|
|
448
|
+
annotation += f"\t\t\t<{FuzzyOWL2Keyword.NAME.get_tag_name()}>{c5}</{FuzzyOWL2Keyword.NAME.get_tag_name()}>\n"
|
|
449
|
+
annotation += f"\t\t</{FuzzyOWL2Keyword.CONCEPT_NAMES.get_tag_name()}>\n\t</{FuzzyOWL2Keyword.CONCEPT.get_tag_name()}>\n</{FuzzyOWL2Keyword.FUZZY_OWL_2.get_str_value()}>"
|
|
450
|
+
self.add_entity_annotation(annotation, c4)
|
|
451
|
+
return c4
|
|
452
|
+
|
|
426
453
|
def get_new_atomic_class(self, name: str) -> OWLClassExpression:
|
|
427
454
|
"""Get or create a new atomic class"""
|
|
428
455
|
Util.debug(f"Getting new atomic concept -> {name}")
|
|
@@ -48,7 +48,6 @@ from pyowl2.expressions.data_property import OWLDataProperty
|
|
|
48
48
|
from pyowl2.expressions.object_property import OWLObjectProperty
|
|
49
49
|
from pyowl2.individual.anonymous_individual import OWLAnonymousIndividual
|
|
50
50
|
from pyowl2.literal.literal import OWLLiteral
|
|
51
|
-
from pyowl2.utils import utils
|
|
52
51
|
|
|
53
52
|
|
|
54
53
|
# @utils.timer_decorator
|
|
@@ -608,7 +607,7 @@ class FuzzyOwl2ToFuzzyDL(FuzzyOwl2):
|
|
|
608
607
|
d: float,
|
|
609
608
|
) -> None:
|
|
610
609
|
self.__write(
|
|
611
|
-
f"(implies-role {self.
|
|
610
|
+
f"(implies-role {self.get_data_property_name(subproperty)} {self.get_data_property_name(superproperty)} {d})"
|
|
612
611
|
)
|
|
613
612
|
|
|
614
613
|
def write_sub_property_chain_of_axiom(
|
|
@@ -635,9 +634,9 @@ class FuzzyOwl2ToFuzzyDL(FuzzyOwl2):
|
|
|
635
634
|
self, class_set: set[OWLDataPropertyExpression]
|
|
636
635
|
) -> None:
|
|
637
636
|
first: OWLDataPropertyExpression = next(class_set)
|
|
638
|
-
first_name: str = self.
|
|
637
|
+
first_name: str = self.get_data_property_name(first)
|
|
639
638
|
for property in class_set - set([first]):
|
|
640
|
-
property_name: str = self.
|
|
639
|
+
property_name: str = self.get_data_property_name(property)
|
|
641
640
|
self.__write(f"(implies-role {first_name} {property_name})")
|
|
642
641
|
self.__write(f"(implies-role {property_name} {first_name})")
|
|
643
642
|
|
|
@@ -103,11 +103,9 @@ def _parse_fuzzy_nominal(tokens: pp.ParseResults) -> ConceptDefinition:
|
|
|
103
103
|
def _parse_weighted_complex_concept(tokens: pp.ParseResults) -> ConceptDefinition:
|
|
104
104
|
Util.debug(f"_parse_weighted_complex_concept -> {tokens}")
|
|
105
105
|
list_tokens: list = tokens.as_list()
|
|
106
|
-
assert isinstance(list_tokens[1]
|
|
107
|
-
isinstance(a, WeightedConcept) for a in list_tokens[1]
|
|
108
|
-
)
|
|
106
|
+
assert all(isinstance(a, WeightedConcept) for a in list_tokens[1:])
|
|
109
107
|
wc: list[WeightedConcept] = [
|
|
110
|
-
typing.cast(WeightedConcept, w) for w in list_tokens[1]
|
|
108
|
+
typing.cast(WeightedConcept, w) for w in list_tokens[1:]
|
|
111
109
|
]
|
|
112
110
|
if list_tokens[0] == FuzzyOWL2Keyword.WEIGHTED_MAXIMUM:
|
|
113
111
|
return WeightedMaxConcept(wc)
|
|
@@ -221,7 +219,10 @@ class FuzzyOwl2Parser(object):
|
|
|
221
219
|
concept = pp.Forward()
|
|
222
220
|
|
|
223
221
|
modified_role_concept = (
|
|
224
|
-
FuzzyOWL2Keyword.
|
|
222
|
+
FuzzyOWL2Keyword.CONCEPT.get_value().suppress()
|
|
223
|
+
+ FuzzyOWL2Keyword.TYPE.get_value().suppress()
|
|
224
|
+
+ FuzzyOWL2Keyword.EQUAL.get_value().suppress()
|
|
225
|
+
+ FuzzyOWL2Keyword.MODIFIED.get_value().suppress()
|
|
225
226
|
+ FuzzyOWL2Keyword.MODIFIER.get_value().suppress()
|
|
226
227
|
+ FuzzyOWL2Keyword.EQUAL.get_value().suppress()
|
|
227
228
|
+ variables
|
|
@@ -231,13 +232,18 @@ class FuzzyOwl2Parser(object):
|
|
|
231
232
|
).add_parse_action(_parse_modified_concept)
|
|
232
233
|
|
|
233
234
|
weighted_concept = (
|
|
234
|
-
|
|
235
|
+
open_tag
|
|
236
|
+
+ FuzzyOWL2Keyword.CONCEPT.get_value().suppress()
|
|
237
|
+
+ FuzzyOWL2Keyword.TYPE.get_value().suppress()
|
|
238
|
+
+ FuzzyOWL2Keyword.EQUAL.get_value().suppress()
|
|
239
|
+
+ FuzzyOWL2Keyword.WEIGHTED.get_value().suppress()
|
|
235
240
|
+ FuzzyOWL2Keyword.DEGREE_VALUE.get_value().suppress()
|
|
236
241
|
+ FuzzyOWL2Keyword.EQUAL.get_value().suppress()
|
|
237
242
|
+ numbers
|
|
238
243
|
+ FuzzyOWL2Keyword.BASE.get_value().suppress()
|
|
239
244
|
+ FuzzyOWL2Keyword.EQUAL.get_value().suppress()
|
|
240
245
|
+ variables
|
|
246
|
+
+ single_close_tag
|
|
241
247
|
).add_parse_action(_parse_weighted_concept)
|
|
242
248
|
|
|
243
249
|
weights = (
|
|
@@ -280,7 +286,6 @@ class FuzzyOwl2Parser(object):
|
|
|
280
286
|
+ close_tag
|
|
281
287
|
)
|
|
282
288
|
|
|
283
|
-
weighted_list_concept = close_tag + weights + concepts
|
|
284
289
|
q_owa_concept = (
|
|
285
290
|
FuzzyOWL2Keyword.QUANTIFIER.get_value().suppress()
|
|
286
291
|
+ FuzzyOWL2Keyword.EQUAL.get_value().suppress()
|
|
@@ -318,7 +323,9 @@ class FuzzyOwl2Parser(object):
|
|
|
318
323
|
| FuzzyOWL2Keyword.SUGENO.get_value()
|
|
319
324
|
| FuzzyOWL2Keyword.QUASI_SUGENO.get_value()
|
|
320
325
|
)
|
|
321
|
-
+
|
|
326
|
+
+ close_tag
|
|
327
|
+
+ weights
|
|
328
|
+
+ concepts
|
|
322
329
|
).add_parse_action(_parse_integral_concept)
|
|
323
330
|
| FuzzyOWL2Keyword.Q_OWA.get_value().suppress() + q_owa_concept
|
|
324
331
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: fuzzy-dl-owl2
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.5
|
|
4
4
|
Summary: A python porting of the Fuzzy Description Language (see https://www.umbertostraccia.it/cs/software/fuzzyDL/fuzzyDL.html) and the Fuzzy OWL 2 framework (see https://www.umbertostraccia.it/cs/software/FuzzyOWL/index.html).
|
|
5
5
|
License: CC-BY-SA-4.0
|
|
6
6
|
Author: Giuseppe Filippone
|
|
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
14
14
|
Requires-Dist: gurobipy (>=12.0.0,<13.0.0)
|
|
15
15
|
Requires-Dist: networkx (>=3.3,<4.0)
|
|
16
16
|
Requires-Dist: owlready2 (>=0.47,<0.48)
|
|
17
|
-
Requires-Dist: pyowl2 (>=1.0.
|
|
17
|
+
Requires-Dist: pyowl2 (>=1.0.2,<2.0.0)
|
|
18
18
|
Requires-Dist: pyparsing (>=3.2.3,<4.0.0)
|
|
19
19
|
Requires-Dist: rdflib (>=7.1.4,<8.0.0)
|
|
20
20
|
Requires-Dist: sortedcontainers (>=2.4.0,<3.0.0)
|
|
@@ -62,7 +62,7 @@ fuzzy_dl_owl2/fuzzydl/exception/__init__.py,sha256=IoYY5IQoU4UYyoB-dFOVLZyDvJN20
|
|
|
62
62
|
fuzzy_dl_owl2/fuzzydl/exception/fuzzy_ontology_exception.py,sha256=eH1ybBCx1QoZaf8PLCq1rC_3tiBRA-gKCwECTcUUuro,122
|
|
63
63
|
fuzzy_dl_owl2/fuzzydl/exception/inconsistent_ontology_exception.py,sha256=ez0RQN4KGlNRcfB7IXfPz3bM86CFLl6zo-RRTBRpa_o,129
|
|
64
64
|
fuzzy_dl_owl2/fuzzydl/feature_function.py,sha256=KSQvCSYfJK5N6FFfDlyS1Y7UPHSYZNXzdYYZMWzXF8U,6399
|
|
65
|
-
fuzzy_dl_owl2/fuzzydl/fuzzydl_to_owl2.py,sha256=
|
|
65
|
+
fuzzy_dl_owl2/fuzzydl/fuzzydl_to_owl2.py,sha256=BUt-LUHW9VPtUNT74zPblgbClwuQL8_HN6gXMQ2_X8k,46670
|
|
66
66
|
fuzzy_dl_owl2/fuzzydl/general_concept_inclusion.py,sha256=Noom35WAeJosPrliGd9_gvEtcK4BthazsSuZH-cxfyU,2380
|
|
67
67
|
fuzzy_dl_owl2/fuzzydl/individual/__init__.py,sha256=zBCa24kE2nv08VgtphjLshpbGNEARUJgCdtyv9r6JGc,110
|
|
68
68
|
fuzzy_dl_owl2/fuzzydl/individual/created_individual.py,sha256=HOo_UXjPPPtm7B0a7k90kE1veuR9gOCK5hp2f_aaJnY,7653
|
|
@@ -124,7 +124,7 @@ fuzzy_dl_owl2/fuzzydl/util/util.py,sha256=5COC79TAJz8fNrRzXLbNpAT9rLd_0KrRI1OU-h
|
|
|
124
124
|
fuzzy_dl_owl2/fuzzydl/util/utils.py,sha256=TPVLEL9NJXgReuxEIOTEOVYqojSymg_-kyrLETXnYdo,2344
|
|
125
125
|
fuzzy_dl_owl2/fuzzyowl2/__init__.py,sha256=C44P0-Sn35FQdVMqYLzeDWa5qPmokbcs8GPiD_zQaSg,153
|
|
126
126
|
fuzzy_dl_owl2/fuzzyowl2/fuzzyowl2.py,sha256=EAC_DXYa694h3pUZ9T_4Y_f60DjzPUs4VqIGbpLY5vo,71402
|
|
127
|
-
fuzzy_dl_owl2/fuzzyowl2/fuzzyowl2_to_fuzzydl.py,sha256=
|
|
127
|
+
fuzzy_dl_owl2/fuzzyowl2/fuzzyowl2_to_fuzzydl.py,sha256=egspxTzY4kNvhsQLP0AAaqJgFUqyO6VJuXLLOej06PA,36994
|
|
128
128
|
fuzzy_dl_owl2/fuzzyowl2/owl_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
129
129
|
fuzzy_dl_owl2/fuzzyowl2/owl_types/choquet_concept.py,sha256=ymnyNfvkvWA3y2UMXyPviD0U98vJ6jrX6zddj09SUoI,671
|
|
130
130
|
fuzzy_dl_owl2/fuzzyowl2/owl_types/concept_definition.py,sha256=d5ZsEX8NN-aYJohXGzeJFhrnufCJ6AZ1YLGiclwysDc,324
|
|
@@ -153,10 +153,10 @@ fuzzy_dl_owl2/fuzzyowl2/owl_types/weighted_min_concept.py,sha256=_sEao87lwH2fKsp
|
|
|
153
153
|
fuzzy_dl_owl2/fuzzyowl2/owl_types/weighted_sum_concept.py,sha256=TrX3-M-LrG-5XgEo6LY8JESZpYwcaIX4rOCU8wfWE4k,510
|
|
154
154
|
fuzzy_dl_owl2/fuzzyowl2/owl_types/weighted_sum_zero_concept.py,sha256=OJW8-ZJXvYTFHrqC8hpVBTY6SwLCTTIe72MSAO3H7hk,524
|
|
155
155
|
fuzzy_dl_owl2/fuzzyowl2/parser/__init__.py,sha256=fKaME_uuWyG5UB7VKD-nMV-j95lC1jWV6E6vD59yM4M,27
|
|
156
|
-
fuzzy_dl_owl2/fuzzyowl2/parser/owl2_parser.py,sha256=
|
|
156
|
+
fuzzy_dl_owl2/fuzzyowl2/parser/owl2_parser.py,sha256=wSE5FBCfv3t-XePJ9Pzyr_EVFTPWtMrtMyqHNgKd9aw,20052
|
|
157
157
|
fuzzy_dl_owl2/fuzzyowl2/util/__init__.py,sha256=81quoggCuIypZjZs3bbf1Ty70KHdva5RGEJxi0oC57E,25
|
|
158
158
|
fuzzy_dl_owl2/fuzzyowl2/util/constants.py,sha256=05eQLYTB4CxxUZ_T-sNG9FsH8hkrBMAh2y24oiQN8xY,3904
|
|
159
|
-
fuzzy_dl_owl2-1.0.
|
|
160
|
-
fuzzy_dl_owl2-1.0.
|
|
161
|
-
fuzzy_dl_owl2-1.0.
|
|
162
|
-
fuzzy_dl_owl2-1.0.
|
|
159
|
+
fuzzy_dl_owl2-1.0.5.dist-info/LICENSE,sha256=er4Z7Ju3OzYUG5mbhh0krYVegIuv4PgehMzihVb2wpc,20131
|
|
160
|
+
fuzzy_dl_owl2-1.0.5.dist-info/METADATA,sha256=uPCNsrud2pSsRiLl4hydpRIAehnILDZcLgZF3iLs3y4,13057
|
|
161
|
+
fuzzy_dl_owl2-1.0.5.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
162
|
+
fuzzy_dl_owl2-1.0.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|