Появление хороших 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)
Неактивен
На самом деле, к RTADS вполне можно прикрутить настоящий морфоанализатор. Правда, его придется таскать с собой.
Я писал об этом здесь: http://rtads.org/f1/viewtopic.php?t=1191
Или можно сделать что-то вроде препроцессора, который обрабатывает описания в исходнике и отдает их компилятору TADS уже со всеми словоформами...
А синонимы - это отдельная задача...
Неактивен
Последняя версия генератора, которую я, к сожалению, так и не выпустил была полностью переписана с использованием регулярных выражений. ТАДС их поддерживает, и потому генератор можно впихнуть в игру. Вот только он не всегда правильно генерит формы. Например, слово пес или заяц. Если не проверять результат при добавлении лексемы, можно нажить себе много хлопот при тестировании.
Неактивен
Вообще, я зашёл сюда предложить впихнуть Конструктор виртуальных миров куда-нибудь в этот раздел, чтобы было по смыслу и чтобы не затерялось.
Но, заодно, хочу спросить: как насчёт прикрутить супер-словарь (фишка мп-3) к ртадсу? - такое моё второе предложение.
Неактивен
qwerty написал:
Вообще, я зашёл сюда предложить впихнуть Конструктор виртуальных миров куда-нибудь в этот раздел, чтобы было по смыслу и чтобы не затерялось.
Информация о конструкторе есть в разделе "Средства разработки" статьи про RTADS в IFwiki, нет только отдельной статьи - вопрос времени. Фиксировать информацию лучше в IFwiki, там есть категория документации RTADS, страница FAQ и категория библиотек. На всё это ссылаются основные статьи про TADS и RTADS. Если есть желание, можете помочь с заполнением, там это уместнее и полезнее.
qwerty написал:
Но, заодно, хочу спросить: как насчёт прикрутить супер-словарь (фишка мп-3) к ртадсу? - такое моё второе предложение.
Вы знакомы со средствами автоматической генерации падежных форм в RTADS и функциями стандартной библиотеки по склонению и спряжению игровых сообщений по шаблонам? Если да и вы столкнулись с десятком слов, на которых генератор RTADS отрабатывает хуже словаря из Метапарсера, то проще занести их в исключения генератора, указать вручную или сделать суперкласс для множественного переиспользования (по ситуации). На мой взгляд, это проблема не того масштаба, чтобы писать новый предпроцессор и добавлять ещё один слой к платформе.
Неактивен