Eu havia solicitado uma nova funcionalidade no KGTK para gerar arestas para os casos de relação inversa e simétrica mas eles me orientaram a usar a funcionalidade de consulta para gerar esse resultado.
https://github.com/usc-isi-i2/kgtk/issues/392
Eu havia resolvido da seguinte forma para os dados extraídos do Allegro referente as publicações:
kgtk filter -i lattes-prof2.tsv -p " ; dcterms:isReferencedBy ; " -o lattes-prof2-Refs.tsv
** abrir o arquivo e trocar node1 e node2
sed -i 's/dcterms:isReferencedBy/dcterms:references/g' lattes-prof2-Refs.tsv
kgtk cat -i lattes-prof2.tsv lattes-prof2-Refs.tsv / add-id -o lattes-prof3.tsv
E fiz os testes com a forma que eles me indicaram para avaliar se o resultado é o mesmo
It is possible to do the transformations using kgtk query
as follows, I will show an example using Wikidata properties. Because
dbpedia properties have colon there is a need to quote the values.
kgtk query -i <file> --graph-cache ... \
--match '(n1)-[:P123]->(n2)' \
--return 'n2 as node1, "P123_inverse" as label, n1 as node2' \
--order-by 'n2, label'
A similar query can be used to do the symmetric properties.
It is possible to complete the graph with all the inverse and symmetric properties in one command. We need to define edges for the properties to record their inverses, and to record whether they are symmetric. Then a single query can do all of them:
kgtk query -i <file> --as input -I <properties-file> --as properties --graph-cache ... \
--match '\
properties: (prop)-[:inverse]->(prop_inv) \
input: (n1)-[l {label: prop}]->(n2)' \
--return 'n2 as node1, prop_inv as label, n1 as node2' \
--order-by 'n2, label, n1'
The above assumes that the has edges of the form <property, inverse, inverse_property>
Nesse primeiro teste inclui somente a relação {dcterms:isReferencedBy -inverse-> dcterms:references}:
kgtk query -i lattes-prof2.tsv --as input -i lattes-properties.tsv --as properties --graph-cache lattes-cache.tsv --match 'properties: (prop)-[:inverse]->(prop_inv), input: (n1)-[l {label: prop}]->(n2)' --order-by 'n2, label, n1' --return 'n2 as node1, prop_inv as label, n1 as node2' -o lattes-prof3-inverse.tsv
O número e o padrão das arestas geradas foi o mesmo da minha solução "alternativa".
Alterei o arquivo lattes-properties.tsv para incluir outras relações inversas e também relações simétricas e gerei uma nova versão do hipergrafo com essas inferências também
kgtk query -i lattes-prof2.tsv --as input -i lattes-properties.tsv --as properties --graph-cache lattes-cache.tsv --match 'properties: (prop)-[:inverse]->(prop_inv), input: (n1)-[l {label: prop}]->(n2)' --order-by 'n2, label, n1' --return 'n2 as node1, prop_inv as label, n1 as node2' -o lattes-prof2-inference.tsv
kgtk cat -i lattes-prof2.tsv lattes-prof2-inference.tsv / add-id -o lattes-prof3.tsv
E repeti alguns dos testes anteriores
kgtk
graph_statistics --log graph_stat_prof3.log --pagerank
--statistics-only --degrees --hits -v -i lattes-prof3.tsv -o
lattes-prof3-stat.tsv
kgtk
reachable-nodes -i lattes-prof3.tsv --root lattes:6075905438020841 -o
lattes-prof3-reach-bfs.tsv --show-properties True --breadth-first True
kgtk
reachable-nodes -i lattes-prof3.tsv --root lattes:6075905438020841 -o
lattes-prof3-reach-nobfs.tsv --show-properties True --breadth-first
False
kgtk reachable-nodes -i lattes-prof3.tsv --root lattes:6075905438020841#author-6075905438020841 -o lattes-author-reach-nobfs.tsv --show-properties True --breadth-first False
Comentários sobre o resultado
It has 1990267 nodes and 5948679 edges. ..... aumentou somente no número de arestas como esperado (era 5.649.736 edges)degree stats: mean=5.977770 ... aumentou (era 5.677365)
Os top 5 no PageRank e no HITS não mudaram
As publicações, conferências, veículos, etc ... são alcançaveis a partir do respectivo lattes. Os arquivos lattes-prof3-reach-bfs.tsv e lattes-prof3-reach-nobfs.tsv contém as mesmas arestas, o que muda é somente a ordem que foram geradas pq o primeiro é por BFS e o segundo por DFS.
As
publicações não são alcançaveis a partir de um autor pq o predicado
dc:creator não tem simétrico ou inverso no vocabulário Dublin Core.
OBS. Na modelagem que usamos hj, o lattes é um documento e o pesquisador/professor é o seu criador
lattes:6075905438020841 rdf:type foaf:Document E3545564lattes:6075905438020841 dc:creator lattes:6075905438020841#author-6075905438020841 E3545560
Comentários
Postar um comentário
Sinta-se a vontade para comentar. Críticas construtivas são sempre bem vindas.