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
некто с бородой (+240, -69)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1064
Вебсайт

Тон

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

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

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

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

Неактивен

   #4
28.12.2007 10:56

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

меньше слов

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

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

Неактивен

   #5
16.08.2018 01:07

qwerty
Участник (+124, -23)
Зарегистрирован: 21.12.2005
Сообщений: 138

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

Вообще, я зашёл сюда предложить впихнуть Конструктор виртуальных миров куда-нибудь в этот раздел, чтобы было по смыслу и чтобы не затерялось.

Но, заодно, хочу спросить: как насчёт прикрутить супер-словарь (фишка мп-3) к ртадсу? - такое моё второе предложение.

Неактивен

   #6
16.08.2018 01:47

Nikita
Модератор (+321, -105)
Зарегистрирован: 29.10.2016
Сообщений: 104

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

qwerty написал:

Вообще, я зашёл сюда предложить впихнуть Конструктор виртуальных миров куда-нибудь в этот раздел, чтобы было по смыслу и чтобы не затерялось.

Информация о конструкторе есть в разделе "Средства разработки" статьи про RTADS в IFwiki, нет только отдельной статьи - вопрос времени. Фиксировать информацию лучше в IFwiki, там есть категория документации RTADS, страница FAQ и категория библиотек. На всё это ссылаются основные статьи про TADS и RTADS. Если есть желание, можете помочь с заполнением, там это уместнее и полезнее.

qwerty написал:

Но, заодно, хочу спросить: как насчёт прикрутить супер-словарь (фишка мп-3) к ртадсу? - такое моё второе предложение.

Вы знакомы со средствами автоматической генерации падежных форм в RTADS и функциями стандартной библиотеки по склонению и спряжению игровых сообщений по шаблонам? Если да и вы столкнулись с десятком слов, на которых генератор RTADS отрабатывает хуже словаря из Метапарсера, то проще занести их в исключения генератора, указать вручную или сделать суперкласс для множественного переиспользования (по ситуации). На мой взгляд, это проблема не того масштаба, чтобы писать новый предпроцессор и добавлять ещё один слой к платформе.

Неактивен

Powered by PunBB
© copyright 2001–2018 iFiction.Ru