Als ich gerade anfing, an meinem Textspiel zu arbeiten, entschied ich, dass eines seiner Hauptmerkmale schöne künstlerische Beschreibungen der Handlungen der Charaktere sein sollten. Teilweise wollte ich „speichern“, weil ich nicht wusste, wie ich es planen sollte. Das Speichern funktionierte nicht, stellte sich jedoch als Python-Bibliothek (
Github ,
Pypi ) zum Generieren von Texten heraus, wobei die Abhängigkeit der Wörter und ihre grammatikalischen Merkmale berücksichtigt wurden.
Zum Beispiel aus der Vorlage:
[Held] [Held | vorbei ] an einem unauffälligen Innenhof vorbei und plötzlich [bemerkte | Held] spielende Kinder. Sie rannten mit Holzschwertern, Dauben und Masken von Monstern. Plötzlich hielt einer der Spieler an, setzte [Spielzeug | Held.Waffe | vn] [Held.Waffe | vn] und rief: „ [Ich | Held] [Großer | Held] [Held] ! Hol es dir! " - und eilte zum "Biest". Sie fielen zu Boden, sprangen mit Armen und Beinen und standen dann auf, nahmen ihre Masken ab und lachten. [Grunzender | Held] und [er selbst | Held] [Held] , aber nicht [ Start | Held] gingen zu dem Kleinen.
Wir können den folgenden Text erhalten (wechselnde Wörter sind fett gedruckt):
Hallr ging an einem unauffälligen Innenhof vorbei und bemerkte plötzlich, dass Kinder spielten. Sie rannten mit Holzschwertern, Dauben und Masken von Monstern. Plötzlich blieb einer der Spieler stehen, streckte ein vergoldetes Spielzeugschwert aus und rief: „ Ich bin ein großartiger Hallr ! Hol es dir! " - und eilte zum "Biest". Sie fielen zu Boden, sprangen mit Armen und Beinen und standen dann auf, nahmen ihre Masken ab und lachten. Hallr selbst kicherte , ging aber nicht zu dem Kleinen.
Oder so:
Fievara ging an einem unauffälligen Innenhof vorbei und bemerkte plötzlich, dass Kinder spielten. Sie rannten mit Holzschwertern, Dauben und Masken von Monstern. Plötzlich blieb einer der Spieler stehen, streckte ein Katarrhspielzeug aus und rief: „ Ich bin die große Fievara ! Hol es dir! " - und eilte zum "Biest". Sie fielen zu Boden, sprangen mit Armen und Beinen und standen dann auf, nahmen ihre Masken ab und lachten. Fievara selbst grunzte , ging aber nicht zu der Kleinen.
Paar ReservierungenHaftungsausschluss 1 . Ich bin kein Sprachwissenschaftler und die Bibliothek wurde geschrieben, um zu arbeiten und nicht um genau allen Regeln der Sprache zu entsprechen. Daher entschuldige ich mich im Voraus für Ungenauigkeiten in der Terminologie oder eine unvollständige Auslegung der Regeln der russischen Sprache.
Haftungsausschluss 2 . Die Bibliothek wurde vor ungefähr 5 Jahren entwickelt, jetzt könnten alternative Mittel zur Texterzeugung erscheinen (oder zu einem normalen Zustand heranwachsen). Zum Beispiel kann etwas Interessantes in der Software zur Lokalisierung sein.
Zur Komplexität der Texterzeugung
Die russische Sprache ist in vielen Aspekten komplex. Insbesondere haben Wörter eine große Anzahl von morphologischen Formen. Zum Beispiel können Adjektive eine vollständige und kurze Form haben, die sich nach Geschlecht, Anzahl, Fall, Animation und Vergleichsgrad unterscheidet. Die Wahl einer bestimmten Form hängt von anderen Wörtern im Satz ab. Wir sagen "schöne Frau", aber "schöner Mann". Das Wort „schön“ hängt in diesem Fall von den Wörtern „Mann“ / „Frau“ ab - seine Form wird durch das Geschlecht des Hauptworts bestimmt.
Daher beginnen Schwierigkeiten, wenn wir versuchen, jemanden aufgrund seines Geschlechts zu kontaktieren. Beim Zusammenstellen von Texten für Websites, Briefe und Spiele muss entweder eine sehr übersichtliche Formulierung (unter Vermeidung des Geschlechts des Benutzers) erstellt, mehrere Texte gleichzeitig geschrieben oder Markup-Sprachen mit unterschiedlichem Vielseitigkeitsgrad verwendet werden.
Ich wollte mehr als eine einfache Abhängigkeit vom Geschlecht des Spielers, und trotzdem, damit die Benutzer selbst neue Texte hinzufügen können (und der "durchschnittliche" Benutzer ist, wie wir alle wissen, ziemlich Analphabet :-)). Da ich nicht die richtige Software gefunden habe, habe ich mich dazu entschlossen, dies selbst zu tun.
Bibliotheksfunktionen
Mit UTG (Universal Text Generator - kein sehr bescheidener Name) können Sie Vorlagen zum Generieren von Text mit den folgenden Eigenschaften erstellen:
- Variablen (z. B. Zeichenname);
- Abhängigkeiten von Wörtern von Variablen (zum Beispiel ein Adjektiv von einem Substantiv);
- Abhängigkeiten einiger Variablen von anderen;
- Explizite Eigenschaften von Wörtern und Variablen (Sie können beispielsweise angeben, dass der Zeichenname im übergeordneten Fall eingefügt wird).
Beim Generieren von Text aus einer Vorlage:
- Die notwendigen Eigenschaften des Hauptwortes werden auf abhängige Wörter übertragen. Zum Beispiel wird das Geschlecht eines Substantivs auf das Adjektiv übertragen.
- Die Form der abhängigen Wörter stimmt mit den Zahlen überein (unter Berücksichtigung der Form der abhängigen Wörter).
- Präpositionen werden bei Bedarf geändert (z. B. über mich / über Sie), der Vorwand dafür sollte markiert sein.
Zusätzlich implementiert:
- Ein Wörterbuch zum Speichern der erforderlichen Wörter.
- Ein Repository mit Vorlagen zum Speichern nach Typ und Auswählen zufälliger Vorlagen.
Die Bibliothek „kennt“ die Existenz von Substantiven, Adjektiven, Pronomen, Verben, Partizipien, Zahlen, Präpositionen und „Anführungszeichen“ (unveränderlicher Text).
Die folgenden Eigenschaften von Wörtern werden berücksichtigt: Wortart, Groß- und Kleinschreibung, Animation, Anzahl, Geschlecht, Verbform, Zeit, Person, Typ, Kategorie des Adjektivs, Grad des Adjektivs, Kategorie des Pronomen, Stimme, Präposition, Adjektivform, Partizipform, Substantivform ( Substantive haben zusätzlich zur Normalform eine
zählbare ).
Vorlagenformat und Verwendungsbeispiel
Schauen wir uns eine einfache Vorlage an:
Gestern [Mob] [gebissen | Mob] [Held | ext] .
Abhängig von den Werten der Variablen kann die Vorlage als solche Phrase angezeigt werden:
Gestern hat eine Hyäne Hallre gebissen.
so und so:
Glühwürmchen haben gestern einen Geist gebissen.
Betrachten Sie die Vorlage genauer:
- Klartext.[mob]
- eine Variable, anstelle der der Name des Monsters ersetzt wird.[|mob]
- Ein Wort, das von einer Variablen abhängt. Ein Teil seiner Eigenschaften ändert sich abhängig von den Eigenschaften des Namens des Monsters (z. B. einer Zahl). Der Textgenerator erkennt die Eigenschaften der Wortform automatisch und versucht, sie zu speichern (z. B. wird die verstrichene Zeit erkannt und gespeichert, sodass Sie sie nicht angeben müssen).[hero|]
- eine Variable, anstelle der der Name des Helden ersetzt wird. Es wird zusätzlich angegeben, dass der Name im Akkusativ sein sollte.
Weitere Beispielvorlagen.Einige technische Beispiele finden Sie in
Tests .
Wenn Sie an weiteren Beispielen interessiert sind, können Sie diese auf der Spielzeug-Website sehen. Ein Link dazu kann durch Stöbern in meinem Profil oder durch Schreiben in einem persönlichen gefunden werden.
Sowohl die variablen als auch die abhängigen Wörter in der Vorlage werden identisch hervorgehoben und haben das folgende Format:
[
- eckige Klammer öffnen.- wortabhängige Wort- oder Variablenkennung. Der Generator prüft zunächst, ob eine Variable mit diesem Namen vorhanden ist. Wenn keine solche Variable vorhanden ist, wird das Wort im Wörterbuch gesucht.
|
- Vertikaler Balken - Trennzeichen, wird benötigt, wenn zusätzliche Eigenschaften angegeben werden.
- Die Variable, von der die Form des Wortes abhängt, fehlt möglicherweise.|
- Vertikaler Balken - Trennzeichen, wird benötigt, wenn zusätzliche Eigenschaften angegeben werden.
- eine Beschreibung der erforderlichen Form des Wortes (Groß- und Kleinschreibung, Geschlecht usw.). Eine Liste davon finden Sie auf den Projektseiten in Github und Pypi.]
Ist die schließende eckige Klammer.
Sie können beliebige zusätzliche Eigenschaften angeben. Diese werden in der Reihenfolge der Definition angewendet, z. B.:
[ 1| 2|,| 3|,,]
In den meisten Fällen reichen die folgenden Formate aus:
[]
- Fügen Sie eine Variable in normaler Form ein (z. B. ein Substantiv im Nominativ des Singulars).[|]
- Fügen Sie eine Variable mit den angegebenen Eigenschaften ein.[|]
- Fügen Sie ein Wort ein und ordnen Sie es einer Variablen zu (z. B. das Adjektiv "schön" mit einem Substantiv in Geschlecht und Groß- / Kleinschreibung).[||]
- Fügen Sie ein Wort ein, ordnen Sie es einer Variablen zu und geben Sie zusätzliche Eigenschaften an.
Beachten Sie:
- Die Angabe von Eigenschaften für Wörter und Variablen ist nur an der Einfügungsstelle gültig. Um den Ausdruck „schöner Held“ zu erhalten, müssen wir den Akkusativ explizit für zwei Wörter angeben:
[|hero|] [hero|]
. - Der Textgenerator kann die Eigenschaften des Wortes anhand seiner Form „erraten“. In der Phrase
[hero] [|hero]
Sie beispielsweise die Zeitform des Verbs weglassen. - Später angegebene Eigenschaften überschreiben zuvor angegebene Eigenschaften. Zum Beispiel wird in der Phrase
[|hero] [hero|]
der Akkusativ des Adjektivs nicht festgelegt, da er durch den Nominativfall des variablen Helden ersetzt wird. - Eine Liste der Worteigenschaften finden Sie auf den Bibliotheksseiten in github und pypi.
CodebeispielPython 3 erforderlich
Installation
pip install utg python -m unittest discover utg
Code
from utg import relations as r from utg import dictionary from utg import words from utg import templates from utg import constructors
Über Wörterbücher
Wie Sie vielleicht bemerkt haben, erfordert UTG die Bildung eines Wörterbuchs. Dies geschieht „von Hand“ seit dem Zeitpunkt der Entwicklung:
- Ich habe keine allgemein zugänglichen qualitativen morphologischen Wörterbücher gefunden.
- Die Pymorphiebibliothek war noch die erste Version und blinzelte ziemlich oft (besonders im Akkusativ), weshalb ich sie aufgeben musste.
Wenn Sie einen Generator mit vielen Wörtern verwenden möchten, bevor Sie sie manuell einfahren, versuchen Sie es mit pymorphy2 oder suchen Sie nach einem vorgefertigten Wörterbuch und exportieren Sie es.
Insgesamt
Ich hoffe, die Bibliothek wird nützlich sein.
Wenn Sie Ideen für seine Entwicklung haben (oder noch besser den Wunsch, daran teilzunehmen) - schreiben Sie eine persönliche Nachricht, ziehen Sie Anfragen, posten Sie Fehler an den Github.