Problema:
Genere una oración que pueda leerse y entenderse. Debe contener un sujeto, verbo y objeto, y los tiempos verbales y plurales deben coincidir. El programa también debe ser capaz de generar varias oraciones diferentes para calificar.
Reglas:
- No está permitido codificar las oraciones, y tampoco leerlas directamente de un archivo (te estoy mirando, sin carne)
- Puedes tener cualquier cantidad de listas de palabras
- Envíe una oración de ejemplo o 2 que haya generado su programa
- Cualquier idioma es aceptado
- Es un concurso de popularidad , por lo que gana la respuesta más votada
popularity-contest
TheDoctor
fuente
fuente
[Adjective] [pl. noun] [verb] [adjective] [pl. noun]
y que extraiga de un diccionario real (tal vez usando una de las API de diccionario disponibles) para completar los espacios en blanco? ¡Lo escribiría yo mismo si tuviera unos minutos de sobra! :( Después de todo ...Lazy Developers Write Lousy Programs.
Respuestas:
Golpetazo
Requisitos: fuente del kernel de Linux instalada en / usr / src
Esto extrae comentarios aleatorios de la fuente del núcleo. Si las oraciones son realmente comprensibles está abierto a debate.
Ejemplos de salida real:
end of packet for rx
I don't know what to do
256 byte packet data buffer.
The rest of this junk is to help gdb figure out what goes where
Convert page list back to physical addresses, what a mess.
???
Only Sun can take such nice parts and fuck up the programming interface
fuente
fortune
base de datos oficial .Slave Overflow
. buen nombre para un sitio web de SEMatlab
ejemplo de salidas:
[Este es uno de los huevos de Pascua de Matlab]
EDITAR: puede ver el código de esta función aquí: why.m
fuente
PHP
Con suficiente tiempo, esto producirá toda la literatura, pasada, presente y futura. Las reglas no mencionaron que no se puede producir ningún otro texto.
La cadena
'TOS...'
proporciona una frecuencia de escala logarítmica de las letras para que coincida más estrechamente con el inglés. Esto se utiliza para generar una cadena más grande con las frecuencias de letras relativas aproximadas.Al ejecutarlo, he descubierto gemas literarias como:
GO NOW
- Usted como sujeto está implícito.IM AOK
- Estoy bienIM FDR
- Soy F (ranklin) D (eleano) R (oosevelt)Además, numerosas invectivas para expresar de manera concisa el descontento con la situación actual. [Algunas cartas redactadas]
F**K
S**T
Además, lo siguiente usando la escala ajustada:
IS IT ON
I AM STU
I SEE HTML
fuente
F**K
yS**T
siempre que no exista*
en'ABCDEFGHIJKMLNOPQRSTUVWXYZ '
?'TOS...'
cadena representa la frecuencia de cada letra en una escala logarítmica. EntoncesA
tiene frecuenciaT
,B
tiene frecuenciaO
.J
tiene la frecuencia más bajaA
que se traduce en 0, de los cuales el registro inverso es 1. El último carácter es el espacio, que tiene frecuenciaZ
, o redondo (exp (25 / 3.976)) = 538, por lo que los espacios ocurren 538 veces más a menudo queJ
. Solo pensé que le daba un giro especial al problema de la máquina de escribir .C
Salida de ejemplo:
También hay muchas oraciones válidas que no tienen un sujeto, verbo y objeto:
fuente
--i
evalúa como falsa cuandoi
(una variable de tipochar
con valor inicial 0) llega a 0 nuevamente. Sichar
no está firmado (por ejemplo, ARM), sei
ajustará inmediatamente a su valor más grande (típicamente 255) y contará hasta 0. Sichar
está firmado (la mayoría de los sistemas Intel) el comportamiento es estrictamente indefinido, pero generalmente una vez que alcanza su valor mínimo ( típicamente -128) se ajustará a su máximo (típicamente 127) y contará hasta 0. Entonces el programa típicamente imprimirá 256 líneas en total.Java
Extrae la oración de introducción de un artículo aleatorio de Wikipedia:
A veces tienes mala suerte; Intento minimizar esto estableciendo una longitud mínima de oración y filtrando las oraciones que terminan con ":" (todas las páginas de desambiguación comienzan de esa manera) o contienen un "?" (Parece que hay muchos artículos con información desconocida no resuelta marcada con signos de interrogación). Los límites de las oraciones son un período seguido de espacios en blanco seguidos de un número o letra mayúscula.
También filtro el texto entre paréntesis (el resultado sigue siendo una oración válida) para intentar eliminar algunos puntos que no son límites de oración. Filtraré llaves cuadradas para eliminar los números de citas de origen. Ejemplos:
Si nota algún problema de gramática, ¡es su culpa por no ser un editor diligente de Wikipedia! ;-)
fuente
Soooo ... Dado que este es un concurso de popularidad , me divertí un poco con
eval
y con las funciones. Básicamente, genero un número aleatorio y luego ejecuto una función aleatoria basada en ese número (en su caraswitch
,!) A través deeval
.PHP, ~ 9k salidas válidas
Algunas salidas ...
fuente
PHP_EOL
solo es igual\n
o\r\n
, dependiendo del sistema operativo, pero nunca<br>
o similar.PHP + Proyecto Gutenberg
Escribí un script PHP que convierte un documento de texto plano en un conjunto de bigrams de palabras , que luego usa para generar oraciones aleatorias. Estos son algunos de los mejores ejemplos que generó a partir de la versión en texto plano del discurso "Give Me Liberty Or Give Me Death" de Patrick Henry , incluida la letra pequeña del Proyecto Gutenberg:
Puedes probarlo tú mismo aquí. Actualice la página para un nuevo lote de oraciones.
Si desea ejecutar el código fuente usted mismo, no olvide cargar
$src_text
con el texto sin formato elegido.fuente
But for me, death!
: DI deseo que todas las licencias / acuerdos terminen tan fuertemente.Pitón
Esta entrada selecciona palabras de todo el diccionario del sistema. Aprovecha el hecho de que puedes convertir la mayoría de los sustantivos en verbos y viceversa. Utiliza algunas heurísticas para clasificar palabras y evitar imposibilidades obvias.
Produce algunas declaraciones casi sensatas:
Muchos locos:
Y muchas cosas que suenan a Monty Python haciendo insinuaciones lascivas:
La versión 3 se ha modificado para tomar cualquier archivo de texto como entrada:
Código (versión 3) :
fuente
cat FILE | COMMAND
? UUOC ;)This smoke toasted some nonresidents.
. WOAH.Golpetazo
Inspirado por la respuesta de Matlab. Asume que has
aptitude
instalado.Posibles resultados (captura de pantalla de este artículo de Wikipedia)
fuente
. /----\ -------/ \ / \ / | -----------------/ --------\ ----------------------------------------------
sea una oración válida.you win
puede ser una oración (el objeto "el argumento" está implícito). E incluso si no lo es, la pregunta no prohíbe los casos en que la salida no sea válida.Pitón:
Muestras:
Desafortunadamente, tiene un manejo deficiente de la puntuación y la capitalización, pero, de nuevo, esos no se enumeraron como requisitos.
Además, aquí hay una referencia.
fuente
' '.join(l)
. Eso eliminará el espacio posterior. Luego puede agregar un punto.print " ".join(takewhile(lambda _: randint(0, 5), repeat("buffalo"))).capitalize() + "."
Moho + Toki Pona
Se acepta cualquier idioma, así que escribí un programa en Rust que genera algunas oraciones en Toki Pona .
Toki Pona es un intento de crear un lenguaje natural mínimo, y tiene una gramática súper simple y regular. ¡Esa es una propiedad muy útil para este concurso!
No hablo Toki Pona, pero encontré la sintaxis de Toki Pona como un conjunto de reglas de BNF en Wikipedia. Creé una estructura o enumeración para cada regla BNF, y las anoté con
deriving(Rand)
, lo que me da una forma de generar unaPhrase
estructura aleatoria de forma gratuita. Luego, implementéToStr
para cada una de estas estructuras para convertirlas en una cadena.Intencionalmente dejé los nombres de las estructuras en francés, porque las reglas de BNF que encontré están en francés, ¡y también porque refuerza la naturaleza multilingüe de mi presentación!
Resultados de muestra
Algunas salidas y sus traducciones, que hice en base a las reglas de BNF y un diccionario Toki Pona . Estoy seguro de que estas traducciones son en su mayoría incorrectas, pero Toki Pona en realidad deja mucho espacio para la interpretación de una oración.
Durante mi viaje, alguien contaminó
El trasero está sucio y es una mala persona graciosa
Moviste la fruta y el centro al universo amarillo
Cuestiones
fuente
Pitón
fuente
import antigravity
conduce a la salidaI LEARNED IT LAST NIGHT! EVERYTHING IS SO SIMPLE!
? : DPrólogo
Use el backtracking del prólogo y una gramática generativa que se aproxima a la gramática inglesa para generar todas las oraciones posibles.
Esta versión tiene un vocabulario y una estructura de oraciones bastante limitados, pero debería ser bastante fácil de ampliar.
El código:
Ejecute esta consulta:
para generar todas las oraciones posibles en este idioma.
Algunas salidas de muestra:
(EDITAR: Permitir objetos subordinados cláusulas).
fuente
Pitón
Como sabes, puedes hacer cualquier cosa en Python con pocos
import
s. Esta tarea simple se puede lograr con este script python de 2 líneas.La cantidad de oraciones generadas por este script es enorme:
10^12
diferentes oraciones. Si leer una sentencia te lleva ~ 0.5 segundos, ¡leerlas todas llevará más de 15000 años!Algunas oraciones de muestra:
I like the number 0.444371877853
I like the number 0.358614422548
Sin embargo, todas las oraciones generadas contienen un sujeto, un verbo y un objeto.
ACTUALIZAR:
Recibí algunas críticas sobre algunas palabras sofisticadas que esta herramienta compleja puede producir. Aquí hay una versión un poco más larga que debe estar de acuerdo con la mayoría de las listas de palabras.
Aquí hay algunas oraciones de muestra:
I like the number zero point six three five nine zero eight one five eight four two four.
I like the number zero point four nine zero eight four four three two zero six two seven.
fuente
Jugando con el diccionario interno de Mathematica:
Tienes suerte, digamos, el 70% del tiempo. Genera cosas como:
pero a veces:
Bueno, su uso del inglés es mejor que el mío.
fuente
VBA / Excel
[editar 2]
Le enseñé cómo conjugar verbos, los ejemplos a continuación son simples en pasado:
El código relevante sigue, excluyendo un montón de aburridas funciones auxiliares de análisis y bucle. Las partes principales que faltan son las diversas listas de palabras (por partes del discurso) que hacen la pluralización, tiempos verbales, conjugaciones, etc.
Todas las raíces de las palabras se seleccionan al azar, pero las obligo a organizarlas en un patrón de oración en particular:
... que es lo que solía generar la salida anterior. Sigue la forma general de, "El rápido zorro rojo saltó sobre el perezoso perro marrón".
[comenzar publicación original]
Aún es un trabajo en progreso, es necesario agregar lógica para tiempos verbales y pluralización de sustantivo / verbo, a saber:
... que se puede analizar, pero no tiene mucho sentido.
Derecha. No es realmente una oración, pero es mejor que algunos mensajes de error de JavaScript.
La rutina de insinuaciones es casi de primera categoría aunque ...
Código para seguir anon. ¿Este concurso tiene una fecha límite?
[editar 1]
Código que generó lo anterior.
fuente
Perl 5
OK, las entrañas del programa son solo esto:
Básicamente es un motor "madlib". Para generar oraciones interesantes, debe completar
%pad
algunos datos. Aquí hay un ejemplo%pad
...Aquí hay algunas muestras de la sabiduría que descubrí de eso
%pad
. Estas oraciones no han sido editadas por longitud, puntuación, gramática, etc., aunque he seleccionado algunas que no son interesantes y he reorganizado el orden en que aparecen las oraciones: ya no están en el orden en que se generaron, sino que estoy tratando de úselos para contar una historia: una historia que espero que encuentre conmovedora y estimulante.fuente
MS Word
No estoy seguro de si esto es aceptable, pero como html lo es, creo que también debería ser aceptable.
Ejemplos de oraciones:
También puede especificar cualquier número de oraciones y párrafos.
fuente
Un trabajo en progreso usando JSoup y simpleNLG
Cuestiones:
Resultados de muestra:
fuente
PHP
Esto busca las 30 búsquedas de Google más populares, realiza una búsqueda "Me siento afortunado" y luego muestra una oración aleatoria de esa página con al menos 3 palabras.
Ejemplos:
"Fue considerada una medalla favorita en el evento".
"Kate se graduó de la escuela secundaria un año antes".
"15 de abril de 2014, para promover el cumplimiento de la política sobre biografías de personas vivas".
"En nombre de Bryan, nosotros, su familia, queremos agradecer a todos por la efusión de amor, oraciones y apoyo".
"Este artículo es sobre el jugador de baloncesto estadounidense".
"Lo sentimos, su navegador tiene JavaScript deshabilitado o no tiene ningún reproductor compatible".
fuente
Python 2.7
salida:
fuente
/q/21571
lugar de/questions/21571/generate-an-understandable-sentence
).Shell Scripting
Este script siempre mostrará el título de la primera pregunta que se encuentra actualmente en la parte superior de este sitio. Mi suposición es que el título de la pregunta siempre será legible para los humanos. Y cambiará dinámicamente. Entonces, cada vez que surge una nueva pregunta y cuando se ejecuta el script, le dará el título de la última pregunta.
Prueba 1 salida
Prueba 2 de salida
EDITAR
No estoy usando ningún archivo. Sin archivos, puedo usar el siguiente script.
Salida
fuente
JavaScript (ES6)
Ejecutarlo en la consola produce
fuente
t='';for(f of [_=>foo,_=>null.a,_=>0..toString(0)])try{f()}catch(e){t+=e.message+'\n'}t
Otro script de Python
La respuesta de user3058846 no es mala, pero muestra todas las oraciones, siempre. Aquí, propongo un script que genera una oración aleatoria del Zen de Python :
En una línea, para los fanáticos del golf de código :
(Boooh, sucio)
Ejemplos:
Otra forma divertida en Python
Gracias a @TheDoctor vierta la idea :-) Silencie la salida de importación y luego juegue con el dict seudo-encriptado en el módulo.
fuente
shell=True
. Aunque no es inseguro en este caso, ya que no está tomando la entrada del usuario, optaría porsubprocess.Popen(('python', '-c', 'import this'))
.import this
, hay una variable en el módulothis
que contiene todo el texto, pero encriptada? También hay un diccionario para descifrarlo.Python 3
¡Garantizado para generar resultados gramaticales! (Generalmente.)
Para hacerlo perfectamente gramatical, elimine el guión bajo de
wordregex
. Esto no permitirá las entradas de varias palabras que conducen a oraciones incorrectas como "Te damos la vuelta".Ejecución de muestra:
Salida favorita hasta ahora:
Búscalo: http://en.wiktionary.org/wiki/you#Verb .
fuente
Pitón
Resultado:
Usé la lista de palabras de aquí. Encuentra palabras que contengan todas las vocales.
Se pueden agregar algunas reglas más. Por ejemplo, si una palabra que termina con "ness" y la palabra también existe en conjunto sin el sufijo, entonces es un sustantivo.
Código fuente:
fuente
Golpetazo
Intentar ejecutar un programa que existe pero que no está instalado da esto (en Linux Mint 13).
fuente
Python 3
Otra versión de The Zen of Python , inspirada en la respuesta de Maxime .
fuente
fuente