Utiliser la langue Wolfram pour interpréter la langue Wolfram?

Aug 20 2020

Je veux tracer la relation de tous fucntions dans Mathematica, en utilisant peut - être Graphou la force dirigée-graphique d3.js

k = 
  DeleteCases[
    WolframLanguageData[All, {"CanonicalName", "RelatedSymbols"}], {_, _Missing}];
k = MapAt[CanonicalName, k, {All, 2}];
data = 
  DeleteDuplicates[
    Sort /@ Flatten[Thread[#[[1]] \[UndirectedEdge] #[[2]]] & /@ k]];
GraphPlot[data, VertexSize -> Tiny, ImageSize -> Full]

Cependant, le chiffre est trop grand. Existe-t-il une méthode pour zoomer dessus et faire des info-bulles sur les sommets?

J'ai essayé Tooltip, cependant, cela n'a pas donné de complot.

Graph[Tooltip[#, #] & /@ VertexList[data], data]

Et comment puis-je utiliser des couleurs pour distinguer ces fonctions par des catégories telles que le langage Audio, Image et Core?

Peut-être que je pourrais utiliser l'apprentissage automatique pour distinguer ces fonctions que j'ai essayées, mais cela n'a pas fonctionné si bien.

space = 
  Thread[
    VertexList[data] -> 
      DimensionReduce[
        FeatureExtract[VertexList[data], {"SegmentedWords", "TFIDF"}], 
        1]];
space[[All, 2]] = Normalize[Flatten@space[[All, 2]]];
NumberLinePlot[space[[All, 2]]]

METTRE À JOUR:

Version: 12.1.1

C'était déjà une démo dans le NestGraphdocument de.

Réponses

6 BobHanlon Aug 20 2020 at 22:49

Support technique CAS: 4620942

$Version

(* "12.1.1 for Mac OS X x86 (64-bit) (June 19, 2020)" *)

Clear["Global`*"]

Comme suggéré par Flinty, exécuter du code à partir du documentation

graph = WolframLanguageData["Cos", "RelationshipCommunityGraph"]

Les étiquettes des sommets ne s'affichent pas correctement

Show[graph, ImageSize -> Large]

Pour contourner le problème, corrigez manuellement les étiquettes

graph /. Style[lbl_, _List] :> lbl

1 partida Aug 25 2020 at 16:07

Définissez une fonction qui peut extraire des voisins avec un rayon rautour du sommet n:

subgraph[g_, n_, r_] := Subgraph[g, AdjacencyList[g, n, r]~Join~{n}]

Jetons un coup d'œil aux voisins dont la distance à la Sinfonction est de 2

subg = subgraph[Graph[data], "Sin", 2];
GraphPlot[HighlightGraph[subg, {"Sin"}], VertexLabels -> "Name", ImageSize -> Large]

Exportez les données graphiques qui seront utilisées dans le code HTML suivant:

json = {"nodes" -> 
    Table[{"id" -> i, "group" -> 1}, {i, VertexList@subg}], 
        "links" -> 
    Table[{"source" -> i[[1]], "target" -> i[[2]], "value" -> 1}, {i, EdgeList@subg}]};
Export["miserables.json", json]

Téléchargez le script D3.js à index.htmlpartir de D3.js v4 Force Directed Graph with Labels

Ensuite, dans le terminal, tapez ce qui suit (python3): python -m http.server

Puis ouvrez http://localhost:8000/dans Chrome, la figure peut faire glisser le sommet de manière interactive

Mais pour tout le gros graphe, le D3.js ne peut pas le gérer ...