Cypriano

22 lutego, 2008

Skrypt tworzący wołacz imienia

Filed under: Projekty — Cypriano 2008-02-22 @ 16:56 Modified: 2009-07-22 o 10:59
Tagi: , , , ,

Skrypt tworzy wołacz imienia i tworzy zwrot grzecznościowy na podstawie imienia w mianowniku (wersja testowa)

Do utworzenia odpowiedniej odmiany wykorzystywany jest zestaw regułek sprawdzających zakończenie mianownika. Na tej podstawie rozpoznawana jest płeć osoby noszącej dane imię, a także tworzony odpowiedni wołacz imienia.

Fragment kodu:
case substr($imie,-2,2)=="eł":
return "1".substr($imie,0,-2)."le";
case substr($imie,-2,2)=="tr":
return "1".$imie."ze";

zwracana wartość, to 1 – rodzaj męski, a następnie imię zmienione w wołacz.

Działający skrypt: Wołacz imienia

Copyright (c) 2007 Cypriano (www.cypriano.pl)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
.
.
function wolacz ($imie) {
switch($imie)
{
case substr($imie,-2,2)=="ni":
return "1".$imie;
case substr($imie,-2,2)=="eł":
return "1".substr($imie,0,-2)."le";
case substr($imie,-2,2)=="tr":
return "1".$imie."ze";
case substr($imie,-2,2)=="ał":
return "1".substr($imie,0,-1)."le";
case in_array(substr($imie,-2,2),array("it","rt")):
return "1".substr($imie,0,-1)."cie";
case substr($imie,-4,4)=="ciek":
return "1".substr($imie,0,-4)."ćku";
case substr($imie,-4,4)=="siek":
return "1".substr($imie,0,-4)."śku";
case substr($imie,-3,3)=="per":
return "1".substr($imie,0,-2)."rze";
case substr($imie,-2,2)=="ek":
return "1".substr($imie,0,-2)."ku";
case substr($imie,-2,2)=="st":
return "1".substr($imie,0,-2)."ście";
case in_array(substr($imie,-3,3),array("cja","ria","lia","dia","wia","fia")) || in_array(substr($imie,-4,4),array("iela","bela","zula")):
return "2".substr($imie,0,-1)."o";
case in_array(substr($imie,-2,2),array("ja","ia","la")) :
return "2".substr($imie,0,-1)."u";
case substr($imie,-2,2)=="ba":
return "1".substr($imie,0,-1)."o";
case in_array(substr($imie,-1,1),array("n","f","m","w","p","s","b")):
return "1".$imie."ie";
case in_array(substr($imie,-1,1),array("g","h","j","k","l","z")):
return "1".$imie."u";
case substr($imie,-3,3)=="der":
return "1".substr($imie,0,-2)."rze";
case substr($imie,-1,1)=="r":
return "1".$imie."ze";
case substr($imie,-1,1)=="d":
return "1".$imie."zie";
case substr($imie,-1,1)=="a":
return "2".substr($imie,0,-1)."o";
case substr($imie,-1,1)=="y":
return "1".$imie;
default:
return "0".$imie;
}
}
function zamien($imie)
{
return "".(substr(wolacz(strtolower($imie)),0,1)=="1")? "Panie ".ucfirst(substr(wolacz(strtolower($imie)),1)):( (substr(wolacz(strtolower($imie)),0,1)=="2")? "Pani ".ucfirst(substr(wolacz(strtolower($imie)),1)):" ".ucfirst(substr(wolacz(strtolower($imie)),1)));
}

Popularity: 27% [?]

7 komentarzy »

  1. fajny skrypcik, jak dużą masz bazę wyjątków?
    np. Kuba

    komentarz by Valor — 22 kwietnia, 2008 @ 14:54

  2. funkcja jest na 14 case’ach.
    W sumie jest to ok 45 linii i ok. 1600 znaków (licząc białe znaki) kodu.

    Jeżeli chodzi np o imię Kuba, to załatwiłem to sprawdzaniem najpierw najdłuższych trafień, np.
    case in_array(substr($imie,-3,3),array("cja","ria","lia","dia","wia","fia"))
    i kilka innych, a Kuba załapuje się na sprawdzenie tylko ostatniej litery „a”. Także w sumie trochę tych porównań jest – 4 case’y (z 14) używają in_array.

    komentarz by Cypriano — 22 kwietnia, 2008 @ 15:49

  3. http://www.cypriano.pl/odmianaimion.php?imie=aleksander

    wymaga jeszcze dopracowania. pewnie nie da się zrobić tego uniwersalnie

    komentarz by Rafał — 6 listopada, 2008 @ 13:14

  4. Faktycznie nie działało dla Aleksandra.
    Na szybko dorobiłem jedną regułkę dla końcówek „der”…

    dzięki

    komentarz by Cypriano — 6 listopada, 2008 @ 14:34

  5. imo nie ma sznas zeby w jednym kb to ladnie dzialalo – i zreszta nie dziala – zle rozpoznaje plec imion Barnaba, Kuba, trzeba to rozgalezic, taka plaska struktura sobie nie poradzi.
    w okolicach 2006 zrobilem cos podobnego na 6kb (wdrazam do newsletterów) tzn podobnego pod wzgledem zasady, nie skutecznosci ;) – porozdrzewieniu dziala wg regul polskiej gramatyki a nie bazy imion i wyjatkow (czyli odmieni prawidłowo też rzeczowniki np gruszka pędzel itd)
    http://smutec.pl/imiona/

    komentarz by bujnos — 12 lutego, 2009 @ 14:10

  6. Faktycznie nie działa tak jak powinno.
    Żeby nie było, to dodałem jednego case’a ;)

    Ten skrypt robiłem dosyć dawno i dla dosyć ograniczonej liczby imion, więc pewnie nigdy nie będzie działał dla wszystkich. Jednak to że nie działał dla Kuby, to musiało gdzieś umknąć ;)
    Teraz gdybym to robił, to być może poszedłbym w strukturę drzewiastą, ale to się raczej nie zdarzy – mam inne rzeczy na głowie ;)

    komentarz by Cypriano — 12 lutego, 2009 @ 16:08

  7. [...] post: Cypriano " Skrypt tworzący wołacz imienia Share and [...]

    Pingback by Cypriano " Skrypt tworzący wołacz imienia — 25 maja, 2009 @ 3:59

Kanał RSS z komentarzami do tego wpisu. TrackBack URL

Dodaj komentarz

Powered by WordPress