2012-03-05 12 views
9

La entrada es ya sea:Render árbol de sintaxis lingüística en navegador

(1) una representación corchetes de un árbol con nodos internos etiquetados como:

(S (N John) (VP (V hit) (NP (D the) (N ball)))) 

con salida:

enter image description here

(Si las líneas son discontinuas y si el título está presente no son significativas.)

o la entrada podría ser:

(2) un horquillado de palabras sin etiquetas por ejemplo:

((John) ((hit) ((the) (ball)))) 

con la salida igual que el anterior (no etiquetas internas este tiempo, sólo la estructura de árbol)

Otro componente de la entrada es si el árbol está etiquetado como en (1) o no está etiquetado como en (2).


Mi pregunta: ¿Cuál es la mejor manera (el tiempo de desarrollo más rápido) para hacer que estos árboles en el navegador en javascript? Todo debería suceder en el lado del cliente.

Imagino una interfaz simple con solo un cuadro de texto (y un botón de opción que especifica si es un árbol etiquetado o no), que cuando se cambia activa un árbol para representarlo (si la entrada no tiene sintaxis) errores).

Respuesta

4

En realidad, hay una biblioteca del lado del servidor para convertir la representación entre corchetes en el árbol, phpsyntaxtree.
Puede volver a implementarlos utilizando la biblioteca de gráficos de JavaScript como jsdraw2d o rodarlo en JavaScript utilizando canvas HTML5.

10 Best Javascript Drawing and Canvas Libraries

+0

Gracias, ese es un enlace increíble! Es un reemplazo casi perfecto para lo que quiero. Solo desearía que también aceptara entradas con paréntesis en lugar de solo corchetes. – dsg

9

no estoy seguro de cuál es la política de auto-enchufes en stackoverflow. Me disculpo si esto está rompiendo las reglas.

¿Has visto mi solución para esto? mshang.ca/syntree

No es exactamente lo que quieres, pero puedes robar el code si te sirve.

+2

Esto es asombroso. ¿Podría hacer que acepte paréntesis además de corchetes como marcador de constituyentes? Por ejemplo, quiero ser capaz de representar el árbol de ejemplo usando '(S (NP This) (VP (V es) (^ NP a wug)))'. – dsg

+0

No tenía planeado hacer esto porque no quiero introducir demasiados caracteres especiales. Creo que los corchetes son la norma en lingüística. Sin embargo, lo aliento a que bifurque el proyecto y lo modifique según sus necesidades. – mshang

+0

en la medida en que su solución sea útil, stackoverflow está bien con este –

Cuestiones relacionadas