Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

   #1
27.12.2007 22:46

tadsloser
Участник
Зарегистрирован: 27.12.2007
Сообщений: 16

Рационализаторское предложение

Появление хороших 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 и морфологии, для реализации всего этого, у меня нет:)

Неактивен

   #2
27.12.2007 22:58

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 136
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Рационализаторское предложение

Идея понятна - вы хотите прикрутить к RTADS автоматизированный морфологический генератор форм noun/adjective.

Теперь по делу. Фактически, обработка может быть написана на интерпретируемом языке (Perl для этого особенно удобен, т.к. разрабатывался специально для автоматизации работы с текстовыми файлами). Наш скрипт будет искать реальные, незакомментированные (должно зависеть от параметра командной строки), не криво описанные (с парными кавычками) параметры noun и adjective, вычленять параметры склонения, передавать их в некий Черный ящик, который занимается собственно формообразованием.
В качестве Черного ящика может выступить, например, какой-либо GPL-скрипт с хорошим словарем, а также вы можете попробовать написать его сами big_smile

P.S. IMHO, автоматические синонимы - плохо. Во-первых, это творчество за автора, а во-вторых, наставит он вам синонимов на "ключ", как "родник", "источник" и т.д., хотя имелся в виду ключ от секретера...

Отредактировано Hind (27.12.2007 23:14)

Неактивен

   #3
28.12.2007 10:00

fireton
некто с бородой (+209, -52)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1047
Вебсайт

Тон

Re: Рационализаторское предложение

На самом деле, к RTADS вполне можно прикрутить настоящий морфоанализатор. Правда, его придется таскать с собой. smile
Я писал об этом здесь: http://rtads.org/f1/viewtopic.php?t=1191

Или можно сделать что-то вроде препроцессора, который обрабатывает описания в исходнике и отдает их компилятору TADS уже со всеми словоформами...

А синонимы - это отдельная задача...

Неактивен

   #4
28.12.2007 10:56

GrAndrey
папа RTADS и Бяка (+37, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1200
Вебсайт

меньше слов

Re: Рационализаторское предложение

Последняя версия генератора, которую я, к сожалению, так и не выпустил была полностью переписана с использованием регулярных выражений. ТАДС их поддерживает, и потому генератор можно впихнуть в игру. Вот только он не всегда правильно генерит формы. Например, слово пес или заяц. Если не проверять результат при добавлении лексемы, можно нажить себе много хлопот при тестировании.

Неактивен

Powered by PunBB
© copyright 2001–2018 iFiction.Ru