Problem:
Erzeugen Sie einen Satz, der gelesen und verstanden werden kann. Es muss ein Subjekt, ein Verb und ein Objekt enthalten, und Zeitformen und Pluralformen müssen übereinstimmen. Das Programm muss auch in der Lage sein, mehrere unterschiedliche Sätze zu generieren, um sich zu qualifizieren.
Regeln:
- Das Hardcodieren von Sätzen ist nicht erlaubt und es wird auch nicht direkt aus einer Datei gelesen (ich schaue dich an, unclemeat)
- Sie können beliebig viele Wortlisten anlegen
- Senden Sie einen Beispielsatz oder 2, die von Ihrem Programm generiert wurden
- Jede Sprache wird akzeptiert
- Es ist ein Beliebtheitswettbewerb , also gewinnt die am meisten bewertete Antwort
popularity-contest
Der Arzt
quelle
quelle
[Adjective] [pl. noun] [verb] [adjective] [pl. noun]
und aus einem echten Wörterbuch stammt (möglicherweise mit einer der verfügbaren Wörterbuch-APIs), um die Lücken zu füllen? Ich würde es selbst schreiben, wenn ich ein paar Minuten Zeit hätte! :( Immerhin ...Lazy Developers Write Lousy Programs.
Antworten:
Bash
Anforderungen: Linux-Kernel-Quelle in / usr / src installiert
Dadurch werden zufällige Kommentare aus der Kernelquelle entfernt. Ob die Sätze tatsächlich verständlich sind, ist umstritten.
Beispiele für die tatsächliche Ausgabe:
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
quelle
fortune
Datenbank einreichen .Slave Overflow
. schöner Name für eine SE-WebsiteMatlab
Beispiel für Ausgänge:
[Dies ist eines von Matlabs Ostereiern]
BEARBEITEN: Sie können den Code dieser Funktion hier sehen: why.m
quelle
PHP
Wenn genügend Zeit zur Verfügung steht, wird daraus die gesamte Literatur der Vergangenheit, Gegenwart und Zukunft hervorgehen. In den Regeln wurde nicht erwähnt, dass kein anderer Text erstellt werden darf.
Die Zeichenfolge
'TOS...'
bietet eine logarithmische Häufigkeit der Buchstaben, um die Übereinstimmung mit Englisch zu verbessern. Dies wird verwendet, um eine größere Zeichenfolge mit den ungefähren relativen Buchstabenfrequenzen zu generieren.Ich habe dabei solche literarischen Schätze entdeckt, wie:
GO NOW
- Sie als Subjekt sind impliziert.IM AOK
- Mir geht es gutIM FDR
- Ich bin F (ranklin) D (eleano) R (oosevelt)Außerdem gibt es zahlreiche Anreize, um das Missfallen über die aktuelle Situation kurz auszudrücken. [Einige Briefe redigiert.]
F**K
S**T
Folgendes unter Verwendung der fein abgestimmten Skalierung:
IS IT ON
I AM STU
I SEE HTML
quelle
F**K
undS**T
vorausgesetzt, es ist kein*
Eintrag vorhanden'ABCDEFGHIJKMLNOPQRSTUVWXYZ '
?'TOS...'
Zeichenfolge repräsentiert die Häufigkeit jedes Buchstabens in einer logarithmischen Skala. AlsoA
hat FrequenzT
,B
hat FrequenzO
.J
hat die niedrigste Frequenz,A
die sich zu 0 übersetzt, wovon das inverse Protokoll 1 ist. Das letzte Zeichen ist das Leerzeichen mit der FrequenzZ
oder rund (exp (25 / 3.976)) = 538, daher kommen Leerzeichen 538-mal häufiger vor alsJ
. Ich dachte nur, es würde das Affen-bei-einer-Schreibmaschine- Problem ordentlich lösen.C
Beispielausgabe:
Es gibt auch viele gültige Sätze ohne Subjekt, Verb und Objekt:
quelle
--i
als falsch ausgewertet, wenni
(eine Variable vom Typchar
mit dem Anfangswert 0) wieder 0 erreicht. Wennchar
es nicht signiert ist (z. B. ARM),i
wird sofort auf den größten Wert (normalerweise 255) gewickelt und bis 0 heruntergezählt. Wennchar
es signiert ist (die meisten Intel-Systeme), ist das Verhalten streng undefiniert, aber normalerweise, sobald es den Mindestwert erreicht ( In der Regel -128) wird bis zum Maximum gewickelt (in der Regel 127) und bis auf 0 heruntergezählt. Das Programm gibt also in der Regel insgesamt 256 Zeilen aus.Java
Zieht den Intro-Satz aus einem zufälligen Wikipedia-Artikel:
Manchmal hat man Pech; Ich versuche dies zu minimieren, indem ich eine minimale Satzlänge einstelle und Sätze herausfiltere, die mit ":" enden (alle Disambiguierungsseiten beginnen auf diese Weise) oder ein "?" (Es scheint viele Artikel mit ungelösten unbekannten Informationen zu geben, die mit Fragezeichen markiert sind). Satzgrenzen sind ein Punkt, gefolgt von einem Leerzeichen, gefolgt von einer Zahl oder einem Großbuchstaben.
Ich filtere auch Text in Klammern heraus (das Ergebnis ist immer noch ein gültiger Satz), um zu versuchen, einige Punkte zu entfernen, die keine Satzgrenzen sind. Ich filtere eckige Klammern heraus, um Quellenzitierungsnummern zu entfernen. Beispiele:
Wenn Sie Grammatikprobleme bemerken, liegt das daran, dass Sie kein sorgfältiger Wikipedia-Editor sind! ;-)
quelle
Soooo ... Da dies ein Beliebtheitswettbewerb ist , hatte ich ein bisschen Spaß mit
eval
und mit Funktionen. Grundsätzlich generiere ich eine Zufallszahl und führe dann eine auf dieser Zahl basierende Zufallsfunktion (in deinem Gesichtswitch
,!) Über auseval
.PHP, ~ 9k gültige Ausgaben
Einige Ausgänge ...
quelle
PHP_EOL
ist immer nur gleich\n
oder\r\n
, je nach Betriebssystem, aber nie<br>
oder ähnlich.PHP + Projekt Gutenberg
Ich habe ein PHP-Skript geschrieben, das ein einfaches Textdokument in eine Reihe von Wort-Bigrammen umwandelt , aus denen dann zufällige Sätze generiert werden. Hier sind einige der besseren Beispiele, die aus der gesamten Klartextversion von Patrick Henrys Rede "Gib mir Freiheit oder gib mir den Tod" stammen , einschließlich des Kleingedruckten des Projekts Gutenberg:
Hier können Sie es selbst ausprobieren. Aktualisieren Sie die Seite für einen neuen Satzstapel.
Wenn Sie den Quellcode selbst ausführen möchten, vergessen Sie nicht, den
$src_text
von Ihnen gewählten Klartext zu laden .quelle
But for me, death!
: D Ich wünsche, dass alle Lizenzen / Vereinbarungen so stark beendet werden.Python
Dieser Eintrag wählt Wörter aus dem gesamten Systemwörterbuch aus. Es nutzt die Tatsache aus, dass Sie die meisten Substantive in Verben umwandeln können und umgekehrt. Es werden einige Heuristiken verwendet, um Wörter zu klassifizieren und offensichtliche Unmöglichkeiten zu vermeiden.
Daraus ergeben sich einige beinahe vernünftige Aussagen:
Viele verrückte:
Und viele Sachen, die so klingen, als würde Monty Python unzüchtige Anspielungen machen:
Version 3 wurde so geändert, dass eine beliebige Textdatei als Eingabe verwendet wird:
Code (Version 3) :
quelle
cat FILE | COMMAND
? UUOC ;)This smoke toasted some nonresidents.
. WOAH.Bash
Inspiriert von der Matlab-Antwort. Angenommen, Sie haben
aptitude
installiert.Mögliche Ausgaben (Screenshot aus diesem Wikipedia-Artikel)
quelle
. /----\ -------/ \ / \ / | -----------------/ --------\ ----------------------------------------------
es ein gültiger Satz ist.you win
kann ein Satz sein (das Objekt "das Argument" ist impliziert). Und selbst wenn nicht, verbietet die Frage nicht Fälle, in denen die Ausgabe ungültig ist.Python:
Proben:
Leider ist der Umgang mit Zeichensetzung und Großschreibung etwas mangelhaft, aber andererseits wurden diese nicht als Anforderungen aufgeführt.
Auch hier ist ein Hinweis.
quelle
' '.join(l)
. Das wird den abschließenden Raum loswerden. Sie können dann einfach einen Punkt anhängen.print " ".join(takewhile(lambda _: randint(0, 5), repeat("buffalo"))).capitalize() + "."
Rust + Toki Pona
Da jede Sprache akzeptiert wird, habe ich ein Programm in Rust geschrieben , das einige Sätze in Toki Pona erzeugt .
Toki Pona ist ein Versuch, eine minimale natürliche Sprache zu erschaffen, und es hat eine super einfache und regelmäßige Grammatik. Das ist eine sehr nützliche Eigenschaft für diesen Wettbewerb!
Ich spreche kein Toki Pona, aber ich habe die Syntax von Toki Pona als Satz von BNF-Regeln in Wikipedia gefunden. Ich habe für jede BNF-Regel eine Struktur oder eine Aufzählung erstellt und diese mit Anmerkungen versehen
deriving(Rand)
, sodass ich einePhrase
kostenlose Zufallsstruktur generieren kann ! Dann habe ichToStr
für jede dieser Strukturen implementiert, um sie in eine Zeichenfolge zu konvertieren.Ich habe die Strukturnamen absichtlich auf Französisch belassen, weil die BNF-Regeln, die ich gefunden habe, auf Französisch sind und auch, weil sie die Mehrsprachigkeit meines Beitrags wieder in den Vordergrund rücken!
Beispielausgaben
Einige Ausgaben und ihre Übersetzungen, die ich basierend auf den BNF-Regeln und einem Toki Pona-Wörterbuch gemacht habe . Ich bin mir sicher, dass diese Übersetzungen größtenteils falsch sind, aber Toki Pona lässt tatsächlich viel Raum für die Interpretation eines Satzes.
Während meiner Reise verschmutzte jemand
Der Hintern ist schmutzig und ist eine lustige schlechte Person
Sie haben die Frucht und das Zentrum in das gelbe Universum versetzt
Probleme
quelle
Python
quelle
import antigravity
zur Ausgabe führtI LEARNED IT LAST NIGHT! EVERYTHING IS SO SIMPLE!
? : DProlog
Verwenden Sie das Backtracking von Prolog und eine generative Grammatik, die der englischen Grammatik nahekommt, um alle möglichen Sätze zu generieren .
Diese Version hat eine ziemlich begrenzte Vokabular- und Satzstruktur, sollte aber ziemlich einfach zu erweitern sein.
Der Code:
Führen Sie diese Abfrage aus:
alle möglichen Sätze in dieser Sprache zu generieren.
Einige Beispielausgaben:
(EDIT: Erlaube Objekt-Nebensätze).
quelle
Python
Wie Sie wissen, können Sie in Python mit wenigen
import
s alles tun . Diese einfache Aufgabe kann mit diesem zweizeiligen Python-Skript erledigt werden.Die Anzahl der Sätze, die von diesem Skript generiert werden, ist recht groß:
10^12
verschiedene Sätze. Wenn das Lesen einer Sitzung ca. 0,5 Sekunden dauert, dauert das Lesen aller Sätze mehr als 15000 Jahre!Einige Beispielsätze:
I like the number 0.444371877853
I like the number 0.358614422548
Alle erzeugten Sätze enthalten jedoch ein Subjekt, ein Verb und ein Objekt.
AKTUALISIEREN:
Ich erhielt einige Kritiken über einige raffinierte Wörter, die dieses komplexe Werkzeug hervorbringen könnte. Hier ist eine etwas längere Version, die mit den meisten Wortlisten übereinstimmen sollte.
Hier sind einige Beispielsätze:
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.
quelle
Spielen mit dem internen Mathematica-Wörterbuch:
Sie haben Glück, sagen wir 70% der Zeit. Es erzeugt Dinge wie:
aber manchmal:
Na ja, es spricht besser Englisch als ich.
quelle
VBA / Excel
[edit 2]
Haben gelernt, wie man Verben konjugiert. Die folgenden Beispiele sind einfache Vergangenheitsform:
Es folgt der entsprechende Code, mit Ausnahme einiger langweiliger Hilfsparsing- und Schleifenfunktionen. Die Hauptteile, die fehlen, sind die verschiedenen Wortlisten (nach Teilen der Sprache), die Pluralisierung, Zeitformen, Konjugationen usw. ausführen.
Alle Wortwurzeln werden zufällig ausgewählt, aber ich zwinge sie, in einem bestimmten Satzmuster angeordnet zu werden:
... das ist, was ich verwendet habe, um die Ausgabe oben zu erzeugen. Es folgt die allgemeine Form von "Der schnelle Rotfuchs sprang über den faulen braunen Hund."
[ursprünglicher Beitrag beginnen]
Noch in Arbeit, muss Logik für Zeiten und Substantiv / Verb-Pluralisierung hinzugefügt werden, nämlich:
... was syntaktisch analysiert werden kann, aber wenig Sinn ergibt.
Richtig. Nicht wirklich ein Satz, aber besser als einige JavaScript-Fehlermeldungen.
Die Anspielung Routine ist fast erstklassig, obwohl ...
Code, um anon zu folgen. Hat dieser Wettbewerb eine Deadline?
[edit 1]
Code, der das oben Genannte generiert hat.
quelle
Perl 5
OK, der Mut des Programms ist genau das:
Es ist im Grunde ein "madlib" Motor. Um tatsächlich interessante Sätze zu generieren, müssen Sie
%pad
einige Daten eingeben. Hier ist ein Beispiel%pad
...Hier sind einige Beispiele der Weisheit, die ich daraus entdeckt habe
%pad
. Diese Sätze wurden nicht nach Länge, Interpunktion, Grammatik usw. bearbeitet, obwohl ich einige uninteressante herausgesucht und die Reihenfolge, in der die Sätze erscheinen, neu geordnet habe - sie sind nicht mehr in der Reihenfolge, in der sie erzeugt wurden, sondern ich versuche es Verwenden Sie sie, um eine Geschichte zu erzählen: eine Geschichte, die Sie hoffentlich sowohl berühren als auch zum Nachdenken anregen wird.quelle
Frau Word
Ich bin nicht sicher, ob dies akzeptabel ist, aber da HTML dies ist, denke ich, sollte dies auch akzeptabel sein.
Beispielsätze:
Sie können auch eine beliebige Anzahl von Sätzen und Absätzen angeben.
quelle
Eine laufende Arbeit mit JSoup und simpleNLG
Probleme:
Beispielausgaben:
quelle
PHP
Hiermit werden die 30 am häufigsten verwendeten Google-Suchanfragen abgerufen, eine Suche nach "Ich fühle mich glücklich" durchgeführt und anschließend ein zufälliger Satz von dieser Seite mit mindestens 3 Wörtern angezeigt.
Beispiele:
"Sie wurde als Medaillenfavoritin der Veranstaltung angesehen."
"Kate hat die High School ein Jahr früher abgeschlossen."
"15. April 2014, um die Einhaltung der Richtlinie zu Biografien lebender Menschen zu fördern."
"Im Namen von Bryan möchten wir, seine Familie, uns bei allen für die Ausgießung von Liebe, Gebeten und Unterstützung bedanken."
"In diesem Artikel geht es um den amerikanischen Basketballspieler."
"Entschuldigung, in Ihrem Browser ist entweder JavaScript deaktiviert oder es wird kein Player unterstützt."
quelle
Python 2.7
Ausgabe:
quelle
/q/21571
anstelle von/questions/21571/generate-an-understandable-sentence
).Shell Scripting
In diesem Skript wird immer der Titel der ersten Frage angezeigt, die sich derzeit oben auf dieser Site befindet. Ich gehe davon aus, dass der Fragentitel immer für Menschen lesbar ist. Und es wird sich dynamisch ändern. Wenn eine neue Frage eingeht und das Skript ausgeführt wird, wird der neueste Fragentitel angezeigt.
Versuch 1 Ausgabe
Versuch 2 Ausgabe
BEARBEITEN
Keine Dateien verwenden. Ohne Dateien kann ich das folgende Skript verwenden.
Ausgabe
quelle
JavaScript (ES6)
Das Ausführen in der Konsole erzeugt
quelle
t='';for(f of [_=>foo,_=>null.a,_=>0..toString(0)])try{f()}catch(e){t+=e.message+'\n'}t
Noch ein Python-Skript
Die Antwort von user3058846 ist nicht schlecht, aber es werden jedes Mal alle Sätze angezeigt. Hier schlage ich ein Skript vor, das einen zufälligen Satz aus dem Zen of Python ausgibt :
In einer Zeile für Code-Golf- Fans:
(Boooh, dreckig.)
Beispiele:
Ein weiterer lustiger Weg in Python
Danke an @TheDoctor für die Idee :-) Schalte die Importausgabe stumm und spiele dann mit dem pseudo-verschlüsselten Diktat im Modul.
quelle
shell=True
. Obwohl es in diesem Fall nicht unsicher ist, da Sie keine Benutzereingaben vornehmen, würde ich mich dafür entscheidensubprocess.Popen(('python', '-c', 'import this'))
.import this
Modulthis
enthält eine Variable , die den gesamten Text enthält, jedoch verschlüsselt ist. Es gibt auch ein Wörterbuch, um es zu entschlüsseln.Python 3
Garantiert grammatikalische Ausgaben! (Gewöhnlich.)
Löschen Sie den Unterstrich von, um die Grammatik zu optimieren
wordregex
. Dies verbietet Einträge mit mehreren Wörtern, die zu schlechten Sätzen wie "Wir machen Sie fertig" führen.Probelauf:
Bisherige Lieblingsausgabe:
Nachschlagen: http://en.wiktionary.org/wiki/you#Verb .
quelle
Python
Ergebnis:
Ich habe die Wortliste von hier verwendet. Finde Wörter, die jeden Vokal enthalten
Einige weitere Regeln können hinzugefügt werden. Wenn beispielsweise ein Wort, das mit "ness" endet, und das Wort auch in set ohne das Suffix vorhanden ist, handelt es sich um ein Nomen.
Quellcode:
quelle
Bash
Der Versuch, ein Programm auszuführen, das existiert, aber nicht installiert ist, führt dazu (in Linux Mint 13).
quelle
Python 3
Eine weitere Einstellung von The Zen of Python , inspiriert von Maximes Antwort .
quelle
quelle