Forum.iFiction.Ru

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

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

Вы не зашли.

   #1
15.06.2008 22:19

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 107

Прототип препроцессного генератора словоформ.

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

Плюсы:

  • Меньше рутины
  • Код проще (понятнее), легче вносить изменения
  • Код надежнее

Минусы:

  • При написании игры придется придерживаться некоторых соглашений
    (не задавать -x-desc, значения noun д.б. в И.П. и т.п. )
  • Необходимость запускать препроцессор

Посмотрите (~1Mb), если подобная программа кому-нибудь будет полезна – с удовольствием буду развивать.
http://rapidshare.com/files/122666450/n … s.rar.html или
http://www.filehoster.ru/files/bb3210


Собственно – это прототип, поэтому фич нет – одни ограничения:)

  • Только словарный анализ, предсказывающего – нет. Генерация производится при помощи словаря Зализняка, содержащего порядка 100 тысяч слов общеупотребительной лексики.
  • Обработка только существительных
  • Не учитываются постоянные грамматические характеристики слова
    (для сущ. - род, одушевленность),  т.е. если есть два одинаковых слова в И.п., то сгенерятся словоформы для обоих.
  • Словоформы выводятся с дублированием (например, кровати – Р.п., кровати – Д.п.,  кровати – П.п.)
  • Win1251-кодировка и прописные русские буквы
  • Баги, лаги, хреновое форматирование и т.д.

upd

Пример использвания:)
Берем фрагмент кода из Кащея ((C) fireton), удовлетворяющий ограничениям программы:

Код:

// 555 знаков кода
shtory : decoration
location = bedroom
sdesc = "шторы"
rdesc = "шторов" // кстати – баг :)
ddesc = "шторам"
vdesc = "шторы"
tdesc = "шторами"
pdesc = "шторах"
noun = 'шторы' 'штор' 'шторам' 'шторами' 'шторах' 'шторам#d' 'шторами#t' 'занавески' 'занавесок' 'занавескам' 'занавесками' 'занавесках'  'занавескам#d' 'занавесками#t' 'штора' 'шторы' 'шторе' 'штору' 'шторой' 'шторою' 'шторе#d' 'шторой#t' 'занавеска' 'занавески' 'занавеске' 'занавеску' 'занавеской' 'шторою' 'занавеске#d' 'занавеской#t' 
ldesc = "Тяжелые шторы твоей любимой расцветки - красное на черном..."
isThem = true
;

Урезаем этот фрагмент и копируем в файл in.t.

Код:

// in.t
// 171 знака кода
shtory : decoration
location = bedroom
sdesc = "шторы" 
noun = 'шторы' 'штора' 'занавески' 'занавеска'
ldesc = "Тяжелые шторы твоей любимой расцветки - красное на черном..."
isThem = true
;

Выполняем команду:
nounforms < in.t > out.t

Получаем результирующий файл:

Код:

// out.t
// 640 знаков кода
shtory : decoration
 location = bedroom
 sdesc = "шторы" 
rdesc = "штор" 
ddesc = "шторам" 
vdesc = "шторы" 
tdesc = "шторами" 
pdesc = "шторах" 

 noun = 
    'шторы' 'штор' 'шторам' 'шторам#d' 'шторы' 'шторами' 'шторами#t' 'шторах'  
    'штора' 'шторы' 'шторе' 'шторе#d' 'штору' 'шторой' 'шторой#t' 'шторе' 'шторою' 'шторою#t'  
    'занавески' 'занавесок' 'занавескам' 'занавескам#d' 'занавески' 'занавесками' 'занавесками#t' 'занавесках'  
    'занавеска' 'занавески' 'занавеске' 'занавеске#d' 'занавеску' 'занавеской' 'занавеской#t' 'занавеске' 'занавескою' 'занавескою#t' 
 ldesc = "Тяжелые шторы твоей любимой расцветки - красное на черном..."
 isThem = true
;

Отредактировано Gesperid (16.06.2008 00:19)

Неактивен

   #2
17.07.2008 07:09

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

меньше слов

Re: Прототип препроцессного генератора словоформ.

Извиняюсь, что обделили вниманием. Программка замечательная, отлично подходит для встраивания в среду разработки. Теперь есть альтернативный вариант - генерация на этапе компиляции, что сильно улучшает читаемость кода, но и этот подход тоже очень неплох.

Неактивен

   #3
30.07.2008 13:47

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 107

Re: Прототип препроцессного генератора словоформ.

GrAndrey написал:

Извиняюсь, что обделили вниманием. Программка замечательная, отлично подходит для встраивания в среду разработки. Теперь есть альтернативный вариант - генерация на этапе компиляции, что сильно улучшает читаемость кода, но и этот подход тоже очень неплох.

Спасибо, за такую оценку. Встроенный генератор, безусловно, лучше, просто в моем подходе чувствуется какой-то подспудный потенциал.

Неактивен

   #4
30.07.2008 15:31

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

меньше слов

Re: Прототип препроцессного генератора словоформ.

Встроенный генератор по качеству склонений не лучше. Правила заданы ещё не все, и исключения прописывать не планирую.

Неактивен

   #5
30.07.2008 17:03

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 107

Re: Прототип препроцессного генератора словоформ.

GrAndrey написал:

Встроенный генератор по качеству склонений не лучше.

Я имел ввиду лучше, как раз, своей "встроенностью". 

GrAndrey написал:

Правила заданы ещё не все, и исключения прописывать не планирую.

А нельзя ли брать словоформы из словаря, из ветки про библиотку не совсем понял? Preinit может сгодиться?

Неактивен

   #6
30.07.2008 19:07

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

меньше слов

Re: Прототип препроцессного генератора словоформ.

ТАДС позволяет использовать внешние функции написанные на других языках программирования.
Подробнее здесь (пока на английском).
Насколько знаю, Майкл Робертс позже урезал этот функционал в целях безопасности. Но учитывая, что мы хотим подключать внешние функции на этапе компиляции, а не во время игры, это обходится.

Неактивен

Powered by PunBB
© copyright 2001–2018 iFiction.Ru