Dibujando un wordnet con TikZ

Dibujando un wordnet con TikZ

Intento usar TikZ para dibujar un Wordnet como este.

ingrese la descripción de la imagen aquí

pero realmente no sé por dónde empezar. ¿Alguien puede ayudarme a dibujar este gráfico? Desafortunadamente, no tengo suficiente tiempo para leer libros sobre TikZ. Es parte de mi tarea de hoy :(

Respuesta1

Una posibilidad utilizando los poderosos.forestpaquete:

\documentclass{article}
\usepackage{forest}

\begin{document}

\begin{forest}
[entity
  [inanimate-object
    [natural-object
      [geological-formation
        [natural-elevation [hill], tikz={
           \foreach \nodenam/\nodelabel in {!ul/0.000113,!u/0.000189}
             \node[anchor=east,xshift=-10pt] at (\nodenam.west) {$\nodelabel$};                              
            }
        ] 
        [shore [coast], tikz={
            \foreach \nodename/\nodelabel in {!ul/0.0000216,!u/0.0000836,!uu/0.00176,!uuu/0.0163,!uuuu/0.167,!ur/0.365}
                \node[anchor=west,xshift=10pt] at (\nodename.east) {$\nodelabel$};
          }
        ]
      ]
    ]
  ]
]
\end{forest}

\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

Una solución basada en árboles

Una posible solución a esto es \usetikzlibrary{positioning}en combinación con qtreey tikz-qtree. Los dos últimos le permitirán dibujar estructuras de árbol como el árbol que busca, y la positioningbiblioteca le permitirá definir nodos en términos de otros nodos para colocar los números en relación con las palabras.

Aquí hay un MWE para tal solución:

\documentclass{article}

\usepackage{qtree}
\usepackage{tikz}
\usepackage{tikz-qtree,tikz-qtree-compat}
\tikzset{every tree node/.style={align=center, anchor=north}}
\usetikzlibrary{positioning}
\usepackage{fixltx2e}

\begin{document}

\begin{tikzpicture}[baseline]
\Tree
[.\node(entity){entity};
    [.\node(inanimate){inanimate object};
        [.\node(natural){natural object};
            [.\node(geological){geological formation};
                [.\node(naturalelev){natural elevation};
                    [.\node(hill){hill}; ]
                ]
                [.\node(shore){shore};
                    [.\node(coast){coast}; ]
                ] ] ] ] ]
\node [base right=2cm of entity] (1) {0.395} ;
\node [base left=2.5cm of entity] (align) {};
\node [below=0.6cm of 1] (2) {0.167};
\node [below=0.6cm of 2] (3) {0.0163};
\node [below=0.55cm of 3] (4) {0.00176};
\node [below=0.6cm of 4] (5) {0.0000836};
\node [below=0.5cm of 5] (6) {0.0000216};
\node [below=3.8cm of align] (7) {0.000113};
\node [below=.5cm of 7] (8) {0.0000189};
\end{tikzpicture}

\end{document}

ingrese la descripción de la imagen aquí

La desventaja de esta solución es que debe colocar manualmente los nodos definidos adicionalmente. Probablemente alguien pueda pensar en una solución más elegante que yo, lo cual sería particularmente bueno si tienes que hacer muchos de estos diagramas. No obstante, esta solución al menos parece proporcionar lo que busca en este caso.


Una solución basada en matrices

Otra solución que evita el problema mencionado anteriormente: es decir, el problema de tener que definir los nodos manualmente cada vez que tienes que dibujar uno de estos diagramas (o cada vez que cambias el tamaño de uno de ellos) es \usetikzlibrary{matrix}. Colocar toda la información dentro de las filas y columnas de una matriz permite evitar el problema de tener que espaciar la información manualmente usando el \nodecomando, ya que esto se hace automáticamente en virtud de que la información se almacena en las filas y columnas de una matriz. .

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\begin{figure}[h!]
\begin{tikzpicture}[description/.style={fill=white,inner sep=2pt}]
\matrix (m) [matrix of nodes, row sep=1.5em,
column sep=0.3em, text height=1.5ex, text depth=0.25ex]
{
& & entity & & 0.395 \\ 
& & inanimate object & & 0.167 \\ 
& & natural object & & 0.0163 \\ 
& & geological formation & & 0.00176 \\ 
0.000113 & natural elevation & & shore & 0.0000836 \\ 
0.0000189 & hill & & coast & 0.0000216 \\ 
};

\path[-]    (m-1-3) edge (m-2-3)
            (m-2-3) edge (m-3-3)
            (m-3-3) edge (m-4-3)
            (m-4-3) edge (m-5-2)
            (m-5-2) edge (m-6-2)
            (m-4-3) edge (m-5-4)
            (m-5-4) edge (m-6-4);

\end{tikzpicture}
\end{figure}

\end{document}

ingrese la descripción de la imagen aquí

información relacionada