own-pt / openWordnet-PT

OpenWordnet-PT: an open access wordnet for Portuguese
http://openwordnet-pt.org
Other
154 stars 35 forks source link

wrong links to satellite adjectives #151

Closed odanoburu closed 3 years ago

odanoburu commented 5 years ago

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

odanoburu commented 5 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/

arademaker commented 3 years ago

see #168

arademaker commented 3 years ago

@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.

image

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

image

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

http://localhost:10035/#/repositories/wn/node/%3Chttps://w3id.org/own-pt/wn30-en/instances/wordsense-01313004-s-2%3E

arademaker commented 3 years ago

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

arademaker commented 3 years ago

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.

arademaker commented 3 years ago
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/")
}
vcvpaiva commented 3 years ago

@arademaker quantos e quais, por favor?

FredsoNerd commented 3 years ago

Atualizei nossa código responsável pela reparação da OWN-PT, introduzindo a reparação necessária

https://github.com/FredsoNerd/py-ownpt/blob/ce2a5cb76ccb486bca20064a929f03337626df9a/pyownpt/repair.py#L60-L74

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.

FredsoNerd commented 3 years ago

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.

FredsoNerd commented 3 years ago

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.