tecnicas software programacion procesamiento natural lenguaje generación ejemplos conceptos basicos articulos aplicaciones nlp grammar

nlp - programacion - procesamiento de lenguaje natural software



¿Hay un lenguaje de programación legible para los humanos? (30)

Claro, Erlang.

-module(listsort). -export([by_length/1]). by_length(Lists) -> F = fun(A,B) when is_list(A), is_list(B) -> length(A) < length(B) end, qsort(Lists, F). qsort([], _)-> []; qsort([Pivot|Rest], Smaller) -> qsort([ X || X <- Rest, Smaller(X,Pivot)], Smaller) ++ [Pivot] ++ qsort([ Y ||Y <- Rest, not(Smaller(Y, Pivot))], Smaller).

Soy un humano, es un lenguaje de programación, y puedo leerlo. No sé lo que significa todo eso, pero veo muchas palabras en inglés, creo.

(Lengua firmemente en la mejilla)

Quiero decir, ¿hay un lenguaje codificado con codificación de estilo humano? Por ejemplo:

Create an object called MyVar and initialize it to 10; Take MyVar and call MyMethod() with parameters. . .

Sé que no es tan útil, pero puede ser interesante crear esa gramática.


Al crear un conjunto de reglas, es posible hacer programación lógica en Prolog de esta manera. Puedes construir una gramática (o descargar una) para un dominio en particular, crear una base de conocimiento y luego consultarla. Después de definir tu gramática, podrías hacer algo como:

bob is a parent of tim. mary is a parent of bob. ?- X is a grandparent of tim. X = mary ?- jim is a parent of bob. false


Este es realmente un tema candente.

Para empezar, ¿qué es legible para los humanos?

Un lector chino no puede leer ruso y viceversa. Si limita su dominio, por ejemplo, a los farmacéuticos chinos que escriben una descripción, pueden diseñar un lenguaje al respecto. Y eso sería humano legible .

Tales como el lenguaje caería bajo el paraguas de los lenguajes específicos del dominio .


Haga una búsqueda en google de "programación en lenguaje natural" y encontrará mucha información (incluyendo por qué esta es una mala idea).


La claridad de expresión es importante.

Pero la claridad del pensamiento es mucho, mucho más importante.


Perl, algunas personas dicen.

print "hello!" and open my $File, ''<'', $path or die "Couldn''t open the file after saying hello!";


Puedo leer C. Eso significa que es legible por los humanos (porque soy un humano). Es demasiado escueto para la persona promedio. El concepto general de los lenguajes de programación es maximizar la información sobre cómo debería funcionar la computadora en una línea determinada.

Es por eso que Ruby es tan popular; maximiza la funcionalidad en texto mínimo. El inglés (o cualquier otro lenguaje natural) es un lenguaje bastante impreciso, de baja información / carácter.

En resumen, es: (i) hecho antes y (ii) una idea más débil conocida.


Sí. Se llama COBOL , y la gente generalmente lo detesta.


Tener un lenguaje de programación que se lea como un lenguaje normal (detallado) sería como requerir que las personas conversen todo el tiempo en jerga legal. Toda la verborrea extra solo se interpone en el camino.

Un lenguaje de programación ideal debe tener una sintaxis lo más transparente posible y dejar que los conceptos detrás del programa se destaquen. Obviamente, hay una compensación entre tener una curva de aprendizaje rápida y tener una sintaxis mínima pero oscura (piense en Perl, o incluso en K).


VB es lo más cercano que puedo pensar a uno:

Si MyLife.Sucks Then MyLife.End Else MyLife.Continue


COBOL fue pensado para ser leído por los gerentes, y tiene "palabras ruidosas" para hacerlo más legible.

Lo curioso es que parece un DSL detallado.


Cobol fue algo así como eso.


AppleScript está muy cerca de eso, aunque obviamente depende de la plataforma.

Aquí hay un script para abrir iTunes y reproducir una lista de reproducción

tell application "iTunes" activate play playlist "Party Shuffle" end tell

Fuente: ejemplos de AppleScript


Estoy de acuerdo con el consenso general aquí. Los lenguajes de programación de propósito general "legibles por humanos" son en su mayoría una mala idea, pero los lenguajes específicos de dominio legibles por humanos son muy útiles.

REBOL tiene un gran sistema para crear DSL.


Chef ! Cualquiera puede leer recetas ¿verdad? ¡Mira, hola mundo !

