Closed odanoburu closed 3 years ago
this SPARQL query constructs new triples with the correction we need
CONSTRUCT {?s ?p ?newURI}
WHERE {
?s ?p ?wordSenseWrongURI .
# filter objects that are adjectival wordsenses
FILTER regex(str(?wordSenseWrongURI), "wordsense-[0-9]+-a")
# filter wordsense that have no synset
FILTER NOT EXISTS { ?synset wn30:containsWordSense ?wordSenseWrongURI }
# correct URIs
BIND (URI(REPLACE(STR(?wordSenseWrongURI), "-a-", "-s-"))
AS ?newURI)
}
this SPARQL query will actually perform the correction on the triples:
DELETE {?s ?p ?wordSenseWrongURI}
INSERT {?s ?p ?newURI }
WHERE {
?s ?p ?wordSenseWrongURI .
# filter objects that are adjectival wordsenses
FILTER regex(str(?wordSenseWrongURI), "wordsense-[0-9]+-a")
# filter wordsense that have no synset
FILTER NOT EXISTS { ?synset wn30:containsWordSense ?wordSenseWrongURI }
# correct URIs
BIND (URI(REPLACE(STR(?wordSenseWrongURI), "-a-", "-s-"))
AS ?newURI)
}
can you backup the triples and then run this latter query with write permission on the server, @arademaker ? (I tried running locally using rdflib but it needs more memory than I have)
with guidance from https://www.semanticarts.com/sparql-changing-instance-uris/
see #168
@FredsoNerd aqui temos um problema ainda. Na PWN existem os synsets adj e os adj satélites.
https://wordnet.princeton.edu/documentation/wngloss7wn:
satellite synset Synset in an adjective cluster representing a concept that is similar in meaning to the concept represented by its head synset
nos arquivos texto da distribuição oficial da PWN (database files), os satélites recebem o código s
e não a
, vide https://wordnet.princeton.edu/documentation/wndb5wn. Isto ao longo dos anos sempre causou problemas. Esquecemos facilmente disso.
O exemplo do @odanoburu acima persiste em nosso novo RDF. Existe um nó https://w3id.org/own-pt/wn30-en/instances/wordsense-01313004-a-2 que é objeto de uma relação derivated e por isso não foi apagado mas ele está desconectado do synset.
O synset em questão, o http://wn.mybluemix.net/synset?id=01313004-a, em inglês tem 3 senses em EN, e veja que um dos senses tem a relação drf na interface. No RDF
O segundo sense (derelict, https://w3id.org/own-pt/wn30-en/instances/wordsense-01313004-s-2) no RDF não tem o link wn30:derivationallyRelated que está no sense flutuando acima, https://w3id.org/own-pt/wn30-en/instances/wordsense-01313004-a-2
Temos as seguintes relações que tem triplas cujos objetos parecem ser nós soltos:
select distinct ?p
{
?a ?p ?b .
FILTER isIRI(?b)
filter not exists { ?b a ?t . }
}
wn30:adverbPertainsTo wn30:derivationallyRelated wn30:classifiesByUsage wn30:classifiesByTopic wn30:classifiesByRegion
um exemplo é https://w3id.org/own-pt/wn30-en/instances/wordsense-00407151-a-2 desconectado de synsets, que deveria ser o https://w3id.org/own-pt/wn30-en/instances/wordsense-00407151-s-2.
select ?a ?p ?b
{
?a ?p ?b .
FILTER isIRI(?b)
filter not exists { ?b a ?t . }
filter STRSTARTS(str(?p),"https://w3id.org/own-pt/")
}
@arademaker quantos e quais, por favor?
Atualizei nossa código responsável pela reparação da OWN-PT, introduzindo a reparação necessária
A intenção ao introduzir essa nova reparação ao invés de criar um script separadamente seria aproveitar e checar a ocorrencia dos demais erros no own-en-morpho já corrigidos pelo script, além de checar a ocorrencia deste mesmo erro em own-pt-morpho. Aqui, é necessário adicionar uma flag -e
que se refere a reparação da wordnet-en, que tem ligeiras diferenças, por exemplo, não adicionamos tag "pt".
Note que aqui também substituimos lexical_forms em inglês contendo underline, por espaços. Não substituímos as URIs.
Após a correção acima, a query
SELECT ?s2
WHERE {
VALUES ?p {
wn30:adverbPertainsTo
wn30:derivationallyRelated
wn30:classifiesByUsage
wn30:classifiesByTopic
wn30:classifiesByRegion }
?s1 ?p ?s2 .
FILTER NOT EXISTS { ?s2 a ?t . } }"
não retornou resultados. @arademaker , peço que rode a correção e faça a mesma chacagem, para avaliarmos se obtemos o mesmo resultado.
Em 4ee848e movemos as relações de wordsenses-a para wordsenses-s, tomando o cuidado de garantir que os novos senses estivessem bem definidos no RDF. Ver #171 e https://github.com/FredsoNerd/py-ownpt/blob/3ab0a5ac80ed988da4a3eeecd21f9b958832f174/pyownpt/repair.py#L98-L116.
A mesma ação aplicada à own-pt não acusa problemas semelhantes.
example: pointer to http://wnpt.sl.res.ibm.com:10035/#/repositories/wn30/node/%3Chttps://w3id.org/own-pt/wn30-en/instances/wordsense-01313004-a-2%3E instead of http://wnpt.sl.res.ibm.com:10035/#/repositories/wn30/node/%3Chttps://w3id.org/own-pt/wn30-en/instances/wordsense-01313004-s-2%3E in http://wnpt.sl.res.ibm.com/wn/synset?id=01313004-a