Pular para o conteúdo principal

KGTK @ VM029 - NTriples extraída do Allegro - parte I

Instalado na VM029 com os passos:

Installing KGTK from pip

Before you start: Our installation will use a conda environment.

(Instalei com Miniconda3, caminho /home/cloud-di/miniconda3)

    Set up your own conda environment:

conda create -n kgtk-env python=3.7
conda activate kgtk-env

Note: Installing Graph-tool is problematic on python 3.8 and out of a virtual environment. Thus: the advised installation path is by using a virtual environment.

    Install: pip install kgtk

You can test if kgtk is installed properly now with: kgtk -h.

    Install graph-tool: conda install -c conda-forge graph-tool.

Testar

kgtk -h
kgtk import-ntriples -h
cd kgtk
kgtk import-wordnet -o wordnet.tsv

Exportação dos dados do lattes que estão no Allegro (VM032) - o arquivo gerado tem 750M

~/agraph-7.0.3$ ./agtool export -o ntriples "<lattes-professores-mai21>+<lattes-professores2-mai21>" /home/cloud-di/etl/output/lattes-prof-mai21.nt

Importação dos dados do lattes de NTriples para KGTK - o arquivo gerado tem 571M

conda activate kgtk-env

kgtk import-ntriples -i /home/cloud-di/lattes-data/input/lattes-prof-mai21.nt -o /home/cloud-di/kgtk/lattes-prof.tsv --reject-file /home/cloud-di/kgtk/lattes-prof.err --namespace-file prefix.tsv

Rejeitadas

Todas as arestas com langtag (@pt ou @en) foram rejeitadas, nenhuma biografia foi convertida. Abri uma issue

kgtk validate -i lattes-prof.tsv

Análise estatística do grafo

kgtk deduplicate -i lattes-prof.tsv -o lattes-prof2.tsv -v > lattes-dpk.log

Duplicidades

Read 5.697.105 records, wrote 5.649.736 records. ... aproximadamente 50 mil removidas

kgtk graph_statistics --log graph_stat_prof2.log --pagerank --statistics-only --degrees --hits -v -i lattes-prof2.tsv -o lattes-stat.tsv

kgtk sort -c node1 -i lattes-stat.tsv -o lattes-stat-sorted.tsv

Comentários sobre o log

It has 1.990.267 nodes and 5.649.736 edges ... quase 3x, próximo a média do grau

###Degrees:
in degree stats: mean=2.838682, std=0.342223, max=1
out degree stats: mean=2.838682, std=0.008119, max=1
total degree stats: mean=5.677365, std=0.342312, max=1

###Top relations: ... rdf:first e rdf:rest são decorrentes de reificação (ordem dos autores)
rdf:type    1155494
foaf:name    676062
foaf:citationName    633313
dc:creator    529267
rdf:first    510786
rdf:rest    510786

skos:prefLabel    260624
dc:title    177882
foaf:identifier    147196
skos:broader    144904

###PageRank... rdf:nil é decorrente de reificação (ordem dos autores)
Max pageranks
710    foaf:Person    0.067649
41    cnpq:grandeArea    0.011384
30    rdf:nil    0.010474
39    cnpq:Area    0.007176
6    cnpq:subArea    0.005457

###HITS
... 8374950313063279 é o ID de Maria Clara Lucchetti Bingemer
... 9705170158456125 é o ID de Jaime Tupiassú Pinho de Castro
... o lattes de Mariza Tavares Figueira é 7674534956269436

HITS hubs
710    foaf:Person    0.999587
1576020    "8374950313063279"    0.001845
1598489    "Maria Clara Lucchetti Bingemer"    0.001735
1888267    "Mariza Tavares Figueira"    0.001641
1568794    "9705170158456125"    0.001614
HITS auth
1915144    lattes:8374950313063279#author-8374950313063279    0.001246
1643264    lattes:1860929687731797#author-1860929687731797    0.001246
1668227    lattes:2491891766759477#author-2491891766759477    0.001246
1595250    lattes:0818273339577951#author-0818273339577951    0.001246
1881308    lattes:7476904353230115#author-7476904353230115    0.001246