Ingredients. 72 g haricot beans 101 eggs 108 g lard 111 cups oil 32 zucchinis 119 ml water 114 g red salmon 100 g dijon mustard 33 potatoes Method. Put potatoes into the mixing bowl. Put dijon mustard into the mixing bowl. Put lard into the mixing bowl. Put red salmon into the mixing bowl. Put oil into the mixing bowl. Put water into the mixing bowl. Put zucchinis into the mixing bowl. Put oil into the mixing bowl. Put lard into the mixing bowl. Put lard into the mixing bowl. Put eggs into the mixing bowl. Put haricot beans into the mixing bowl. Liquefy contents of the mixing bowl. Pour contents of the mixing bowl into the baking dish.

Lo siento si no es una respuesta seria, pero esto es increíble. :-)


Las DSL pueden ser muy naturales. Vea este ejemplo creado con MGrammar :

test "Searching google for watin" goto "http://www.google.se" type "watin" into "q" click "btnG" assert that text "WatiN Home" exists assert that element "res" exists end


Ser más humanamente legible que la mayoría fue uno de los primeros puntos de venta de Ada. En estos días, me parece un argumento tonto, ya que cualquier tarea suficientemente compleja en cualquier idioma requerirá la comprensión de un practicante competente. Sin embargo, supera al bejeezus en los lenguajes de sintaxis C. Sus estilos de codificación dominantes también pueden mejorar este efecto. Por ejemplo, comparando loops en una sentencia if: Ada:

if Time_To_Loop then for i in Some_Array loop Some_Array(i) := i; end loop; end if;

DO:

if (timeToLoop != 0) { for (int i=0;i<SOME_ARRAY_LENGTH;i++) { someArray[i] = i; } }

El código C se vería aún peor si utilizara la notación húngara como Microsoft, pero estoy tratando de ser amable. :-)



SQL

SELECT name, address FROM customers WHERE region = ''Europe''


COBOL se parece mucho a eso.

SET MYVAR TO 10. EXECUTE MYMETHOD with 10, MYVAR.

Otra muestra de Wikipedia:

ADD YEARS TO AGE. MULTIPLY PRICE BY QUANTITY GIVING COST. SUBTRACT DISCOUNT FROM COST GIVING FINAL-COST.

Por extraño que parezca, a pesar de que su diseño es legible como inglés, la mayoría de los programadores lo socavaron por completo con extrañas convenciones de nombres:

SET VAR_00_MYVAR_PIC99 TO 10. EXECUTE PROC_10_MYMETHOD with 10, VAR_00_MYVAR_PIC99.



Esta fue "la próxima gran cosa" alrededor de principios de los 80 y pasé gran parte de mi primer par de años trabajando como codificador en "NATURAL", que supuestamente era lo mejor de la nueva cosecha de 4GL (lenguajes de cuarta generación) que fueron diseñados para hacer que el acceso a los datos (en este caso a una base de datos ADABAS) sea legible por humanos.

Por supuesto, no hizo absolutamente nada del tipo. Todo lo que terminamos con el código detallado fue mal estructurado. Ambos productos todavía existen, pero nunca has oído hablar de ellos, lo que demuestra que fue un callejón sin salida.

De hecho, en ese período parecía haber un deseo general de ir más allá de la "programación" en algún tipo de paraíso de inteligencia artificial inspirado en 2001. Oracle estaba realmente interesado en la generación de código y recuerdo con cierto interés un producto llamado ''el último'' que se comercializaba a los gerentes como un producto que generaría automáticamente cualquier programa que quisiera y haría redundante a todo su personal de programación. Parece que no ha estado a la altura de las expectativas ;-)

Vale la pena recordar que SQL se comercializó originalmente en algunos sectores como una forma de permitir a la administración consultar directamente sus datos. Incluso me enviaron a un curso para aprender SQL básico (en una gran organización nacional de transporte que funcionaba con rieles, la variedad de acero) donde se incluían tipos de gestión junior porque tenían planes de poner herramientas básicas de consulta en sus manos. Eso fue un desastre.

Tal vez podría ser diferente en 50 años, pero en la etapa actual de juego la codificación exige una cierta claridad de pensamiento e implementación que es mejor mediada a través de una sintaxis dedicada diseñada para esos fines, no cualquier aproximación a un lenguaje natural que no es claro y ambiguo . La aproximación más cercana es, posiblemente, la física, donde la esencia del tema está en las matemáticas utilizadas (piense en un lenguaje de programación para la física), no en el verbo detallado.

ADICIONAL

