عندما كنت قد بدأت للتو العمل في لعبتي النصية ، قررت أن إحدى ميزاتها الرئيسية يجب أن تكون الوصف الفني الجميل لأفعال الشخصيات. كنت أرغب جزئيًا في "الحفظ" ، لأنني لم أكن أعرف كيفية جدولة ذلك. لم ينجح الحفظ ، لكنه تحول إلى مكتبة Python (
github ،
pypi ) لإنشاء نصوص ، مع مراعاة اعتماد الكلمات وميزاتها النحوية.
على سبيل المثال ، من القالب:
[البطل] [مرت | البطل] الماضي فناء غير واضح وفجأة [لاحظت] البطل يلعب الأطفال. ركضوا بالسيوف الخشبية والعصي وأقنعة الوحوش. فجأة ، توقف أحد اللاعبين ، ووضع [لعبة | hero.weapon | vn] [hero.weapon | vn] ، صرخ: " [أنا | بطل] [عظيم | بطل] [بطل] ! احصل عليه! " - وهرعت إلى "الوحش". سقطوا على الأرض ، وقفزوا أذرعهم وأرجلهم ، ثم وقفوا وأقلعوا أقنعةهم وضحكوا. [الشخير | البطل] و [نفسه | البطل] [البطل] ، لكن لم يبدأ [البطل | البطل] في الذهاب إلى الطفل الصغير.
يمكننا الحصول على النص التالي (تغيير الكلمات غامق):
سار هال عبر فناء غير واضح و لاحظت فجأة أن الأطفال يلعبون. ركضوا بالسيوف الخشبية والعصي وأقنعة الوحوش. فجأة ، توقف أحد اللاعبين ، وأطلق سيفًا مذهلاً ، صاح قائلاً: " أنا عظيم هال ! احصل عليه! " - وهرعت إلى "الوحش". سقطوا على الأرض ، وقفزوا أذرعهم وأرجلهم ، ثم وقفوا وأقلعوا أقنعةهم وضحكوا. ضحك هال نفسه ، لكنه لم يخرج إلى الطفل الصغير.
أو مثل هذا:
مشى فيفارا عبر فناء غير واضح و لاحظت فجأة أن الأطفال يلعبون. ركضوا بالسيوف الخشبية والعصي وأقنعة الوحوش. فجأة توقف أحد اللاعبين ، واختفى لعبة نزلة ، وصرخ: " أنا عظيم فيفارا ! احصل عليه! " - وهرعت إلى "الوحش". سقطوا على الأرض ، وقفزوا أذرعهم وأرجلهم ، ثم وقفوا وأقلعوا أقنعةهم وضحكوا. تعجبت فيفارا نفسها ، لكنها لم تخرج إلى الطفل الصغير.
تحفظات الزوجينإخلاء المسؤولية 1 . أنا لست لغويًا وكانت المكتبة مكتوبة "للعمل" وليست "لتتوافق تمامًا مع جميع قواعد اللغة". لذلك ، أعتذر مقدمًا عن عدم الدقة في المصطلحات أو التفسير غير الكامل لقواعد اللغة الروسية.
إخلاء المسؤولية 2 . تم تطوير المكتبة منذ حوالي 5 سنوات ، والآن يمكن أن تظهر وسائل بديلة لتوليد النصوص (أو تنمو إلى حالتها الطبيعية). على سبيل المثال ، قد يكون هناك شيء مثير للاهتمام في برنامج الترجمة.
على تعقيد توليد النص
اللغة الروسية معقدة في العديد من جوانبها. على وجه الخصوص ، الكلمات لها عدد كبير من الأشكال المورفولوجية. على سبيل المثال ، يمكن أن يكون للصفات صفات كاملة وقصيرة ، تختلف حسب الجنس والرقم والحالة والرسوم المتحركة ودرجة المقارنة. يعتمد اختيار نموذج معين على كلمات أخرى في الجملة. نقول "امرأة جميلة" ، ولكن "رجل جميل". تعتمد كلمة "جميلة" في هذه الحالة على الكلمات "الرجل" / "المرأة" - يتم تحديد شكلها حسب جنس الكلمة الرئيسية.
لذلك ، تبدأ الصعوبات عندما نحاول الاتصال بشخص ما بناءً على جنسه. عند تجميع النصوص لمواقع الويب والرسائل والألعاب ، يتعين على المرء أن يأتي بكلمات شديدة الدقة (تجنب جنس المستخدم) أو يكتب عدة نصوص في وقت واحد أو يستخدم لغات ترميزية بدرجات متفاوتة من التنوع.
كنت أرغب في شيء أكثر من مجرد اعتماد بسيط على جنس اللاعب ، وحتى يتمكن المستخدمون من إضافة نصوص جديدة (والمستخدم "العادي" أمي تمامًا ، كما نعلم جميعًا :-)). لذلك ، لعدم العثور على البرنامج المناسب ، قررت أن أفعل ذلك بنفسي.
ميزات المكتبة
يسمح لك UTG (منشئ نص عالمي - ليس اسمًا متواضعًا جدًا) بإنشاء قوالب لإنشاء نص باستخدام ما يلي:
- المتغيرات (مثل اسم الحرف) ؛
- تبعيات الكلمات على المتغيرات (على سبيل المثال ، صفة على الاسم) ؛
- تبعيات بعض المتغيرات على الآخرين ؛
- خصائص صريحة للكلمات والمتغيرات (على سبيل المثال ، يمكنك تحديد إدراج اسم الحرف في الحالة الأصل) ؛
عند إنشاء نص من قالب:
- يتم نقل الخصائص الضرورية للكلمة الرئيسية إلى كلمات تابعة. على سبيل المثال ، يتم نقل جنس الاسم إلى الصفة.
- يتوافق شكل الكلمات التابعة مع الأرقام (مع مراعاة شكل الكلمات التابعة).
- يتم تعديل حروف الجر إذا لزم الأمر (على سبيل المثال ، عني / عنك) ، يجب تمييز ذريعة ذلك.
نفذت بالإضافة إلى ذلك:
- قاموس لتخزين الكلمات اللازمة.
- مستودع للقوالب لتخزينها حسب النوع واختيار قوالب عشوائية.
"تعرف" المكتبة وجود الأسماء والصفات والضمائر والأفعال والمشاركين والأرقام وحروف الجر و "علامات الاقتباس" (نص غير قابل للتغيير).
تؤخذ خصائص الكلمات التالية في الاعتبار: جزء من الكلام ، الحالة ، الرسوم المتحركة ، الرقم ، الجنس ، صيغة الفعل ، الوقت ، الشخص ، النوع ، فئة الصفة ، درجة الصفة ، فئة الضمير ، التعهد ، نموذج حرف الجر ، شكل الصفة ، نموذج المشاركة ، نموذج الاسم ( بالإضافة إلى النموذج العادي ، يكون للأسماء عدد
لا يحصى ).
شكل القالب ومثال الاستخدام
لنلقِ نظرة على قالب بسيط:
أمس [الغوغاء] [العضة | الغوغاء] [البطل | تحويلة] .
اعتمادًا على قيم المتغيرات ، قد يظهر القالب مثل هذه العبارة:
أمس ، الضبع قليلا هال.
كذا وكذا:
اليراعات بت شبح أمس.
النظر في القالب بمزيد من التفاصيل:
- نص عادي.[mob]
- متغير ، بدلاً منه يتم استبدال اسم الوحش.[|mob]
- كلمة تعتمد على متغير ، سيتغير جزء من خصائصه اعتمادًا على خصائص اسم الوحش (على سبيل المثال ، رقم). يتعرف منشئ النص تلقائيًا على خصائص نموذج الكلمة ويحاول حفظها (على سبيل المثال ، سيتم التعرف على الوقت المنقضي وحفظه ، لذلك لا تحتاج إلى تحديده).[hero|]
- متغير ، بدلاً من ذلك يتم استبدال اسم البطل. يشار بالإضافة إلى ذلك أن الاسم يجب أن يكون في حالة الاتهام.
المزيد من قوالب العينات.يمكن العثور على بعض الأمثلة الفنية في
الاختبارات .
إذا كنت مهتمًا بمزيد من الأمثلة ، يمكنك رؤيتها على موقع الألعاب. يمكن العثور على رابط إليها من خلال البحث في ملف التعريف الخاص بي ، أو عن طريق الكتابة بشكل شخصي.
يتم تمييز كل من الكلمات المتغيرة والكلمات التابعة في القالب بطريقة متماثلة ولها التنسيق التالي:
[
- فتح قوس مربع.
تعتمد على كلمة أو معرف متغير. يتحقق المولد أولاً من وجود متغير بهذا الاسم ؛ وإذا لم يكن هناك مثل هذا المتغير ، فسيتم البحث عن الكلمة في القاموس.|
- شريط عمودي - فاصل ، مطلوب إذا حددنا خصائص إضافية.
- المتغير الذي يعتمد عليه شكل الكلمة قد يكون غائبا.|
- شريط عمودي - فاصل ، مطلوب إذا حددنا خصائص إضافية.
- وصف للشكل المطلوب للكلمة (الحالة والجنس وما إلى ذلك). يمكن العثور على قائمة منهم على صفحات المشروع في جيثب وبيبي.]
هل قوس إغلاق مربع.
يمكنك تحديد أي خصائص إضافية كما تريد ، وسيتم تطبيقها بترتيب التعريف ، على سبيل المثال:
[ 1| 2|,| 3|,,]
في معظم الحالات ، تكون التنسيقات التالية كافية:
[]
- أدخل متغيرًا في الشكل العادي (على سبيل المثال ، اسم في الحالة الاسمية للمفرد).[|]
- إدراج متغير مع الخصائص المحددة.[|]
- أدخل كلمة ، ومطابقتها مع متغير (على سبيل المثال ، صفة "جميلة" مع اسم في الجنس والحالة).[||]
- أدخل كلمة ، ومطابقتها مع متغير وتحديد خصائص إضافية.
يرجى ملاحظة:
- يعد تحديد خصائص الكلمات والمتغيرات صالحًا فقط في مكان الإدراج ، ومن أجل الحصول على عبارة "البطل الجميل" ، يجب أن نشير إلى حالة الاتهام بشكل صريح لكلمتين:
[|hero|] [hero|]
. - يمكن لمولد النص "تخمين" خصائص الكلمة من خلال شكلها ، على سبيل المثال ، في عبارة
[hero] [|hero]
يمكنك حذف الفعل المضارع. - الخصائص المحددة في وقت لاحق الكتابة فوق الخصائص المحددة سابقا. على سبيل المثال ، في العبارة
[|hero] [hero|]
، لن يتم تحديد اتهام الصفة ، حيث سيتم استبدالها بالحالة الاسمية للبطل المتغير. - يمكن العثور على قائمة خصائص الكلمة على صفحات المكتبة في جيثب وبيبي.
مثال رمزبيثون 3 المطلوبة
تركيب
pip install utg python -m unittest discover utg
التعليمات البرمجية.
from utg import relations as r from utg import dictionary from utg import words from utg import templates from utg import constructors
حول القواميس
كما قد تلاحظ ، يتطلب UTG تكوين قاموس. يتم ذلك "باليد" منذ وقت التطوير:
- لم أجد أي قواميس صرفية نوعية يمكن الوصول إليها بشكل عام.
- لا تزال مكتبة pymorphy هي النسخة الأولى وغالبًا ما يتم تحريكها (خاصة في حالة الاتهام) ، وهذا هو السبب في أنني اضطررت إلى التخلي عنها.
إذا كنت تريد استخدام مولد يحتوي على الكثير من الكلمات ، قبل أن تقودها يدويًا ، حاول استخدام pymorphy2 ، أو ابحث عن قاموس جاهز وقم بالتصدير منه.
في المجموع
آمل أن تكون المكتبة مفيدة.
إذا كانت لديك أفكار لتطويرها (أو حتى أفضل من ذلك ، الرغبة في المشاركة فيها) - الكتابة في رسالة شخصية ، فعليك سحب الطلبات ، ونشر الأخطاء في جيثب.