Estatísticas das demais classes

bibo:Article    vertex_in_degree        57988   bibo:Article-vertex_in_degree-7769665
bibo:Book       vertex_in_degree        12041   bibo:Book-vertex_in_degree-1615
bibo:Chapter    vertex_in_degree        8571    bibo:Chapter-vertex_in_degree-7771605
bibo:Conference vertex_in_degree        29292   bibo:Conference-vertex_in_degree-75
bibo:Journal    vertex_in_degree        22217   bibo:Journal-vertex_in_degree-760
bibo:Periodical vertex_in_degree        6479    bibo:Periodical-vertex_in_degree-2050
bibo:Proceedings        vertex_in_degree        29292   bibo:Proceedings-vertex_in_degree-135
bibo:Thesis     vertex_in_degree        17451   bibo:Thesis-vertex_in_degree-7770000
vivo:FacultyMember      vertex_in_degree        1030   

kgtk connected-components -i lattes-prof2.tsv -o lattes-conn.tsv

kgtk graph_statistics --log graph_stat_conn.log --pagerank --statistics-only --degrees --hits -v -i lattes-conn.tsv -o lattes-conn-stat.tsv

kgtk sort -c node2 -i lattes-conn.tsv -o lattes-conn-sorted.tsv

Comentários sobre o log

###PageRank

... componente CLUSbhXqpneKh5EhKsqsqoN/cw== tem grau de entrada 1990237, ou seja, quase todos os nós do grafo estão na mesma cc

Max pageranks
28    CLUSbhXqpneKh5EhKsqsqoN/cw==    0.459448
19    CLUSQ1ga6O0qVLdWQ8ls+GZu4A==    0.000001
22    CLUSYBdf46xwQO3SV+MJNuc7/w==    0.000001
1990272    CLUSp1DQefhDpBK+OVs32Dygow==    0.000001
10    CLUSAjpzxTEI3vMAW2deRr0L9g==    0.000001

Reificação

kgtk add-id -i lattes-prof2.tsv / unreify-values --trigger-label rdf:type --trigger-node2 cnpq:Area    --value-label skos:broader --old-label skos:broader -o lattes-prof3.tsv

kgtk add-id -i lattes-prof2.tsv / unreify-values --trigger-label rdf:rest --trigger-node2 rdf:nil   --value-label bibo:authorList --old-label bibo:authorList -o lattes-prof3.tsv

Comentários 

O unreify-rdf-statments e unreify-values não fizeram nenhum efeito ou eu não entendi como usar !!! 

Análise de caminhos do grafo 

kgtk add-id -i lattes-prof2.tsv -o lattes-prof3.tsv

kgtk paths --path-file pairs-lattes-prof.tsv --path-source source --path-target target -i lattes-prof3.tsv -o lattes-prof3-path-undirected.tsv --statistics-only --undirected
kgtk paths --path-file pairs-lattes-prof.tsv --path-source source --path-target target -i lattes-prof3.tsv -o lattes-prof3-path.tsv --statistics-only

kgtk reachable-nodes -i lattes-prof3.tsv --root lattes:6075905438020841 -o lattes-prof2-reach-bfs-undirected.tsv --show-properties True --breadth-first True --undirected
kgtk reachable-nodes -i lattes-prof3.tsv --root lattes:6075905438020841 -o lattes-prof2-reach-nobfs-undirected.tsv --show-properties True --breadth-first False --undirected

Comentários sobre o resultado

Somente na opção não direcionado é possível chegar do nó do lattes do Sérgio ao nó do lattes do professor Herman e vice-versa. O lattes de cada professor não alcança as publicações na opção direcionado pq o predicado usado foi o isReferencedBy

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

