Requêtes techniques pour prétraitement et maintenance.
Requête pour contourner la réification des relations UNL
La requête suivante construit les triplets de type Node1 unlRel Node2
à partir des unlRel réifiées.
# -- Request to extend UNL relation
CONSTRUCT {
?node1 ?unlRel ?node2.
}
WHERE {
?rel unl:has_source ?node1.
?rel unl:has_target ?node2.
?rel a ?unlRel.
}
La requête précédente permet d'utiliser cette forme simple quand on n'a pas besoin d'accéder au contenu d'un scope UNL. La requête suivante permet de contourner les scopes réifiées, en ajoutant des triplets de type Node1 unlRel Node2
avec node1 source d'un scope dont node2 est l'entrée.
# -- Request to extend UNL relation to scopes
# (by connecting the source node of the scope to the entry node of the scope)
CONSTRUCT {
?node1Occ ?unlRel ?node2Occ.
}
WHERE {
?scope rdf:type unl:UNL_Scope.
?node1Occ unl:is_source_of ?rel.
?rel unl:has_target ?scope.
?scope unl:is_scope_of ?scopeRel.
?scopeRel unl:has_source ?node2Occ.
?node2Occ unl:has_attribute ".@entry".
?rel a ?unlRel.
}
NB : voir remarques page -> 4.1.1 Filets pour l'extraction des agents
OPTION : requête(s) gardant l'information de présence dans un scope
TODO : l'idée est d'ajouter une annotation sur chaque noeud d'un scope avec le numéro du scope, et le @entry pour l'entrée du scope.
Unification des lexèmes
Le transferts unl to rdf génère des lexèmes distincts pour chaque phrase. Nous souhaitons un dictionnaire unique pour tout le corpus. Il faut donc "unifier" les lexèmes créés pour chaque phrases dans un dictionnaire unique.
On commence par créer un fichier rdf qui contient le dictionnaire et importe toutes les phrases du corpus.
Ensuite on crée les lexèmes :
CONSTRUCT{
?lexNew a <http://unsel.unl-rdf.org/CCTP-SRSA-IP-dictionary#lexeme> .
}
WHERE {
?lexOld a <https://unl.tetras-libre.fr/rdf/schema#UW_Lexeme> .
BIND (strafter(str(?lexOld), '#') AS ?suffix1)
BIND (uri(concat('http://unsel.unl-rdf.org/CCTP-SRSA-IP-dictionary#',?suffix1)) AS ?lexNew)
}
Puis on copie les triplets des anciens lexèmes vers les nouveaux avec les deux requêtes suivantes :
CONSTRUCT{?x1 ?p1 ?lexNew .}
WHERE {
?lexOld a <https://unl.tetras-libre.fr/rdf/schema#UW_Lexeme> .
?x1 ?p1 ?lexOld .
BIND (strafter(str(?lexOld), '#') AS ?suffix1)
BIND (uri(concat('http://unsel.unl-rdf.org/CCTP-SRSA-IP-dictionary#',?suffix1)) AS ?lexNew)
}
CONSTRUCT{?lexNew ?p2 ?x2.}
WHERE {
?lexOld a <https://unl.tetras-libre.fr/rdf/schema#UW_Lexeme> .
?lexOld ?p2 ?x2.
BIND (strafter(str(?lexOld), '#') AS ?suffix1)
BIND (uri(concat('http://unsel.unl-rdf.org/CCTP-SRSA-IP-dictionary#',?suffix1)) AS ?lexNew)
}
Enfin, on peut supprimer les anciennes instances de lexeme .
TODO : Modifier unl2rdf pour permettre de fournir le préfixe à utiliser pour les lexèmes.