Me estaba olvidando, además de COBOL, también había PL / 1, que a veces se le atribuye haber permitido que la NASA pusiera a un hombre en la luna, era tan prolijo como COBOL e intentó aún más ser ''legible por el gerente''. Por eso, nadie ha oído hablar de él ahora tampoco :-)


Veo que el lenguaje de programación de Shakespeare aún no se ha mencionado.

Estos programas están codificados para que parezcan obras de Shakespear, los personajes individuales de la obra son variables que pueden contener números y las diversas frases de la obra manipulan los personajes y el número que tienen. Por ejemplo, "Habla tu mente" ordena a un personaje que muestre su valor.


GradStudent

Solo tiene una declaración: "tú, escríbeme un programa para hacer x"
Es válido para todos los valores de X y tiene la ventaja de que x no tiene que definirse y puede modificarse después de que se haya escrito el programa.

Un dialecto comercial está disponible llamado interno: el costo de desarrollo es menor pero no se garantiza que funcione


Interesante pregunta. Su pregunta puede leerse como " ¿Hay algún lenguaje de programación que los humanos puedan leer fácilmente ?", O BIEN, como " ¿Existe algún lenguaje humano que pueda usarse para la programación ?". Todas las respuestas aquí se han centrado en la primera, así que déjame intentar responder a la última.

¿Has oído hablar del sánscrito? Es un antiguo idioma indio en el que se basan las lenguas indias modernas como el hindi.

wiki / sánscrito

He estado escuchando durante años que es lo suficientemente preciso y completo como para ser utilizado, como lo es, como un lenguaje de alto nivel en una computadora. Por supuesto, necesita un compilador para convertir las instrucciones en sánscrito al lenguaje de máquina. Conozco el guión y sí, es preciso (es completamente fonético, así que nunca tienes que preguntar "cómo deletreas eso"), pero no conozco lo suficiente a la gramática.

Esto es completamente anecdótico, así que no respondo por la precisión de esto. Solo quería compartir lo que sé sobre esto. :-)


Todos los idiomas son ''legibles por humanos''. :) ¿De qué otra forma alguien podría crearlo? Dicho esto, los lenguajes que admiten DSL pueden ser increíblemente intuitivos, como Boo .


¿Qué tal LOLCODE ?

HAI CAN HAS STDIO? VISIBLE "HAI WORLD!" KTHXBYE

Simplicidad en sí!


Applescript :

tell application "Finder" set the percent_free to ¬ (((the free space of the startup disk) / (the capacity of the startup disk)) * 100) div 1 end tell if the percent_free is less than 10 then tell application (path to frontmost application as text) display dialog "The startup disk has only " & the percent_free & ¬ " percent of its capacity available." & return & return & ¬ "Should this script continue?" with icon 1 end tell end if


Inform 7 es el sistema más exitoso que he visto. Tiene dos ventajas sobre los sistemas más crudos enumerados en otras respuestas aquí: es para un dominio particularmente apropiado para el lenguaje natural (ficción interactiva), y hace un análisis más elaborado del código de entrada basado en más conocimientos de lingüística computacional, no solo un convencional gramática del lenguaje de programación que usa palabras en inglés en lugar de llaves, etc.


Informar 7

Informar 7 es quizás el lenguaje que creo que está diseñado más apropiadamente en una forma de lenguaje humano. Es bastante específico de la aplicación para escribir juegos de aventuras.

Se basa en la semántica basada en reglas, donde se escriben muchas reglas que describen la relación entre los objetos y su ubicación. Por ejemplo, la siguiente sección es un programa de Inform 7:

"Hello Deductible" by "I.F. Author" The story headline is "An Interactive Example". The Living Room is a room. "A comfortably furnished living room." The Kitchen is north of the Living Room. The Front Door is south of the Living Room. The Front Door is a door. The Front Door is closed and locked. The insurance salesman is a man in the Living Room. The description is "An insurance salesman in a tacky polyester suit. He seems eager to speak to you." Understand "man" as the insurance salesman. A briefcase is carried by the insurance salesman. The description is "A slightly worn, black briefcase." Understand "case" as the briefcase. The insurance paperwork is in the briefcase. The description is "Page after page of small legalese." Understand "papers" or "documents" or "forms" as the paperwork. Instead of listening to the insurance salesman: say "The salesman bores you with a discussion of life insurance policies. From his briefcase he pulls some paperwork which he hands to you."; move the insurance paperwork to the player.

Ejemplo citado de Wikipedia