Форум: "Игры";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
ВнизФИО из базы данных в родительском падеже Найти похожие ветки
← →
Homa_Programer © (2005-06-11 07:08) [0]постановка задачи таккая:
в БД имеются ФИО (3 поля) в иминительном падеже
требуется алгоритм перевода ФИО в родительный падеж
помогите кто чем сможет!!!
← →
Defunct © (2005-06-11 07:53) [1]книжки "русский язык" за 2-й и 3-й класс Вам исчерпывающе помогут.
на полном серьезе.
← →
Homa_Programer © (2005-06-11 08:23) [2]> Defunct ©
не смешно! да и их под руками нету :(
← →
Anatoly Podgoretsky © (2005-06-11 08:43) [3]Предлагаешь нам поискать учебник?
Но это уже услуга, а не ответ в конференции, соответсвенно с этим уже в другую конференцию.
По вопросу, задача решения не имеет.
← →
isasa © (2005-06-11 10:48) [4]Способа решения два ;)
Первый - писать функцию перевода, реализующую правила,
второй - выборка имен поselect ... group ...
и быстренько ручками перевести.
Второй вариант, даже на базах больших объемов дает неплохой результат.
Уникальных немного.
И если учитывать многие неожиданные исключения из правил,
на мой взгляд предпочтительнее
← →
Homa_Programer © (2005-06-11 12:41) [5]Удалено модератором
← →
Koala © (2005-06-11 17:24) [6]Попробуй эту функцию (делю на 2 части):
const
alphavit : array[1..32] of string =
("б","в","г","д","ж","з","к","л","м","н","п","р","с","т","ф","х","ц","ч","ш","щ",
"а","е","и","й","о","у","ы","э","ю","я","ь","ъ");
Функции для склонения фамилии, имени, отчества
Пол (Sex) 0: мужской //
// 1: женский //
// //
// Падеж (Getcase) 0: родительный //
// 1: дательный
function GetDeclensionSurname (Surname : string; Sex : integer;
CaseSurname : integer) : string;
var
s1, s2, s3 : string;
i1 : integer;
begin
i := Length(Surname);
if i <= 2 then
begin
case CaseSurname of
0 : Result := Surname; // родительный падеж
1 : Result := Surname; // дательный падеж
end;
end;
s1 := copy(Surname,i,1);
s2 := copy(Surname,i-1,2);
s3 := copy(Surname,i-2,3);
if (s2 = "их") or (s2 = "ых") then // Сибирские фамилии
begin
case CaseSurname of
0 : Result := Surname; // родительный падеж
1 : Result := Surname; // дательный падеж
end;
exit;
end;
if (s3 = "кая") and (Sex = 1) then // Лобановская...
begin
case CaseSurname of
0,1 : begin // дательный падеж // родительный падеж
i := Length(Surname);
Surname := copy(Surname,1, i - 2);
Result := Surname + "ой";
exit;
end;
end;
end;
if (s1 = "о") then // Украинские фамилии
begin
case CaseSurname of
0 : Result := Surname; // родительный падеж
1 : Result := Surname; // дательный падеж
end;
exit;
end;
if (s2 = "уа") then // Стуруа...
begin
case CaseSurname of
0 : Result := Surname; // родительный падеж
1 : Result := Surname; // дательный падеж
end;
end;
if (s2 = "иа") then // Тутухиа...
begin
case CaseSurname of
0 : Result := Surname; // родительный падеж
1 : Result := Surname; // дательный падеж
end;
end;
← →
Koala © (2005-06-11 17:26) [7]продолжение
if (s2 = "жа") and (Sex = 1) then // Ганжа...
begin
case CaseSurname of
0 : Result := Surname; // родительный падеж
1 : Result := Surname; // дательный падеж
end;
end;
if (s3 = "онь") and (Sex = 0) then // Белоконь...
begin
case CaseSurname of
0 : Result := Surname; // родительный падеж
1 : Result := Surname; // дательный падеж
end;
end;
if (s3 = "дзе") or (s3 = "или") then // Грузинские фамилии
begin
case CaseSurname of
0 : Result := Surname; // родительный падеж
1 : Result := Surname; // дательный падеж
end;
end;
if (s2 = "ой") and (Sex = 0) and (i = 3) then // Цой...
begin
case CaseSurname of
0 : begin // родительный падеж
i := Length(Surname);
Surname := copy(Surname,1, i - 1);
Result := Surname + "я";
end;
1 : begin // дательный падеж
i := Length(Surname);
Surname := copy(Surname,1, i - 1);
Result := Surname + "ю";
end;
end;
end;
if (s2 = "ой") and (Sex = 1) and (i = 3) then // Цой...
begin
case CaseSurname of
0 : Result := Surname; // родительный падеж
1 : Result := Surname; // дательный падеж
end;
end;
i1 := 1;
while s1 <> alphavit[i1] do
i1 := i1 +1;
if (sex = 0) and (i1 <= 20) then
case CaseSurname of
0 : Result := Surname + "а"; // родительный падеж
1 : Result := Surname + "у"; // дательный падеж
end;
if (sex = 0) and (s2 = "дь") then // Лебедь
case CaseSurname of
0 : begin // родительный падеж
i := Length(Surname);
Surname := copy(Surname,1, i - 1);
Result := Surname + "я";
end;
1 : begin // дательный падеж
i := Length(Surname);
Surname := copy(Surname,1, i - 1);
Result := Surname + "ю";
end;
end;
if (sex = 1) and (i1 <= 20) then
case CaseSurname of
0 : Result := Surname; // родительный падеж
1 : Result := Surname; // дательный падеж
end;
if (sex = 1) and (s1 = "а") then
case CaseSurname of
0 : begin // родительный падеж
i := Length(Surname);
Surname := copy(Surname,1, i - 1);
Result := Surname + "у";
end;
1 : begin // дательный падеж
i := Length(Surname);
Surname := copy(Surname,1, i - 1);
Result := Surname + "ой";
end;
end;
if (sex = 0) and (s1 = "а") then
case CaseSurname of
0 : begin // родительный падеж
i := Length(Surname);
Surname := copy(Surname,1, i - 1);
Result := Surname + "у";
end;
1 : begin // дательный падеж
i := Length(Surname);
Surname := copy(Surname,1, i - 1);
Result := Surname + "е";
end;
end;
if (sex = 0) and (s2 = "ой") and (i > 3) then
case CaseSurname of
0 : begin // родительный падеж
i := Length(Surname);
Surname := copy(Surname,1, i - 1);
Result := Surname + "го";
end;
1 : begin // дательный падеж
i := Length(Surname);
Surname := copy(Surname,1, i - 1);
Result := Surname + "му";
end;
end;
if (sex = 1) and (s2 = "ая") and (i > 3) then
case CaseSurname of
0 : begin // родительный падеж
i := Length(Surname);
Surname := copy(Surname,1, i - 1);
Result := Surname + "ую";
end;
1 : begin // дательный падеж
i := Length(Surname);
Surname := copy(Surname,1, i - 1);
Result := Surname + "ой";
end;
end;
if (sex = 0) and (i > 3) and (s2 = "ий") or (s2 = "ый")then
case CaseSurname of
0 : begin // родительный падеж
i := Length(Surname);
Surname := copy(Surname,1, i - 2);
Result := Surname + "ого";
end;
1 : begin // дательный падеж
i := Length(Surname);
Surname := copy(Surname,1, i - 2);
Result := Surname + "ому";
end;
end;
if (sex = 1) and (i > 3) and (s2 = "ая") then
case CaseSurname of
0 : begin // родительный падеж
i := Length(Surname);
Surname := copy(Surname,1, i - 2);
Result := Surname + "ую";
end;
1 : begin // дательный падеж
i := Length(Surname);
Surname := copy(Surname,1, i - 2);
Result := Surname + "ой";
end;
end;
end;
← →
Koala © (2005-06-11 17:27) [8]Часть 3
function GetDeclensionName (Name : string; Sex : integer;
CaseName : integer) : string;
var
i1 : integer;
s1 : string;
begin
i := Length(Name);
s := copy(Name,i,1);
i := 1;
while s <> alphavit[i] do
i := i +1;
case sex of
0 : begin // мужской пол
if i <= 20 then // Иван, Петр, Ярослав...
begin
case CaseName of
0 : Result := Name + "а"; // родительный падеж
1 : Result := Name + "у"; // дательный падеж
end;
end
else
begin
case i of
24 : begin // "й" - Сергей, Дмитрий...
case CaseName of
0 : begin // родительный падеж
i := Length(Name);
Name := copy(Name,1, i - 1);
Result := Name + "я";
end;
1 : begin // дательный падеж
i := Length(Name);
Name := copy(Name,1, i - 1);
Result := Name + "ю";
end;
end;
end;
21 : begin // "а" - Фома...
case CaseName of
0 : begin // родительный падеж
i := Length(Name);
Name := copy(Name,1, i - 1);
Result := Name + "у";
end;
1 : begin // дательный падеж
i := Length(Name);
Name := copy(Name,1, i - 1);
Result := Name + "е";
end;
end;
end;
30 : begin // "я" - Илья...
case CaseName of
0 : begin // родительный падеж
i := Length(Name);
Name := copy(Name,1, i - 1);
Result := Name + "ю";
end;
1 : begin // дательный падеж
i := Length(Name);
Name := copy(Name,1, i - 1);
Result := Name + "е";
end;
end;
end;
31 : begin // "ь" - Игорь...
case CaseName of
0 : begin // родительный падеж
i := Length(Name);
Name := copy(Name,1, i - 1);
Result := Name + "ю";
end;
1 : begin // дательный падеж
i := Length(Name);
Name := copy(Name,1, i - 1);
Result := Name + "я";
end;
end;
end;
end;
end;
end;
1 : begin // женский пол
i1 := Length(Name);
s1 := copy(Name,i1-1,2);
if s1 = "ия" then // Виктория.....
case CaseName of
0 : begin // родительный падеж
i := Length(Name);
Name := copy(Name,1, i - 1);
Result := Name + "ю";
end;
1 : begin // дательный падеж
i := Length(Name);
Name := copy(Name,1, i - 1);
Result := Name + "и";
end;
end;
case i of
21 : begin // "а" - Татьяна, Людмила...
case CaseName of
0 : begin // родительный падеж
i := Length(Name);
Name := copy(Name,1, i - 1);
Result := Name + "у";
end;
1 : begin // дательный падеж
i := Length(Name);
Name := copy(Name,1, i - 1);
Result := Name + "е";
end;
end;
end;
30 : begin // "я" - Зоя...
case CaseName of
0 : begin // родительный падеж
i := Length(Name);
Name := copy(Name,1, i - 1);
Result := Name + "ю";
end;
1 : begin // дательный падеж
i := Length(Name);
Name := copy(Name,1, i - 1);
Result := Name + "е";
end;
end;
end;
end;
end;
end;
end;
function GetDeclensionFathername (Fathername : string; Sex : integer;
CaseFathername : integer) : string;
begin
case sex of
0 : begin // мужской пол
case CaseFathername of
0 : Result := Fathername + "а"; // родительный падеж
1 : Result := Fathername + "у"; // дательный падеж
end;
end;
1 : begin // женский пол
case CaseFathername of
0 : begin // родительный падеж
i := Length(Fathername);
Fathername := copy(Fathername,1, i - 1);
Result := Fathername + "у";
end;
1 : begin // дательный падеж
i := Length(Fathername);
Fathername := copy(Fathername,1, i - 1);
Result := Fathername + "е";
end;
end;
end;
end;
← →
Frost (Freak) (2005-09-08 12:12) [10]Что за прикол? Дружок, ты форумом не ошибся? Какое отношение твой вопрос имеет к играм?
← →
Sphinx © (2005-09-08 12:19) [11]Я так понял эту ветку переместили...
Но почему в Игры ? :0
← →
DeadMeat © (2005-09-08 12:36) [12]А может он на OpenGL это дело мутит...
← →
Frost (Freak) (2005-09-08 12:45) [13]Ага, делает визуализацию перевода ФИО в родительный падеж :)))))
← →
Kobik © (2005-09-08 20:15) [14]Да это наверно глюк форума. Дату гляньте :)
>11.06.05 07:08
← →
DDA © (2005-09-08 20:46) [15]
> Уникальных немного.
ничего себе немного
у меня база жителей области 1 млн 268 тыс
дак вот из них уникальных 70 тыс где то
И все эти фамилии в ручную думаю не очень быстро поправить
← →
isasa © (2005-09-08 22:16) [16]70 000 / 1 268 000 * 100% = 5,5% - много, мало?
Почитай правила склонения имен, не правила а сплошное исключение.
← →
Anatoly Podgoretsky © (2005-09-08 22:36) [17]Frost (Freak) (08.09.05 12:12) [10]
Если говорить об алгоритмаъ, а именно о них и речь, то форум называется Игры и Алгоритмы.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.014 c