|
|
|||||
Регистрация: Oct 2010
Адрес: Стык Нижегородской и Мордовской областей, город Саров
Сообщений: 17
|
Функция склонения слова
Необходима функция (ну или класс), которая склоняет слово по необходимому падежу. Долгое мучанье поисковиков дало только это. На паскале и только 1-ого склонения меня решительно не устроило. Делал её своими же кривыми руками, из чего опять же ничего не вышло. Все дело в том, что я пишу класс случайных событий для ролевого чата и для интерактивных событий (вставка случайного имени игрока), необходима эта программа, ибо текст вроде "Серый заяц выскочил из-за кустов, промчался мимо Вася ... " портят антуражность.
Подскажите хотя бы как организовать подобную функцию, а дальше как-нибудь сам справлюсь.. Шаблонный текст: Заранее благодарен. |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
предлагаю хранить для имени персонажа варианты этого имени во всех падежах.
Например так: var vasyaName:CasedWord = new CasedWord(); vasyaName.nominative = "Вася"; // именительный vasyaName.genitive = "Васи"; // родительный vasyaName.dative = "Васе"; // дательный vasyaName.accusative = "Васю"; // винительный vasyaName.instrumentative = "Васей"; // творительный vasyaName.preposition = "Васе"; // предложный Цитата:
В общем виде будет выглядеть так (вставить в кадр): 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. |
|
|||||
Регистрация: Oct 2010
Адрес: Стык Нижегородской и Мордовской областей, город Саров
Сообщений: 17
|
Такое не поможет ни разу. Вася выступает как пример. У нас ежедневно играет до 40 игроков (соглашусь, этого мало, но у них твинков по горло). Мы же не знаем что вернет функция getRandomUser(), ибо она возвращает случайное имя пользователя, который сейчас в локации. Нужно чтоб на учете исходного имени (которое при этом может быть и английскими буквами записано), программа сама генерировала нужное склонение.
|
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Цитата:
В первом случае нужен лингвистический анализ, да еще и для разных языков. Во втором случае вы ручками забиваете базу на всевозможные имена и их падежи...
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Цитата:
|
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
если точность не требуется, то обычно если последняя буква гласная - имя женское.
хотя вряд ли это поможет )
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
Регистрация: Oct 2010
Адрес: Стык Нижегородской и Мордовской областей, город Саров
Сообщений: 17
|
Цитата:
Цитата:
Цитата:
|
|
|||||
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Я бы сказал по-другому, если последняя буква "а" или "я", то скорее всего имя женское, хотя есть и исключения, которые можно добавить в список.
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну если играют только Клавдия Петровна с Авдотьей Некитишной, то да.. А Вовка и Серёга? Ваня и Петя? А если wtf666 и x0tT@6bl4?
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 18:11. |
|
« Предыдущая тема | Следующая тема » |
Теги |
Игры на flash , интерактивность , Склонения |
Опции темы | |
Опции просмотра | |
|
|