Появление хороших IF на русском: «Ожидание утра», «Дримор», «Оружие Ли Гуана», подвигло меня на эксперименты с системой - на которой эти игры были написаны - RTADS.
В ходе первоначального знакомства с системой обнаружилось, что описание падежных форм занимает некоторую часть времени разработки (трудно судить какую, игр я не писал), и, что более неприятно – ведет к засорению и разбуханию кода.
Да, генераторы GrAnd-а и FighteR-а хорошо справляются со своей задачей (последний чуть лучше), а именно – с генерацией падежных форм. Но в связке с RTADS использовать генераторы не очень-то удобно, кроме того, они не решают проблемы разбухания кода.
В связи с вышесказанным у меня возникло несколько идей-тем к размышлению. Возможно все это - банальности (или даже бред:), что можно объяснить тем, что
с RTADS я познакомился чуть больше недели назад.
Итак, очень бы хотелось писать
noun = 'стул' 'табурет' (или даже noun = 'стул'), а RTADS
понимала бы как
noun ='стула' 'стулу' 'стул' 'стулом' 'стуле' 'стулу#d' 'стулом#t'
'табурета' 'табурету' 'табурет' 'табуретом' 'табурете' 'табурету#d' 'табуретом#t'
1.) Формат лекс. свойств.
// использует addword(…) и, возможно, external_generator(…) generator: function(obj); // внешний генератор external_generator: external function(…); sample: object noun = 'стул#мену' 'табурет#мену' // где м – мужской, е – ед. число, н – неодуш., у – ударение на посл. слог. // … // где-то дальше вызывается generator(self) ;
Здесь есть проблема - где и когда вызывать generator(self), и вообще, возможно ли это?
Подобное можно провернуть и с sdesc, задав свойства rdesc, ddesc и т.д. с произвольными значениями в базовом классе и добавив соответствующую функциональность в generator.
2.) Псевдо-препроцессорная обработка (во словцо придумал:).
Что-то вроде:
forms game.t > game_with_forms.t
Где forms – консольный римейк генератора GrAnd-а или FighteR-а, заменяющий строки вида
noun = 'стул#мену' 'табурет#мену'
на
noun ='стула' 'стулу' 'стул' 'стулом' 'стуле' 'стулу#d' 'стулом#t'
'табурета' 'табурету' 'табурет' 'табуретом' 'табурете' 'табурету#d' 'табуретом#t'
и добавляющий rdesc, ddesc и т.д.
Этот подход можно применить и для генерации синонимов (конечно не основных, а «страховочных»).
Хотя здесь не меньше трудностей: необходимость в хорошем словаре, всевозможные глюки (например, герой заходит в комнату, где находится родник, неся с собой ключ) и т.д.
P.S.
Все это тема к размышдению, т.е. достаточных знаний RTADS и морфологии, для реализации всего этого, у меня нет:)
Неактивен
Идея понятна - вы хотите прикрутить к RTADS автоматизированный морфологический генератор форм noun/adjective.
Теперь по делу. Фактически, обработка может быть написана на интерпретируемом языке (Perl для этого особенно удобен, т.к. разрабатывался специально для автоматизации работы с текстовыми файлами). Наш скрипт будет искать реальные, незакомментированные (должно зависеть от параметра командной строки), не криво описанные (с парными кавычками) параметры noun и adjective, вычленять параметры склонения, передавать их в некий Черный ящик, который занимается собственно формообразованием.
В качестве Черного ящика может выступить, например, какой-либо GPL-скрипт с хорошим словарем, а также вы можете попробовать написать его сами
P.S. IMHO, автоматические синонимы - плохо. Во-первых, это творчество за автора, а во-вторых, наставит он вам синонимов на "ключ", как "родник", "источник" и т.д., хотя имелся в виду ключ от секретера...
Отредактировано Hind (27.12.2007 23:14)
Неактивен