Upload files to "VerbNet/VerbNet2OWL"
This commit is contained in:
parent
26ddc15841
commit
b0582335a5
97
VerbNet/VerbNet2OWL/Final1.py
Normal file
97
VerbNet/VerbNet2OWL/Final1.py
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
import os
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
from rdflib import Graph, Namespace, URIRef , RDFS , RDF , OWL
|
||||||
|
|
||||||
|
|
||||||
|
ttl_directory = "TTLs"
|
||||||
|
xml_directory = "XMLs" #path
|
||||||
|
|
||||||
|
def xmlclass_to_rdf(xml_file_path, rdf_output_path):
|
||||||
|
tree = ET.parse(xml_file_path)
|
||||||
|
root = tree.getroot()
|
||||||
|
g = Graph(base="http://tavasi.majles.ir/ontology/general/Verbnet")
|
||||||
|
go = Namespace("http://tavasi.majles.ir/ontology/general#")
|
||||||
|
g.bind("go", go)
|
||||||
|
|
||||||
|
ontology_iri = URIRef("http://tavasi.majles.ir/ontology/general")
|
||||||
|
g.add((ontology_iri, RDF.type, OWL.Ontology))
|
||||||
|
|
||||||
|
for j in root.iter('VNCLASS'):
|
||||||
|
id = j.attrib['ID']
|
||||||
|
id_uri = URIRef(go[id])
|
||||||
|
MEMBERS = j.find('MEMBERS')
|
||||||
|
if MEMBERS is None:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
for i in j.find('MEMBERS').findall('MEMBER'):
|
||||||
|
name = i.attrib['name']
|
||||||
|
name2 = str(name)
|
||||||
|
name2.replace(" ", "_")
|
||||||
|
name_uri = URIRef(go[name2])
|
||||||
|
g.add((name_uri, RDFS.subClassOf, id_uri))
|
||||||
|
|
||||||
|
for p in root.iter('SUBCLASSES'):
|
||||||
|
for k in p.iter('VNSUBCLASS'):
|
||||||
|
id2 = k.attrib['ID']
|
||||||
|
id2_uri = URIRef(go[id2])
|
||||||
|
MEMBERS = k.find('MEMBERS')
|
||||||
|
if MEMBERS is None:
|
||||||
|
pass
|
||||||
|
for i in k.find('MEMBERS').findall('MEMBER'):
|
||||||
|
name = i.attrib['name']
|
||||||
|
name = str(name)
|
||||||
|
name.replace(" ","_")
|
||||||
|
name_uri = URIRef(go[name])
|
||||||
|
g.add((name_uri, RDFS.subClassOf, id2_uri))
|
||||||
|
|
||||||
|
for a in root.iter('VNCLASS'):
|
||||||
|
id = a.attrib['ID']
|
||||||
|
id_uri = URIRef(go[id])
|
||||||
|
SUBCLASSES = a.find('SUBCLASSES')
|
||||||
|
if SUBCLASSES is None:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
for p in a.find('SUBCLASSES').findall('VNSUBCLASS'):
|
||||||
|
id2 = p.attrib['ID']
|
||||||
|
id2_uri = URIRef(go[id2])
|
||||||
|
g.add((id2_uri, RDFS.subClassOf, id_uri))
|
||||||
|
SUBCLASSES = p.find('SUBCLASSES')
|
||||||
|
if SUBCLASSES is None:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
for f in p.find('SUBCLASSES').findall('VNSUBCLASS'):
|
||||||
|
id3 = f.attrib['ID']
|
||||||
|
id3_uri = URIRef(go[id3])
|
||||||
|
g.add((id3_uri, RDFS.subClassOf, id2_uri))
|
||||||
|
SUBCLASSES = f.find('SUBCLASSES')
|
||||||
|
if SUBCLASSES is None:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
for m in f.find('SUBCLASSES').findall('VNSUBCLASS'):
|
||||||
|
id4 = m.attrib['ID']
|
||||||
|
id4_uri = URIRef(go[id4])
|
||||||
|
g.add((id4_uri, RDFS.subClassOf, id3_uri))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for m in root.iter('THEMROLE'):
|
||||||
|
type = m.attrib['type']
|
||||||
|
has = "has"
|
||||||
|
type = has + type
|
||||||
|
type_uri = URIRef(go[type])
|
||||||
|
g.add((id_uri, RDFS.subClassOf, type_uri))
|
||||||
|
|
||||||
|
|
||||||
|
g.serialize(destination=rdf_output_path, format='turtle')
|
||||||
|
|
||||||
|
|
||||||
|
# for filename in os.listdir(xml_directory):
|
||||||
|
# if filename.endswith(".xml"):
|
||||||
|
# xml_file_path = os.path.join(xml_directory, filename)
|
||||||
|
# rdf_output_path = os.path.join(ttl_directory, os.path.splitext(filename)[0] + '.ttl')
|
||||||
|
# xmlclass_to_rdf(xml_file_path, rdf_output_path)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
xml_directory = "XMLs/appear-48.1.1.xml"
|
||||||
|
ttl_directory = "TTLs/appear-48.1.1.ttl"
|
||||||
|
xmlclass_to_rdf(xml_directory,ttl_directory)
|
233
VerbNet/VerbNet2OWL/Final2.py
Normal file
233
VerbNet/VerbNet2OWL/Final2.py
Normal file
|
@ -0,0 +1,233 @@
|
||||||
|
import os
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
from rdflib import Namespace, URIRef
|
||||||
|
|
||||||
|
|
||||||
|
def parse_and_generate_OWL(xml_file_path):
|
||||||
|
go1 = Namespace("http://tavasi.majles.ir/ontology/general#")
|
||||||
|
|
||||||
|
final_output = ""
|
||||||
|
tree = ET.parse(xml_file_path)
|
||||||
|
root = tree.getroot()
|
||||||
|
|
||||||
|
for j in root.iter('VNCLASS'):
|
||||||
|
id = j.attrib['ID']
|
||||||
|
id_uri = URIRef('<'+ go1 + id +'>')
|
||||||
|
selrestr_elements = []
|
||||||
|
themroles = j.find('THEMROLES')
|
||||||
|
if themroles is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
for t in themroles.findall('THEMROLE'):
|
||||||
|
themrole_type = t.attrib['type']
|
||||||
|
predicate = predicate_uri(themrole_type)
|
||||||
|
|
||||||
|
|
||||||
|
for frst in t.findall('SELRESTRS'):
|
||||||
|
for sec in frst.findall('SELRESTRS'):
|
||||||
|
for thrd in sec.findall('SELRESTRS'):
|
||||||
|
for type3 in thrd.findall('SELRESTR'):
|
||||||
|
type3_uri = URIRef('<'+ go1 + type3.attrib['type'] +'>')
|
||||||
|
if type3.attrib.get('Value') == '-':
|
||||||
|
nottype3 = nottype(type3_uri)
|
||||||
|
selrestr_elements.append(nottype3)
|
||||||
|
else:
|
||||||
|
selrestr_elements.append(type3_uri)
|
||||||
|
if thrd.findall('SELRESTR'):
|
||||||
|
SELRESTR_element = thrd.find('SELRESTR')
|
||||||
|
SELRESTR_count = len(list(SELRESTR_element))
|
||||||
|
if thrd.attrib.get('logic') == "or":
|
||||||
|
if len(selrestr_elements) >= 2:
|
||||||
|
or_type3 = OR(selrestr_elements[-1],selrestr_elements[-2])
|
||||||
|
selrestr_elements.append(or_type3)
|
||||||
|
elif thrd.text is None:
|
||||||
|
pass
|
||||||
|
elif SELRESTR_count == 1:
|
||||||
|
pass
|
||||||
|
elif not thrd.attrib.get('logic') == "or":
|
||||||
|
if len(selrestr_elements) >= 2:
|
||||||
|
AND_type3 = AND(selrestr_elements[-1],selrestr_elements[-2])
|
||||||
|
selrestr_elements.append(AND_type3)
|
||||||
|
for type2 in sec.findall('SELRESTR'):
|
||||||
|
type2_uri = URIRef('<'+ go1 + type2.attrib['type'] +'>')
|
||||||
|
if type2.attrib.get('Value') == '-':
|
||||||
|
nottype2 = nottype(type2_uri)
|
||||||
|
selrestr_elements.append(nottype2)
|
||||||
|
else:
|
||||||
|
selrestr_elements.append(type2_uri)
|
||||||
|
if sec.findall('SELRESTR'):
|
||||||
|
SELRESTR_element = sec.find('SELRESTR')
|
||||||
|
SELRESTR_count = len(list(SELRESTR_element))
|
||||||
|
if sec.attrib.get('logic') == "or":
|
||||||
|
if len(selrestr_elements) >= 2:
|
||||||
|
or_type2 = OR(selrestr_elements[-1],selrestr_elements[-2])
|
||||||
|
selrestr_elements.append(or_type2)
|
||||||
|
elif sec.text is None:
|
||||||
|
pass
|
||||||
|
elif SELRESTR_count == 1:
|
||||||
|
pass
|
||||||
|
elif not sec.attrib.get('logic') == "or":
|
||||||
|
if len(selrestr_elements) >= 2:
|
||||||
|
AND_type2 = AND(selrestr_elements[-1],selrestr_elements[-2])
|
||||||
|
selrestr_elements.append(AND_type2)
|
||||||
|
for type1 in frst.findall('SELRESTR'):
|
||||||
|
type1_uri = URIRef('<'+ go1 + type1.attrib['type'] +'>')
|
||||||
|
if type1.attrib.get('Value') == '-':
|
||||||
|
nottype1 = nottype(type1_uri)
|
||||||
|
selrestr_elements.append(nottype1)
|
||||||
|
else:
|
||||||
|
selrestr_elements.append(type1_uri)
|
||||||
|
if frst.findall('SELRESTR'):
|
||||||
|
SELRESTR_element = frst.find('SELRESTR')
|
||||||
|
SELRESTR_count = len(list(SELRESTR_element))
|
||||||
|
if frst.attrib.get('logic') == "or":
|
||||||
|
if len(selrestr_elements) >= 2:
|
||||||
|
or_type1 = OR(selrestr_elements[-1],selrestr_elements[-2])
|
||||||
|
selrestr_elements.append(or_type1)
|
||||||
|
elif frst.text is None:
|
||||||
|
pass
|
||||||
|
elif SELRESTR_count == 1:
|
||||||
|
pass
|
||||||
|
elif not frst.attrib.get('logic') == "or":
|
||||||
|
if len(selrestr_elements) >= 2:
|
||||||
|
AND_type1 = AND(selrestr_elements[-1],selrestr_elements[-2])
|
||||||
|
selrestr_elements.append(AND_type1)
|
||||||
|
if len(selrestr_elements) >= 1:
|
||||||
|
if frst.text is None:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
final1 = only(id_uri,predicate,selrestr_elements[-1])
|
||||||
|
# print(final_output)
|
||||||
|
final_output = final_output + final1
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
|
||||||
|
for j in root.iter('VNSUBCLASS'):
|
||||||
|
id = j.attrib['ID']
|
||||||
|
id_uri = URIRef('<'+ go1 + id +'>')
|
||||||
|
selrestr_elements = []
|
||||||
|
themroles = j.find('THEMROLES')
|
||||||
|
if themroles is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
for t in themroles.findall('THEMROLE'):
|
||||||
|
themrole_type = t.attrib['type']
|
||||||
|
predicate = predicate_uri(themrole_type)
|
||||||
|
|
||||||
|
for frst in t.findall('SELRESTRS'):
|
||||||
|
for sec in frst.findall('SELRESTRS'):
|
||||||
|
for thrd in sec.findall('SELRESTRS'):
|
||||||
|
for type3 in thrd.findall('SELRESTR'):
|
||||||
|
type3_uri = URIRef('<'+ go1 + type3.attrib['type'] +'>')
|
||||||
|
if type3.attrib.get('Value') == '-':
|
||||||
|
nottype3 = nottype(type3_uri)
|
||||||
|
selrestr_elements.append(nottype3)
|
||||||
|
else:
|
||||||
|
selrestr_elements.append(type3_uri)
|
||||||
|
if thrd.findall('SELRESTR'):
|
||||||
|
SELRESTR_element = thrd.find('SELRESTR')
|
||||||
|
SELRESTR_count = len(list(SELRESTR_element))
|
||||||
|
if thrd.attrib.get('logic') == "or":
|
||||||
|
if len(selrestr_elements) >= 2:
|
||||||
|
or_type3 = OR(selrestr_elements[-1],selrestr_elements[-2])
|
||||||
|
selrestr_elements.append(or_type3)
|
||||||
|
elif thrd.text is None:
|
||||||
|
pass
|
||||||
|
elif SELRESTR_count == 1:
|
||||||
|
pass
|
||||||
|
elif not thrd.attrib.get('logic') == "or":
|
||||||
|
if len(selrestr_elements) >= 2:
|
||||||
|
AND_type3 = AND(selrestr_elements[-1],selrestr_elements[-2])
|
||||||
|
selrestr_elements.append(AND_type3)
|
||||||
|
for type2 in sec.findall('SELRESTR'):
|
||||||
|
type2_uri = URIRef('<'+ go1 + type2.attrib['type'] +'>')
|
||||||
|
if type2.attrib.get('Value') == '-':
|
||||||
|
nottype2 = nottype(type2_uri)
|
||||||
|
selrestr_elements.append(nottype2)
|
||||||
|
else:
|
||||||
|
selrestr_elements.append(type2_uri)
|
||||||
|
if sec.findall('SELRESTR'):
|
||||||
|
SELRESTR_element = sec.find('SELRESTR')
|
||||||
|
SELRESTR_count = len(list(SELRESTR_element))
|
||||||
|
if sec.attrib.get('logic') == "or":
|
||||||
|
if len(selrestr_elements) >= 2:
|
||||||
|
or_type2 = OR(selrestr_elements[-1],selrestr_elements[-2])
|
||||||
|
selrestr_elements.append(or_type2)
|
||||||
|
elif sec.text is None:
|
||||||
|
pass
|
||||||
|
elif SELRESTR_count == 1:
|
||||||
|
pass
|
||||||
|
elif not sec.attrib.get('logic') == "or":
|
||||||
|
if len(selrestr_elements) >= 2:
|
||||||
|
AND_type2 = AND(selrestr_elements[-1],selrestr_elements[-2])
|
||||||
|
selrestr_elements.append(AND_type2)
|
||||||
|
for type1 in frst.findall('SELRESTR'):
|
||||||
|
type1_uri = URIRef('<'+ go1 + type1.attrib['type'] +'>')
|
||||||
|
if type1.attrib.get('Value') == '-':
|
||||||
|
nottype1 = nottype(type1_uri)
|
||||||
|
selrestr_elements.append(nottype1)
|
||||||
|
else:
|
||||||
|
selrestr_elements.append(type1_uri)
|
||||||
|
if frst.findall('SELRESTR'):
|
||||||
|
SELRESTR_element = frst.find('SELRESTR')
|
||||||
|
SELRESTR_count = len(list(SELRESTR_element))
|
||||||
|
if frst.attrib.get('logic') == "or":
|
||||||
|
if len(selrestr_elements) >= 2:
|
||||||
|
or_type1 = OR(selrestr_elements[-1],selrestr_elements[-2])
|
||||||
|
selrestr_elements.append(or_type1)
|
||||||
|
elif frst.text is None:
|
||||||
|
pass
|
||||||
|
elif SELRESTR_count == 1:
|
||||||
|
pass
|
||||||
|
elif not frst.attrib.get('logic') == "or":
|
||||||
|
if len(selrestr_elements) >= 2:
|
||||||
|
AND_type1 = AND(selrestr_elements[-1],selrestr_elements[-2])
|
||||||
|
selrestr_elements.append(AND_type1)
|
||||||
|
if len(selrestr_elements) >= 1:
|
||||||
|
if frst.text is None:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
final2 = only(id_uri,predicate,selrestr_elements[-1])
|
||||||
|
final_output = final_output + final2
|
||||||
|
# print(final_output)
|
||||||
|
return final_output
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def predicate_uri (themrole):
|
||||||
|
go3 = "<http://tavasi.majles.ir/ontology/general#EventHas"
|
||||||
|
predicate = go3 + themrole + ">"
|
||||||
|
return predicate
|
||||||
|
|
||||||
|
def nottype(type):
|
||||||
|
notType = f"""[ rdf:type owl:Class ; owl:complementOf {type} ]"""
|
||||||
|
return notType
|
||||||
|
|
||||||
|
#check
|
||||||
|
def only(id, predicate, rest):
|
||||||
|
only = f"""{id} rdfs:subClassOf [ rdf:type owl:Restriction ;
|
||||||
|
owl:onProperty {predicate} ;
|
||||||
|
owl:allValuesFrom {rest}
|
||||||
|
].\n"""
|
||||||
|
return only
|
||||||
|
def AND (type1, type2):
|
||||||
|
ANDrest = f"""[owl:intersectionOf ( {type1}
|
||||||
|
{type2}
|
||||||
|
) ;
|
||||||
|
rdf:type owl:Class]"""
|
||||||
|
return ANDrest
|
||||||
|
def OR (type1, type2):
|
||||||
|
ORrest = f"""[ rdf:type owl:Class ;
|
||||||
|
owl:unionOf ( {type1}
|
||||||
|
{type2}
|
||||||
|
)]
|
||||||
|
"""
|
||||||
|
return ORrest
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
xml_directory = "XMLs/"
|
||||||
|
for filename in os.listdir(xml_directory):
|
||||||
|
xml_file_path = os.path.join(xml_directory, filename)
|
||||||
|
x = parse_and_generate_OWL(xml_file_path)
|
||||||
|
print(x)
|
39
VerbNet/VerbNet2OWL/adding to ttl.py
Normal file
39
VerbNet/VerbNet2OWL/adding to ttl.py
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
import os
|
||||||
|
from Final1 import xmlclass_to_rdf
|
||||||
|
from Final2 import parse_and_generate_OWL
|
||||||
|
|
||||||
|
ttl_directory = "TTLs"
|
||||||
|
xml_directory = "XMLs" #path
|
||||||
|
|
||||||
|
|
||||||
|
for filename in os.listdir(xml_directory):
|
||||||
|
if filename.endswith(".xml"):
|
||||||
|
xml_file_path = os.path.join(xml_directory, filename)
|
||||||
|
rdf_output_path = os.path.join(ttl_directory, os.path.splitext(filename)[0] + '.ttl')
|
||||||
|
xmlclass_to_rdf(xml_file_path, rdf_output_path)
|
||||||
|
print (f"corresponding ttl from {filename} is created")
|
||||||
|
# for filename in os.listdir(ttl_directory):
|
||||||
|
# if filename.endswith(".ttl"):
|
||||||
|
# ttl_output_path = os.path.join(ttl_directory, filename)
|
||||||
|
# with open(ttl_output_path, 'r') as file:
|
||||||
|
# ttl = file.read()
|
||||||
|
# ttl.replace("@prefix go: <http://tavasi.majles.ir/ontology/general/> .", "@prefix go: <http://tavasi.majles.ir/ontology/general/#> .")
|
||||||
|
# with open(ttl_output_path, 'w') as file:
|
||||||
|
# file.write(modified_content)
|
||||||
|
|
||||||
|
for filename in os.listdir(xml_directory):
|
||||||
|
if filename.endswith(".xml"):
|
||||||
|
xml_file_path = os.path.join(xml_directory, filename)
|
||||||
|
ttl_output_path = os.path.join(ttl_directory, os.path.splitext(filename)[0] + '.ttl')
|
||||||
|
# ttl_output_path = os.path.join(ttl_directory, filename + '.ttl')
|
||||||
|
ttl_added_string = parse_and_generate_OWL(xml_file_path)
|
||||||
|
|
||||||
|
with open(ttl_output_path, 'r') as file:
|
||||||
|
content = file.read()
|
||||||
|
if ttl_added_string == "":
|
||||||
|
modified_content = content + "\n#This verb has no selectional restriction \n"
|
||||||
|
else:
|
||||||
|
modified_content = content + f"\n# Generated String:\n{ttl_added_string}\n"
|
||||||
|
with open(ttl_output_path, 'w') as file:
|
||||||
|
file.write(modified_content)
|
||||||
|
print (f"corresponding ttl from {filename} is modified")
|
Loading…
Reference in New Issue
Block a user