Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.03.2011, 04:25
krabanek вне форума Посмотреть профиль Отправить личное сообщение для krabanek Найти все сообщения от krabanek
  № 1  
Ответить с цитированием
krabanek

Регистрация: Oct 2010
Адрес: Стык Нижегородской и Мордовской областей, город Саров
Сообщений: 17
Question Функция склонения слова

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

Шаблонный текст: Заранее благодарен.

Старый 24.03.2011, 04:48
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
предлагаю хранить для имени персонажа варианты этого имени во всех падежах.
Например так:
Код AS3:
var vasyaName:CasedWord = new CasedWord();
vasyaName.nominative = "Вася";            // именительный
vasyaName.genitive = "Васи";              // родительный
vasyaName.dative = "Васе";                // дательный
vasyaName.accusative = "Васю";            // винительный
vasyaName.instrumentative = "Васей";      // творительный
vasyaName.preposition = "Васе";           // предложный
А в строке изначально прописывать темплат. Например так:
Цитата:
"Серый заяц выскочил из-за кустов, промчался мимо ${CasedWord=genitive}... "
Потом пишется регулярка для нахождения и замены темплата.

В общем виде будет выглядеть так (вставить в кадр):
Код AS3:
var templateText:String = "Серый заяц и ${CasedWord=nominative} выскочили из-за кустов и напугали ${CasedWord=accusative}... ";
var casedName:Object = new Object();
casedName.nominative = "Клавдия Петровна";            // именительный
casedName.genitive = "Клавдии Петровны";              // родительный
casedName.dative = "Клавдии Петровне";                // дательный
casedName.accusative = "Клавдию Петровну";            // винительный
casedName.instrumentative = "Клавдией Петровной";     // творительный
casedName.preposition = "Клавдии Петровне";           // предложный
 
 
trace( fillTemplateText( templateText, casedName ) );
 
 
function fillTemplateText( temp:String, caseWord:Object ):String
{
	var outText = temp;
	var reCasedWord:RegExp = /\$\{CasedWord\=(\w+)\}/g;
	var m:Object;
	while( true )
	{
		m = reCasedWord.exec( outText );
 
		if( !m )
			break;
		else if( !(m[1] in caseWord) )
			continue;
 
		outText = outText.substring(0, m.index) + caseWord[m[1]] + outText.substring(m.index + m[0].length);
		reCasedWord.lastIndex = 0;
	}
	return outText;
}
трейс:
Цитата:
Серый заяц и Клавдия Петровна выскочили из-за кустов и напугали Клавдию Петровну...


Последний раз редактировалось i.o.; 24.03.2011 в 06:17.
Старый 24.03.2011, 05:33
krabanek вне форума Посмотреть профиль Отправить личное сообщение для krabanek Найти все сообщения от krabanek
  № 3  
Ответить с цитированием
krabanek

Регистрация: Oct 2010
Адрес: Стык Нижегородской и Мордовской областей, город Саров
Сообщений: 17
Такое не поможет ни разу. Вася выступает как пример. У нас ежедневно играет до 40 игроков (соглашусь, этого мало, но у них твинков по горло). Мы же не знаем что вернет функция getRandomUser(), ибо она возвращает случайное имя пользователя, который сейчас в локации. Нужно чтоб на учете исходного имени (которое при этом может быть и английскими буквами записано), программа сама генерировала нужное склонение.

Старый 24.03.2011, 05:42
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 4  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
программа сама генерировала нужное склонение
Это из области фантастики... Или из области баз данных.
В первом случае нужен лингвистический анализ, да еще и для разных языков.
Во втором случае вы ручками забиваете базу на всевозможные имена и их падежи...

Старый 24.03.2011, 05:44
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 5  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Цитата:
Сообщение от krabanek Посмотреть сообщение
Такое не поможет ни разу. Вася выступает как пример. У нас ежедневно играет до 40 игроков (соглашусь, этого мало, но у них твинков по горло). Мы же не знаем что вернет функция getRandomUser(), ибо она возвращает случайное имя пользователя, который сейчас в локации. Нужно чтоб на учете исходного имени (которое при этом может быть и английскими буквами записано), программа сама генерировала нужное склонение.
Человек иногда не может склонить имя, а вы хотите чтобы компьютер "как нибудь" склонял любое имя правильно. Создавайте таблицу склонений и берите из неё данные. Возможно такие таблицы уже кем то составлены.

Старый 24.03.2011, 05:46
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 6  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
если точность не требуется, то обычно если последняя буква гласная - имя женское.
хотя вряд ли это поможет )

Старый 24.03.2011, 05:53
krabanek вне форума Посмотреть профиль Отправить личное сообщение для krabanek Найти все сообщения от krabanek
  № 7  
Ответить с цитированием
krabanek

Регистрация: Oct 2010
Адрес: Стык Нижегородской и Мордовской областей, город Саров
Сообщений: 17
Цитата:
Это из области фантастики... Или из области баз данных.
Я в свое время составлял плохонькую программу, которая как раз на основе выданного слова генерировала склонение (но она давно утеряна по причинам форматирования винта). Работала не идеально, иногда ошибалась. Работала она только с учетом последней буквы в слове.
Цитата:
а вы хотите чтобы компьютер "как нибудь" склонял любое имя правильно
Не "как-нибудь", а вполне логичным образом. В принципе почти всегда от последних двух букв и зависит склонение. Т.е. учитывая две буквы можно сделать адекватную программу. Да и не требовал я чтобы оно было правильным, главное чтоб хоть как-то склоняло.
Цитата:
Возможно такие таблицы уже кем то составлены.
Искал в поисковиках - ноль эффекта. Разве что вот это, но оно во первых платное, во вторых на Flash не катит.

Старый 24.03.2011, 07:51
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 8  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
Сообщение от i.o. Посмотреть сообщение
если точность не требуется, то обычно если последняя буква гласная - имя женское.
хотя вряд ли это поможет )
Я бы сказал по-другому, если последняя буква "а" или "я", то скорее всего имя женское, хотя есть и исключения, которые можно добавить в список.

Старый 24.03.2011, 10:41
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 9  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ну если играют только Клавдия Петровна с Авдотьей Некитишной, то да.. А Вовка и Серёга? Ваня и Петя? А если wtf666 и x0tT@6bl4?
__________________
Reality.getBounds(this);

Старый 24.03.2011, 10:51
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 10  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
При регистраций/созданий персонажа указывать пол. 100% качество
__________________
Дети не должны знать о своих родителях

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:11.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
Игры на flash , интерактивность , Склонения
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:11.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.