Problème:
Générez une phrase lisible et compréhensible. Il doit contenir un sujet, un verbe et un objet, et les temps et les pluriels doivent correspondre. Le programme doit également être capable de générer plusieurs phrases différentes pour être qualifié.
Règles:
- Il n'est pas permis de coder en dur les phrases, ni de les lire directement à partir d'un fichier (je vous regarde, je les enlève)
- Vous pouvez avoir n'importe quel nombre de listes de mots
- Soumettez un exemple de phrase ou 2 qui ont été générés par votre programme
- N'importe quelle langue est acceptée
- C'est un concours de popularité , donc la réponse la plus votée gagne
popularity-contest
Le docteur
la source
la source
[Adjective] [pl. noun] [verb] [adjective] [pl. noun]
un dictionnaire réel et extrait d'un vrai dictionnaire (peut-être en utilisant l'une des API de dictionnaire disponibles) pour compléter les blancs? J'écrirais moi-même si j'avais quelques minutes à perdre! :( Après tout ...Lazy Developers Write Lousy Programs.
Réponses:
Frapper
Configuration requise: la source du noyau Linux installée dans / usr / src
Cela extrait les commentaires aléatoires de la source du noyau. La question de savoir si les phrases sont réellement compréhensibles peut être débattue.
Exemples de résultats réels:
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
la source
fortune
base de données officielle .Slave Overflow
. beau nom pour un site Web SEMatlab
exemple de sorties:
[Ceci est l'un des oeufs de Pâques de Matlab]
EDIT: vous pouvez voir le code de cette fonction ici: why.m
la source
PHP
Avec suffisamment de temps, cela produira toute la littérature, passée, présente et future. Les règles ne mentionnaient pas qu'aucun autre texte ne pouvait être produit.
La chaîne
'TOS...'
fournit une fréquence d'échelle logarithmique des lettres pour correspondre plus étroitement à l'anglais. Ceci est utilisé pour générer une chaîne plus grande avec les fréquences de lettre relatives approximatives.En l'exécutant, j'ai découvert des joyaux littéraires tels que:
GO NOW
- Vous en tant que sujet est impliqué.IM AOK
- Je suis OKIM FDR
- Je suis F (ranklin) D (eleano) R (oosevelt)En outre, de nombreuses invectives expriment de manière concise leur mécontentement face à la situation actuelle. [Quelques lettres expurgées.]
F**K
S**T
De même, les éléments suivants utilisent la mise à l’échelle affinée:
IS IT ON
I AM STU
I SEE HTML
la source
F**K
et àS**T
condition qu'il n'y ait pas d'*
entrée'ABCDEFGHIJKMLNOPQRSTUVWXYZ '
?'TOS...'
chaîne représente la fréquence de chaque lettre sur une échelle logarithmique. AinsiA
a la fréquenceT
,B
a la fréquenceO
.J
a la fréquence la plus basseA
qui se traduit par 0, dont le log inverse est 1. Le dernier caractère est l’espace, qui a une fréquenceZ
ou arrondi (exp (25 / 3,976)) = 538; les espaces sont donc 538 fois plus fréquents queJ
. Je pensais juste que cela mettait un point tournant au problème du problème des machines à écrire .C
Exemple de sortie:
Il y a aussi beaucoup de phrases valides en sortie qui n'ont pas de sujet, verbe et objet:
la source
--i
évaluée à false lorsquei
(une variable de typechar
avec la valeur initiale 0) atteint à nouveau 0. Sichar
non signé (par exemple, ARM),i
reviendra immédiatement à sa plus grande valeur (généralement 255) et décomptera jusqu'à 0. Sichar
est signé (la plupart des systèmes Intel), le comportement est à proprement parler non défini, mais généralement une fois qu'il atteint sa valeur minimale ( généralement -128), il encaissera au maximum (généralement 127) et comptera jusqu'à 0. Le programme imprimera donc en général 256 lignes au total.Java
Extrait la phrase d'introduction d'un article aléatoire de Wikipedia:
Parfois, vous obtenez malchanceux; J'essaie de minimiser cela en définissant une longueur de phrase minimale et en filtrant les phrases qui se terminent par ":" (toutes les pages d'homonymie commencent ainsi) ou qui contiennent un "?" (Il semble y avoir beaucoup d'articles avec des informations inconnues non résolues marquées par des points d'interrogation). Les limites de phrase sont une période suivie d'un espace suivi d'un chiffre ou d'une lettre majuscule.
Je filtre également le texte entre parenthèses (le résultat est toujours une phrase valide) pour essayer de supprimer certaines périodes qui ne sont pas des limites de phrase. Je filtre les accolades carrées pour supprimer les numéros de citation de la source. Exemples:
Si vous remarquez des problèmes de grammaire, c'est de votre faute si vous n'êtes pas un éditeur assidu de Wikipedia! ;-)
la source
Soooo ... Puisqu'il s'agit d'un concours de popularité , je me suis amusé avec
eval
et avec les fonctions. Fondamentalement, je génère un nombre aléatoire, puis exécute une fonction aléatoire basée sur ce nombre (sur votre visageswitch
,!) Viaeval
.PHP, ~ 9k sorties valides
Quelques sorties ...
la source
PHP_EOL
n'est jamais égal à\n
ou\r\n
, selon le système d'exploitation, mais jamais<br>
ou similaire.Projet PHP + Gutenberg
J'ai écrit un script PHP qui transforme un document en texte brut en un ensemble de mots bigrammes , qu'il utilise ensuite pour générer des phrases aléatoires. Voici quelques-uns des meilleurs exemples qu'il a générés à partir de la version intégrale du discours de Patrick Henry, "Give Me Liberty Or Give Me Death" , incluant les petits caractères du projet Gutenberg:
Vous pouvez l'essayer par vous-même ici. Actualisez la page pour un nouveau lot de phrases.
Si vous voulez exécuter le code source vous-même, n'oubliez pas de charger
$src_text
avec le texte brut que vous avez choisi.la source
But for me, death!
: Je souhaite que toutes les licences / accords soient terminés aussi fortement.Python
Cette entrée sélectionne les mots du dictionnaire du système entier. Il tire parti du fait que vous pouvez transformer la plupart des noms en verbes et inversement. Il utilise quelques heuristiques pour classifier les mots et éviter les impossibilités évidentes.
Il produit quelques déclarations presque saines:
Beaucoup d'aliénés:
Et beaucoup de choses qui ressemblent à Monty Python font des insinuations obscènes:
La version 3 a été modifiée pour prendre n'importe quel fichier texte en entrée:
Code (version 3) :
la source
cat FILE | COMMAND
? UUOC ;)This smoke toasted some nonresidents.
. WOAH.Frapper
Inspiré par la réponse Matlab. Suppose que vous avez
aptitude
installé.Résultats possibles (capture d'écran de cet article de Wikipédia)
la source
. /----\ -------/ \ / \ / | -----------------/ --------\ ----------------------------------------------
soit une phrase valide.you win
peut être une phrase (l'objet "l'argument" est impliqué). Et même si ce n'est pas le cas, la question n'interdit pas les cas où la sortie n'est pas valide.Python:
Échantillons:
Malheureusement, la ponctuation et la capitalisation sont gérées de manière quelque peu médiocre, mais là encore, elles ne figuraient pas parmi les exigences.
Aussi, voici une référence.
la source
' '.join(l)
. Cela va se débarrasser de l'espace de fuite. Vous pouvez alors simplement ajouter une période.print " ".join(takewhile(lambda _: randint(0, 5), repeat("buffalo"))).capitalize() + "."
Rouille + Toki Pona
Toutes les langues sont acceptées, j'ai donc écrit un programme en Rust qui génère des phrases en Toki Pona .
Toki Pona tente de créer un langage naturel minimal et possède une grammaire super simple et régulière. C'est une propriété très utile pour ce concours!
Je ne parle pas Toki Pona, mais j'ai trouvé la syntaxe de Toki Pona en tant qu'ensemble de règles BNF sur Wikipedia. J'ai créé une structure ou une énumération pour chaque règle BNF et je les ai annotées
deriving(Rand)
, ce qui me permet de générerPhrase
gratuitement une structure aléatoire ! Ensuite, j'ai implémentéToStr
pour chacune de ces structures pour les convertir en chaîne.J'ai intentionnellement laissé les noms de structures en français, parce que les règles BNF que j'ai trouvées sont en français, et aussi parce qu'elles renforcent le caractère multilingue de ma soumission!
Exemples de sorties
Certaines sorties et leurs traductions, basées sur les règles de la BNF et un dictionnaire Toki Pona . Je suis sûr que ces traductions sont généralement fausses, mais Toki Pona laisse beaucoup de place à l'interprétation d'une phrase.
Pendant mon voyage, quelqu'un a pollué
Le cul est sale et est une mauvaise personne drôle
Vous avez déplacé le fruit et le centre vers l'univers jaune
Problèmes
la source
Python
la source
import antigravity
mène à la sortieI LEARNED IT LAST NIGHT! EVERYTHING IS SO SIMPLE!
? : DProlog
Utilisez le retour arrière de prolog et une grammaire générative se rapprochant de la grammaire anglaise pour générer toutes les phrases possibles.
Cette version a un vocabulaire et une structure de phrase assez limités, mais elle devrait être assez facile à étendre.
Le code:
Exécutez cette requête:
générer toutes les phrases possibles dans cette langue.
Quelques exemples de sorties:
(EDIT: Autoriser les clauses subordonnées d'objet).
la source
Python
Comme vous le savez, vous pouvez tout faire en python avec quelques
import
s. Cette tâche simple peut être accomplie avec ce script python de 2 lignes.Le nombre de phrases générées par ce script est énorme:
10^12
différentes phrases. Si la lecture d'une phrase vous prend environ 0,5 seconde, sa lecture durera plus de 15 000 ans!Quelques exemples de phrases:
I like the number 0.444371877853
I like the number 0.358614422548
Pourtant, toutes les phrases générées contiennent un sujet, un verbe et un objet.
MISE À JOUR:
J'ai reçu des critiques sur certains mots sophistiqués que cet outil complexe pourrait produire. Voici une version légèrement plus longue qui devrait être en accord avec la plupart des listes de mots.
Voici quelques exemples de phrases:
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.
la source
Jouer avec le dictionnaire interne Mathematica:
Vous avez de la chance, par exemple, 70% du temps. Il génère des choses comme:
mais parfois:
Eh bien, son anglais est meilleur que le mien.
la source
VBA / Excel
[modifier 2]
L'ont appris à conjuguer des verbes, les exemples ci-dessous sont du passé simple:
Le code pertinent suit, à l’exclusion de nombreuses fonctions ennuyeuses d’analyse syntaxique et de bouclage. Les principales parties manquantes sont les différentes listes de mots (par parties du discours) qui font la pluralisation, les temps, les conjugaisons, etc.
Tous les mots racines sont choisis au hasard, mais je les force à être disposés dans un motif de phrase particulier:
... ce que j'ai utilisé pour générer la sortie ci-dessus. Il suit la forme générale de "Le renard roux rapide a sauté par-dessus le chien brun paresseux".
[commencer le post original]
Encore un travail en cours, besoin d’ajouter une logique pour les temps et la pluralisation nom / verbe, à savoir:
... ce qui est analysable, mais n'a pas beaucoup de sens.
Droite. Pas vraiment une phrase, mais mieux que certains messages d'erreur JavaScript.
La routine de sous-entendus est presque top tho 'tho' ...
Code à suivre bientôt. Ce concours a-t-il une date limite?
[modifier 1]
Code qui a généré ce qui précède.
la source
Perl 5
OK, le courage du programme est juste ceci:
C'est fondamentalement un moteur "madlib". Pour générer des phrases intéressantes, vous devez renseigner
%pad
certaines données. Voici un exemple%pad
...Voici quelques exemples de la sagesse que j'ai découverte grâce à cela
%pad
. Ces phrases n’ont pas été modifiées en termes de longueur, de ponctuation, de grammaire, etc., bien que j’aie choisi des phrases inintéressantes et que j’ai réarrangé l’ordre dans lequel elles apparaissent - elles ne sont plus dans l’ordre dans lequel elles ont été générées. utilisez-les pour raconter une histoire: une histoire, je l'espère, à la fois touchante et stimulante.la source
Ms Word
Je ne suis pas sûr que cela soit acceptable, mais comme le HTML l'est, je pense que cela devrait également être acceptable.
Exemples de phrases:
vous pouvez également spécifier un nombre quelconque de phrases et de paragraphes.
la source
Un travail en cours utilisant JSoup et simpleNLG
Problèmes:
Exemples de sortie:
la source
PHP
Cela récupère les 30 recherches Google les plus en vogue, effectue une recherche "Je me sens chanceux", puis affiche une phrase aléatoire de cette page avec au moins 3 mots.
Exemples:
"Elle a été considérée comme une favorite de la médaille dans cette épreuve."
"Kate a obtenu son diplôme d'études secondaires un an plus tôt."
"15 avril 2014, pour promouvoir le respect de la politique en matière de biographies de personnes vivantes."
"Au nom de Bryan, nous, sa famille, souhaitons remercier tout le monde pour le déversement d'amour, de prières et de soutien."
"Cet article concerne le basketteur américain."
"Désolé, JavaScript est désactivé ou aucun lecteur n'est pris en charge."
la source
Python 2.7
sortie:
la source
/q/21571
au lieu de/questions/21571/generate-an-understandable-sentence
).Shell Scripting
Ce script affichera toujours le titre de la première question actuellement placée en haut de ce site. Mon hypothèse est que le titre de la question sera toujours lisible par l'homme. Et cela changera dynamiquement. Ainsi, chaque fois qu'une nouvelle question arrive et que le script est exécuté, il donne le titre de la dernière question.
Essai 1 sortie
Essai 2 sortie
MODIFIER
Ne pas utiliser de fichiers. Sans fichiers, je peux utiliser le script ci-dessous.
Sortie
la source
JavaScript (ES6)
L'exécuter dans la console produit
la source
t='';for(f of [_=>foo,_=>null.a,_=>0..toString(0)])try{f()}catch(e){t+=e.message+'\n'}t
Encore un autre script Python
La réponse de user3058846 n'est pas mauvaise, mais elle affiche toutes les phrases, à chaque fois. Ici, je propose un script qui sort une phrase aléatoire du zen de Python :
En une ligne, pour les fans de code-golf :
(Boooh, sale.)
Exemples:
Une autre façon amusante en Python
Merci à @TheDoctor pour avoir eu l'idée :-) Mettez la sortie d'importation en mode silencieux, puis jouez avec le dict pseudo-crypté dans le module.
la source
shell=True
. Bien que ce ne soit pas un manque de sécurité dans ce cas, étant donné que vous ne prenez pas les entrées de l'utilisateur, j'opterais poursubprocess.Popen(('python', '-c', 'import this'))
.import this
, il y a une variable dans le modulethis
qui contient tout le texte, mais crypté. Il y a aussi un dictionnaire pour le déchiffrer.Python 3
Garanti de générer une sortie grammaticale! (Habituellement.)
Pour le rendre parfaitement grammatical, supprimez le trait de soulignement de
wordregex
. Cela interdira les entrées de plusieurs mots qui mènent à de mauvaises phrases telles que "Nous vous compressons."Échantillon échantillon:
Sortie préférée jusqu'à présent:
Recherchez-la: http://en.wiktionary.org/wiki/you#Verb .
la source
Python
Résultat:
J'ai utilisé la liste de mots à partir d'ici Trouver les mots contenant chaque voyelle
Quelques règles supplémentaires peuvent être ajoutées. Par exemple, si un mot se terminant par "ness" et que le mot existe également dans l'ensemble sans le suffixe, il s'agit d'un nom.
Code source:
la source
Frapper
Essayer d'exécuter un programme existant mais non installé donne ceci (dans Linux Mint 13).
la source
Python 3
Une autre prise au zen de Python , inspirée par la réponse de Maxime .
la source
la source