Init wiki from unsel-data wiki authored by Aurélien Lamercerie's avatar Aurélien Lamercerie
_Cette page regroupe différentes requêtes abandonnées._
# Extraction des factoïdes
Premières requêtes envisagées pour l'extraction des factoïdes.
## Extraction des entités (actants)
Voir : [[Extraction des factoïdes : actants (entités) | https://gitlab.tetras-libre.fr/unsel/unsel-rdf-unl/-/wikis/Extraction-des-facto%C3%AFdes-:-actants-(entit%C3%A9s)]]
Cette requête permet d'extraire les actants. Il faudrait l'adapter pour définir l'ensemble des mots-clés définissant un actant (ici : person, administrator), et faire référence à cet ensemble dans la requête (un truc du style regex(..., "icl>$a")), pour tout $a dans ACTANT).
Autre point. La requête va créer un actant par lexème. Il faudrait l'adapter pour créer une seule ressource/classe pour tous les lexèmes avec un label identique.
```sparql
CONSTRUCT {
?lex rdfs:subClassOf system-ontology:actor
}
WHERE {
?uw1 rdfs:label ?uw1Label.
?uw1 unl:is_substructure_of ?req.
?uw1 unl:is_occurrence_of ?lex.
FILTER (
regex(str(?uw1Label),"icl>person")
|| regex(str(?uw1Label),"icl>administrator") )
}
```
Ensuite, la hierarchie des actants peut être retrouvée en prenant en compte la relation "mod".
```sparql
CONSTRUCT {
?lex2 rdfs:subClassOf ?lex1
}
WHERE {
?uw1 rdfs:label ?uw1Label.
?uw2 rdfs:label ?uw2Label.
?uw1 unl:mod ?uw2.
?uw1 unl:is_occurrence_of ?lex1.
?uw2 unl:is_occurrence_of ?lex2.
FILTER (
( regex(str(?uw1Label),"icl>person")
|| regex(str(?uw1Label),"icl>administrator") )
&&
true
)
}
```
NB : dans cette requête, le "true" est à revoir.
## Extraction des entités (messages)
Les messages sont des entités qui permettent de transmettre une information.
```sparql
CONSTRUCT {
?lex1 rdfs:subClassOf system-ontology:message
}
WHERE {
?uw1 rdfs:label ?uw1Label.
?uw2 unl:obj ?uw1.
?uw1 unl:is_occurrence_of ?lex1.
FILTER ( regex(str(?uw1Label),"icl>message")
|| regex(str(?uw1Label),"icl>assignment") )
}
```
## Extraction des entités (composants)
A raffiner. Un composant est un objet qui n'est pas un message. Il faudrait également prendre en compte les labels, en définissant l'ensemble des entités correspondant à un composant. Idéalament, il faudrait avoir dans le document de spécification la description du système et de ses composants, et se servir de cette description pour avoir l'ensemble des composants à prendre en compte.
```sparql
CONSTRUCT {
?lex1 rdfs:subClassOf system-ontology:component
}
WHERE {
?uw1 rdfs:label ?uw1Label.
?uw2 unl:obj ?uw1.
?uw1 unl:is_occurrence_of ?lex1.
FILTER ( regex(str(?uw1Label),"icl>thing") )
}
```
# Extraction des actants "modifiés" (relation "unl:mod")
Cette requête permet d'obtenir les actants "modifiés" en partant d'un actant de base, et en prenant en compte une relation "unl:mod".
## Requêtes pour sélectionner les données utiles
```sparql
SELECT ?fullName ?baseName ?modName
WHERE {
?net1 <type> semNet:base_actor.
?net1 <node> ?uw1.
?uw1 unl:mod ?uw2.
?uw1 unl:is_occurrence_of ?lexTrg1.
?uw2 unl:is_occurrence_of ?lexTrg2.
BIND (strafter(str(?lexTrg1), '#') AS ?suffix1)
BIND (strafter(str(?lexTrg2), '#') AS ?suffix2)
BIND (?suffix1 AS ?baseName)
BIND (?suffix2 AS ?modName)
BIND (concat(?baseName, '_', ?modName) AS ?fullName)
}
```
```sparql
SELECT ?fullName ?baseName ?modName ?entryNode ?semNet ?wkData
WHERE {
?net1 rdfs:subClassOf semNet:net.
?net1 <type> semNet:base_actor.
?net1 <node> ?uw1.
?net1 <entryNode> ?entryNode.
?uw1 unl:mod ?uw2.
?uw1 unl:is_occurrence_of ?lexTrg1.
?uw2 unl:is_occurrence_of ?lexTrg2.
BIND (strafter(str(?lexTrg1), '#') AS ?suffix1)
BIND (strafter(str(?lexTrg2), '#') AS ?suffix2)
BIND (?suffix1 AS ?baseName)
BIND (?suffix2 AS ?modName)
BIND (concat(?baseName, '_', ?modName) AS ?fullName)
BIND (uri(concat('http://unsel.unl-rdf.org/net#',?fullName)) AS ?semNet)
BIND (uri(concat('http://unsel.unl-rdf.org/actor#',?fullName)) AS ?wkData)
}
```
## Requête pour construire les nouveaux filets
requête 2 = requête pour construire les filets de type mod_actor
x, y. baseActor(x) et mod(x,y) -> filet de type modActor avec actor (baseName = fullName(x), modName = suffix(y))
```sparql
CONSTRUCT {
?wkData rdfs:subClassOf semNet:working_data.
?wkData <type> system-ontology:actor.
?wkData <baseName> ?baseName.
?wkData <modName> ?modName.
?wkData <fullName> ?fullName.
?semNet rdfs:subClassOf semNet:net.
?semNet <node> ?uw1.
?semNet <node> ?uw2.
?semNet <entryNode> ?entryNode.
?semNet <type> semNet:mod_actor.
?semNet <data> ?wkData.
}
WHERE {
?net1 rdfs:subClassOf semNet:net.
?net1 <type> semNet:base_actor.
?net1 <node> ?uw1.
?net1 <entryNode> ?entryNode.
?uw1 unl:mod ?uw2.
?uw1 unl:is_occurrence_of ?lexTrg1.
?uw2 unl:is_occurrence_of ?lexTrg2.
BIND (strafter(str(?lexTrg1), '#') AS ?suffix1)
BIND (strafter(str(?lexTrg2), '#') AS ?suffix2)
BIND (?suffix1 AS ?baseName)
BIND (?suffix2 AS ?modName)
BIND (concat(?baseName, '_', ?modName) AS ?fullName)
BIND (uri(concat('http://unsel.unl-rdf.org/net#',?fullName)) AS ?semNet)
BIND (uri(concat('http://unsel.unl-rdf.org/actor#',?fullName)) AS ?wkData)
}
```
# Extraction des listes de "modificateurs"
L'extraction d'une liste des agents pourrait être réalisée sur le même principe, en prenant comme base un filet de type "baseActor". Une première approche part du filet modActor, et prend en compte récursivement les conjonction OU.
## Approche naïve, **non retenue**
Si on cherche à prendre en compte la conjonction OU sur un filet de type mod_Actor, on ne sait sur quelle UW s'applique le OU. On pourrait s'en sortir
```sparql
SELECT
?baseName ?modName1 ?modName2
?fullName1 ?fullName2 ?fullNameUnion
?semNet ?wkData2 ?wkDataUnion
WHERE {
?net1 rdfs:subClassOf semNet:net.
?net1 <type> semNet:mod_actor.
?net1 <node> ?uw1.
?net1 <entryNode> ?entryNode.
?net1 <data> ?actor1.
?uw1 unl:or ?uw2.
?uw2 unl:is_occurrence_of ?lexTrg2.
?actor1 <baseName> ?baseName.
?actor1 <modName> ?modName1.
BIND (strafter(str(?lexTrg2), '#') AS ?suffix2)
BIND (?suffix2 AS ?modName2)
BIND (concat(?baseName, '_', ?modName1) AS ?fullName1)
BIND (concat(?baseName, '_', ?modName2) AS ?fullName2)
BIND (concat(?baseName, '_', ?modName1, '_or_', ?modName2) AS ?fullNameUnion)
BIND (uri(concat('http://unsel.unl-rdf.org/net#',?fullNameUnion)) AS ?semNet)
BIND (uri(concat('http://unsel.unl-rdf.org/actor#',?fullName2)) AS ?wkData2)
BIND (uri(concat('http://unsel.unl-rdf.org/actor#',?fullNameUnion)) AS ?wkDataUnion)
}
```
## Requête pour initialiser une liste de modificateurs (type **modList**)
Cette requête permet de créer un filet de type **modList**. Ce filet capture une liste d'UW introduit par la relation "unl:mod".
```sparql
CONSTRUCT {
?semNet rdfs:subClassOf semNet:net.
?semNet <type> semNet:mod_list.
?semNet <node> ?uw1.
# ?semNet <node> ?uw2.
# ?semNet <entryNode> ?entryNode.
}
WHERE {
?uwSource unl:mod ?uw1.
#?uw1 unl:or ?uw2.
?uw1 rdfs:label ?uw1Label.
#?uw2 rdfs:label ?uw2Label.
?uw1 unl:is_substructure_of ?req.
#?uw2 unl:is_substructure_of ?req.
BIND (strbefore(?uw1Label, '(') AS ?concept1)
#BIND (strbefore(?uw2Label, '(') AS ?concept2)
BIND (uri(concat('http://unsel.unl-rdf.org/net#','modList_', ?concept1)) AS ?semNet)
}
```
\ No newline at end of file