Comentários sobre a ação

Criei na "força bruta" uma aresta do tipo CV Lattes - dcterms:references > Publicação. Sugeri uma nova funcionalidade para que esse tipo de operação (criação de arestas com base em propriedades inversas que permitam a análise bidirecional das relações)

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

As publicações, conferências, veículos, etc ... passaram as ser alcançaveis com o grafo direcionado mas o autor não alcança as publicações pq o predicado é o dc:creator



Comentários

  1. Fui informado que já corrigiram e esclareceram seus pedidos/comentários.

    ResponderExcluir
  2. Na verdade, descobriram que a lista de language tags do RDF é ligeiramente diferente da lista do WD, que foi a que eles usaram inicialmente. Estarão atualizando a lista.
    Em rel a props inversas e simétricas, o Pedro indicou como vc pode materializar as arestas correspondentes com queries Kypher. A filosofia deles é n aumentar as features se for possivel obter o mesmo resultado usando as funcionalidades já existentes.
    Em rel. ao reify e unreify, o Craig (o engenheiro de software que é responsável pela implementação dos comandos) comentou que acha que foi má compreensão sua do que o comando faz, e ia melhorar a documentação. Mas se vc precisar, pode se comunicar com ele que ele está ciente e vai ajudar (é gente finissima).
    N entendi porque o autor n é alcançável... faltou a inversa de dc:creator?
    Uma observação - talvez seja mais prático quebrar estes post longos em vários pedaços, para que a gente consiga fazer comentários mais próximo do ponto relevante no texto...

    ResponderExcluir
    Respostas
    1. Sobre "Em rel a props inversas e simétricas, o Pedro indicou como vc pode materializar as arestas correspondentes com queries Kypher. A filosofia deles é n aumentar as features se for possivel obter o mesmo resultado usando as funcionalidades já existentes." ...... eu vi a atualização deles lá no GitHub e fiz novos testes usando o Kypher como ele orientou. Funcionou perfeitamente, coloquei nesse post -> https://versant-pesquisadedoutorado.blogspot.com/2021/05/inferencia-de-arestas-com-kgtk-issue-392.html

      Sobre "N entendi porque o autor n é alcançável... faltou a inversa de dc:creator?" ..... esse predicado não tem inversa no vocabulário mas não é um problema em si, é só uma observação mesmo pq um teste eu usei o nó do lattes como root e em outro eu usei o nó do professor/pesquisador.

      Quantos aos demais, está empilhado aqui comigo para rever e testar. A medida que for progredindo vou atualizando.

      Muito obrigada pela força !!! Tô empolgada !!!

      Excluir
    2. Testei também a atualização dos language tags e funcionou corretamente. Registrei aqui -> https://versant-pesquisadedoutorado.blogspot.com/2021/05/kgtk-import-ntriples-discards-triples.html e comentei na issue do GitHub

      Excluir
  3. Daniel, a ideia de quebrar postagens para assuntos "encapsulados" ou "autocontidos" é boa mesmo, se a Veronica conseguir OK.

    Por outro lado, eu uso este esquema com meus alunos de graduação e pós há muito tempo e mesmo nestes casos eu consigo comentar tranquilamente, copiando os trechos relevantes no comentário. Por exemplo:

    "Uma observação - talvez seja mais prático quebrar estes post longos em vários pedaços, para que a gente consiga fazer comentários mais próximo do ponto relevante no texto..."
    --- Sim, concordo com o Daniel, seria bem mais prático! :-)

    ResponderExcluir
    Respostas
    1. Já fiz uma quebra nesse aqui, tirei a parte de embeddings e vou deixar em outro post quando terminar de executar. Vou procurar segmentar mais os posts para a dinâmica de interação ficar mais focada.

      Excluir

Postar um comentário

Sinta-se a vontade para comentar. Críticas construtivas são sempre bem vindas.