Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zamiana imion z mianownika na wołacz.
Forum PHP.pl > Forum > PHP
Zdzisiu
Szukam skryptu ktory bedzie zamienial w locie imiona z mianownika na wolacz.
Macie pomysl jak to zrobic?

Mam w tej chwili baze danych ok 1200 imion razem z datami imienin. Chcialbym na stronie zrobic powitanie typu:

Witaj Piotrze, masz dzis imieniny.
chmolu
Z tym może być bardzo ciężko. Język polski nie jest zbyt logiczny, więc i pod tym względem ciężko będzie znaleźć jakąś regułę, która umożliwi ci stworzenie jakiegoś uniwersalnego kodu.
Kshyhoo
Raczej gotowca nie znajdziesz.A może pokombinoweć? Np:
  1. <?php
  2. $tablica["Piotr"]="Piotrze";
  3. $tablica["Jarosław"]="Jarosławie";
  4. $tablica["Katarzyna"]="Katarzyno";
  5. ?>

Albo:
  1. <?php
  2. define("_Piotr","Piotrze");
  3. define("_Jarosław","Jarosławie");
  4. define("_Katarzyna","Katarzyno");
  5. ?>
ActivePlayer
ciężko tylko ze słownikiem chyba... no bo jednak trzeba samemu napisać
kszychu
Można poszukać zależności i oprogramować tylko wyjątki. Np, żeńskie kończą sięwszystkie na "a" i zamieniają na "o". Czyli we wszystkich imionach konczących się na a zamieniasz a na o.
Gorzej z męskimi, ale też można poszukać zależności.

Męskie zakończone na "r" - dodajemy "ze" (Piotr - Piotrze), na 'd' - dodajemy "zie" (Bernard - Bernardzie), zakończone na inne spółgłoski - dodajemy "ie" (Krzysztof - Krzysztofie).

No i to by chyba załatwiało jakieś 95% przypadków, nie? A może wszystkie?
Kshyhoo
Za dużo kombinacji i możliwości pomyłki. Bo choćby imię "Maria"...
kszychu
Cytat(Kshyhoo @ 2005-12-16 23:48:44)
Za dużo kombinacji i możliwości pomyłki. Bo choćby imię "Maria"...

blink.gif Maria - Mario: zasada jak dla wszystkich żeńskich.
Kshyhoo
Jan Maria Rokita => Janie Maria Rokito ? O to mi chodzi.
kszychu
Cytat(Kshyhoo @ 2005-12-16 23:56:35)
Jan Maria Rokita => Janie Maria Rokito ? O to mi chodzi.

thumbsupsmileyanim.gif Ale dałeś do pieca! Myślałem, że z krzesła spadnę!
Poza tym to jużnieaktualne, bo pan Rokita używa teraz tylko i mienia Jan.
Kshyhoo
To miał być przykłąd. No to niech będzie Maria Kowalski...
ActivePlayer
Prawdopodobnienstwo jest takie jak nazwanie kobiety męskim imieniem...
kszychu
Cytat(Kshyhoo @ 2005-12-17 00:06:26)
To miał być przykłąd. No to niech będzie Maria Kowalski...

A to już leprzy przykład. Obrazuje, że co drugi facet w polsce nosi żeńskie imię. To wyjątki. Sytacje, gdy pierwsze imię nie kończy sięna "a", a drugie kończy można łatwo wychwycić (o ile chcemy przechowywac w ogóle drugie imię) i nie odmieniać wtedy drugiego imienia.

W sytuacji gdy facet na na pierwsze jakieś żeńskie imię, niech liczy się z tym, że jego imię jest odmieniane jako żeńskie.
Kshyhoo
Myślałem o czymś takim:
  1. <?php
  2. @ $sql_connect= mysql_pconnect("localhost" , "root" , "");
  3. if(!$sql_connect)
  4. {
  5. echo "Próba połączenia z bazą danych nie udana, spróbuj później.";
  6. }
  7.  
  8. $_mysql_query = mysql_query ("SELECT imiona FROM imieniny WHERE data='0000-" . date("m") . "-" . date("d") . "'" )
  9.  or die ( "Dzisiaj nie ma imienin!" );
  10.  $imiona = mysql_result ( $_mysql_query , 0 );
  11.  
  12. $tablica["Adelajda"]="Adelajdo";
  13. $tablica["Alina"]="Alino";
  14. $tablica["Katarzyna"]="Katarzyno";
  15.  
  16. $tekst = "$imiona! Masz dziś imieniny!";
  17.  
  18. while (list($i, $wartosc) = each($tablica)) {
  19. $tekst = str_replace($i, "$wartosc", $tekst);
  20. }
  21.  
  22. echo $tekst;
  23. ?>
andrzejb
przy rejestracji uzytkownika daj zeby wpisalswoje imie w wolaczu tongue.gif winksmiley.jpg to jest przerost tresci nad formą ogolnie
Levabul
FUNKCJA EDYTOWANA

Właśnie to napisałem tak z ciekawości powinno działać w 99% przypadków jeżeli nie w 100 biggrin.gif (nie miałem czasu testować tongue.gif). Wiem ze rozwiazanie nie jest optymalne ale nie miałem czasu na optymalizację ;/

  1. <?php
  2. function wolacz ($imie) {
  3. if (substr ($imie, -1, 1) == 'a')
  4. return $imie = substr ($imie, 0, -1).'o';
  5. elseif (substr ($imie, -3, 2) == 'ie')
  6. return substr ($imie, 0, -3).substr ($imie, -1, 1).'u';
  7. elseif (substr ($imie, -2, 1) == 'e')
  8. return substr ($imie, 0, -2).substr ($imie, -1,1).'u';
  9. elseif (substr ($imie, -1, 1) == 'r')
  10. return $imie.'ze';
  11. elseif (substr ($imie, -1, 1) == 'd')
  12. return $imie.'zie';
  13. elseif (substr ($imie, -1, 1) == 'k' || substr ($imie, -1, 1) == 'l' || substr ($imie, -1, 1) == 'g' || substr ($imie, -1, 1) == 'h' || substr ($imie, -1, 1) == 'j' || substr ($imie, -1, 1) == 'l')
  14. return $imie.'u';
  15. elseif (substr ($imie, -1, 1) == 't')
  16. return substr($imie, 0, -1).'cie';
  17. elseif (substr ($imie, -1, 1) == 'm' || substr ($imie, -1, 1) == 'n' || substr ($imie, -1, 1) == 'b' || substr ($imie, -1, 1) == 'c' || substr ($imie, -1, 1) == 'f' || substr ($imie, -1, 1) == 'p' || substr ($imie, -1, 1) == 's' || substr ($imie, -1, 1) == 'z')
  18. return $imie.'ie';
  19. elseif (substr ($imie, -2, 2) == 'ów')
  20. return substr ($imie, 0, -2).'owie';
  21. else
  22. return $imie;
  23. }
  24. ?>
VGT
Grzegorz -> Grzegorzie
Daniel -> Danlu
Tomasz -> Tomaszie

coś nie bardzo winksmiley.jpg
Chyba jednak nie da się stworzyć na tyle uniwersalnej funkcji by zadziałała zawsze.
Levabul
FUNKCJA EDYTOWANA
i o to mi chodziło biggrin.gif Dobrze że ktoś to testuje bo moze zawierać wiele błędów tongue.gif Poprawiona funkcja:
  1. <?php
  2. function wolacz ($imie) {
  3. if (substr ($imie, -2, 2) == 'ia' || substr ($imie, -2, 2) == 'ja' || substr ($imie, -2, 2) == 'la')
  4. return $imie = substr ($imie, 0, -1).'u';
  5. elseif (substr ($imie, -1, 1) == 'a')
  6. return $imie = substr ($imie, 0, -1).'o';
  7. elseif (substr ($imie, -2, 2) == 'eł')
  8. return substr ($imie, 0, -2).'le';
  9. elseif (substr ($imie, -2, 2) == 'oł')
  10. return substr ($imie, 0, -2).'ele';
  11. elseif (substr ($imie, -2, 2) == 'eń')
  12. return substr ($imie, 0, -2).'niu';
  13. elseif (substr ($imie, -3, 2) == 'ie' && !(substr ($imie, -3, 1) == 'c' || substr ($imie, -3, 1) == 'h' || substr ($imie, -3, 1) == 'i' || substr ($imie, -3, 1) == 'j' || substr ($imie, -3, 1) == 'l' || substr ($imie, -3, 1) == 'm' || substr ($imie, -3, 1) == 'n' || substr ($imie, -3, 1) == 'o' || substr ($imie, -3, 1) == 'r' || substr ($imie, -3, 1) == 'u' || substr ($imie, -3, 1) == 'y'))
  14. return substr ($imie, 0, -3).substr ($imie, -1, 1).'u';
  15. elseif (substr ($imie, -2, 1) == 'a' || substr ($imie, -2, 1) == 'e' && !(substr ($imie, -3, 1) == 'c' || substr ($imie, -3, 1) == 'h' || substr ($imie, -3, 1) == 'i' || substr ($imie, -3, 1) == 'j' || substr ($imie, -3, 1) == 'l' || substr ($imie, -3, 1) == 'm' || substr ($imie, -3, 1) == 'n' || substr ($imie, -3, 1) == 'o' || substr ($imie, -3, 1) == 'r' || substr ($imie, -3, 1) == 'u' || substr ($imie, -3, 1) == 'y'))
  16. return substr ($imie, 0, -2).substr ($imie, -1,1).'u';
  17. elseif (substr ($imie, -1, 1) == 'r')
  18. return $imie.'ze';
  19. elseif (substr ($imie, -3, 3) == 'ies')
  20. return substr ($imie, 0, -3).'sie';
  21. elseif (substr ($imie, -1, 1) == 'd')
  22. return $imie.'zie';
  23. elseif (substr ($imie, -1, 1) == 'k' || substr ($imie, -1, 1) == 'l' || substr ($imie, -1, 1) == 'g' || substr ($imie, -1, 1) == 'h' || substr ($imie, -1, 1) == 'j' || substr ($imie, -1, 1) == 'l' || substr ($imie, -2, 2) == 'rz' || substr ($imie, -2, 2) =='sz' || substr ($imie, -1, 1) == 'c')
  24. return $imie.'u';
  25. elseif (substr ($imie, -1, 1) == 't')
  26. return substr($imie, 0, -1).'cie';
  27. elseif (substr ($imie, -1, 1) == 'm' || substr ($imie, -1, 1) == 'n' || substr ($imie, -1, 1) == 'b' || substr ($imie, -1, 1) == 'f' || substr ($imie, -1, 1) == 'p' || substr ($imie, -1, 1) == 's' || substr ($imie, -1, 1) == 'z')
  28. return $imie.'ie';
  29. elseif (substr ($imie, -2, 2) == 'ów')
  30. return substr ($imie, 0, -2).'owie';
  31. elseif (substr ($imie, -2, 2) == 'ał')
  32. return substr ($imie, 0, -1).'le';
  33. elseif (substr ($imie, -1, 1) == 'ś')
  34. return substr ($imie, 0, -1).'siu';
  35. else
  36. return $imie;
  37. }
  38. ?>


Testować, testować smile.gif
marcman
Cytat(kszychu @ 2005-12-16 22:42:45)
Można poszukać zależności i oprogramować tylko wyjątki. Np, żeńskie kończą sięwszystkie na "a" i zamieniają na "o". Czyli we wszystkich imionach konczących się na a zamieniasz a na o.

Kasia -> Kasiu tongue.gif
kszychu
Kolejna reguła dla żeńskich:
końcówka ia (ja), la - 'a' zamieniamy na 'u' (Kasia, Mariola, Maja, Ania ale już nie Anna)
pozostałe - 'a' zamieniamy na 'o' (Anna)

Pierwsza reguła stosuje się raczej do zdrobnień.
Levabul
Poprawione smile.gif
Celudor
Poprawiona funkcja pod UTF-8

  1. <?php
  2. function wolacz($imie)
  3. {
  4. if (substr ($imie, -2, 2) == 'ia'
  5. || substr ($imie, -2, 2) == 'la')
  6. {
  7. return $imie = substr ($imie, 0, -1).'u';
  8. }
  9. else if (substr ($imie, -1, 1) == 'a')
  10. {
  11. return $imie = substr ($imie, 0, -1).'o';
  12. }
  13. else if (substr ($imie, -2, 2) == 'eł')
  14. {
  15. return substr ($imie, 0, -2).'le';
  16. }
  17. else if (substr ($imie, -2, 2) == 'oł')
  18. {
  19. return substr ($imie, 0, -2).'ele';
  20. }
  21. else if (substr ($imie, -3, 3) == 'eń')
  22. {
  23. return substr ($imie, 0, -2).'niu';
  24. }
  25. else if (substr ($imie, -1, 1) == 'r')
  26.  {
  27.  if(substr($imie, -2, 1) == 'e')
  28.  {
  29. return substr($imie, 0, -2).'rze';
  30.  }
  31.  else
  32.  {
  33.  return $imie.'ze';
  34.  }
  35.  }
  36. else if (substr ($imie, -3, 2) == 'ie' 
  37. && !(substr ($imie, -3, 1) == 'c'
  38. || substr ($imie, -3, 1) == 'h'
  39. || substr ($imie, -3, 1) == 'i'
  40. || substr ($imie, -3, 1) == 'j'
  41. || substr ($imie, -3, 1) == 'l'
  42. || substr ($imie, -3, 1) == 'm'
  43. || substr ($imie, -3, 1) == 'n'
  44. || substr ($imie, -3, 1) == 'o'
  45. || substr ($imie, -3, 1) == 'r'
  46. || substr ($imie, -3, 1) == 'u'
  47. || substr ($imie, -3, 1) == 'y'))
  48.  {
  49. return substr ($imie, 0, -3).substr ($imie, -1, 1).'u';
  50.  }
  51.  else if (substr ($imie, -2, 1) == 'e'
  52.  && !(substr ($imie, -3, 1) == 'c' 
  53.  || substr ($imie, -3, 1) == 'h'
  54.  || substr ($imie, -3, 1) == 'i'
  55.  || substr ($imie, -3, 1) == 'j'
  56.  || substr ($imie, -3, 1) == 'l'
  57.  || substr ($imie, -3, 1) == 'm'
  58.  || substr ($imie, -3, 1) == 'n'
  59.  || substr ($imie, -3, 1) == 'o'
  60.  || substr ($imie, -3, 1) == 'r'
  61.  || substr ($imie, -3, 1) == 'u'
  62.  || substr ($imie, -3, 1) == 'y'))
  63.  {
  64. return substr ($imie, 0, -2).substr ($imie, -1,1).'u';
  65.  }
  66.  else if (substr ($imie, -3, 3) == 'ies')
  67.  {
  68.  return substr ($imie, 0, -3).'sie';
  69.  }
  70.  else if (substr ($imie, -1, 1) == 'd')
  71.  {
  72. return $imie.'zie';
  73.  }
  74.  else if (substr ($imie, -1, 1) == 'k'
  75.  || substr ($imie, -1, 1) == 'l'
  76.  || substr ($imie, -1, 1) == 'g'
  77.  || substr ($imie, -1, 1) == 'h'
  78.  || substr ($imie, -1, 1) == 'j'
  79.  || substr ($imie, -1, 1) == 'l'
  80.  || substr ($imie, -2, 2) == 'rz'
  81.  || substr ($imie, -2, 2) =='sz'
  82.  || substr ($imie, -1, 1) == 'c')
  83.  {
  84.  return $imie.'u';
  85.  }
  86.  else if (substr ($imie, -1, 1) == 't')
  87.  {
  88. return substr($imie, 0, -1).'cie';
  89.  }
  90.  else if (substr ($imie, -1, 1) == 'm'
  91.  || substr ($imie, -1, 1) == 'n'
  92.  || substr ($imie, -1, 1) == 'b'
  93.  || substr ($imie, -1, 1) == 'f'
  94.  || substr ($imie, -1, 1) == 'p'
  95.  || substr ($imie, -1, 1) == 's'
  96.  || substr ($imie, -1, 1) == 'z'
  97.  || substr ($imie, -1, 1) == 'w')
  98.  {
  99. return $imie.'ie';
  100.  }
  101.  else if (substr ($imie, -3, 3) == 'ów')
  102.  {
  103. return substr ($imie, 0, -2).'owie';
  104.  }
  105.  else if (substr ($imie, -3, 3) == 'ał')
  106.  {
  107. return substr ($imie, 0, -2).'le';
  108.  }
  109.  else if (substr ($imie, -2, 2) == 'ś')
  110.  {
  111. return substr ($imie, 0, -2).'siu';
  112.  }
  113.  else
  114.  { 
  115. return $imie;
  116.  }
  117. }
  118. ?>


Poprawiona funkcja pod UTF-8
  1. <?php
  2. function wolacz($imie)
  3. {
  4. if (substr ($imie, -2, 2) == 'ia' || substr ($imie, -2, 2) == 'la')
  5. return $imie = substr ($imie, 0, -1).'u';
  6. else if (substr ($imie, -1, 1) == 'a')
  7. return $imie = substr ($imie, 0, -1).'o';
  8. else if (substr ($imie, -2, 2) == 'eł')
  9. return substr ($imie, 0, -2).'le';
  10. else if (substr ($imie, -2, 2) == 'oł')
  11. return substr ($imie, 0, -2).'ele';
  12. else if (substr ($imie, -3, 3) == 'eń')
  13. return substr ($imie, 0, -2).'niu';
  14. else if (substr ($imie, -1, 1) == 'r')
  15. if(substr($imie, -2, 1) == 'e')
  16. return substr($imie, 0, -2).'rze';
  17. else
  18. return $imie.'ze';
  19. else if (substr ($imie, -3, 2) == 'ie' && !(substr ($imie, -3, 1) == 'c' || substr ($imie, -3, 1) == 'h' || substr ($imie, -3, 1) == 'i'
  20. || substr ($imie, -3, 1) == 'j' || substr ($imie, -3, 1) == 'l' || substr ($imie, -3, 1) == 'm' || substr ($imie, -3, 1) == 'n' || substr ($imie, -3, 1) == 'o'
  21. || substr ($imie, -3, 1) == 'r' || substr ($imie, -3, 1) == 'u' || substr ($imie, -3, 1) == 'y'))
  22. return substr ($imie, 0, -3).substr ($imie, -1, 1).'u';
  23. else if (substr ($imie, -2, 1) == 'e' && !(substr ($imie, -3, 1) == 'c' || substr ($imie, -3, 1) == 'h' || substr ($imie, -3, 1) == 'i'
  24. || substr ($imie, -3, 1) == 'j' || substr ($imie, -3, 1) == 'l' || substr ($imie, -3, 1) == 'm' || substr ($imie, -3, 1) == 'n'
  25. || substr ($imie, -3, 1) == 'o' || substr ($imie, -3, 1) == 'r' || substr ($imie, -3, 1) == 'u' || substr ($imie, -3, 1) == 'y'))
  26. return substr ($imie, 0, -2).substr ($imie, -1,1).'u';
  27. else if (substr ($imie, -3, 3) == 'ies')
  28. return substr ($imie, 0, -3).'sie';
  29. else if (substr ($imie, -1, 1) == 'd')
  30. return $imie.'zie';
  31. else if (substr ($imie, -1, 1) == 'k' || substr ($imie, -1, 1) == 'l' || substr ($imie, -1, 1) == 'g' || substr ($imie, -1, 1) == 'h'
  32. || substr ($imie, -1, 1) == 'j' || substr ($imie, -1, 1) == 'l' || substr ($imie, -2, 2) == 'rz' || substr ($imie, -2, 2) =='sz' || substr ($imie, -1, 1) == 'c')
  33. return $imie.'u';
  34. else if (substr ($imie, -1, 1) == 't')
  35. return substr($imie, 0, -1).'cie';
  36. else if (substr ($imie, -1, 1) == 'm' || substr ($imie, -1, 1) == 'n' || substr ($imie, -1, 1) == 'b' || substr ($imie, -1, 1) == 'f'
  37. || substr ($imie, -1, 1) == 'p' || substr ($imie, -1, 1) == 's' || substr ($imie, -1, 1) == 'z' || substr ($imie, -1, 1) == 'w')
  38. return $imie.'ie';
  39. else if (substr ($imie, -3, 3) == 'ów')
  40. return substr ($imie, 0, -2).'owie';
  41. else if (substr ($imie, -3, 3) == 'ał')
  42. return substr ($imie, 0, -2).'le';
  43. else if (substr ($imie, -2, 2) == 'ś')
  44. return substr ($imie, 0, -2).'siu';
  45. else
  46. return $imie;
  47. }
  48. ?>
wjtk
Wybaczcie, za odkopanie trupa, ale temat uważam za ciekawy i aktualny wink.gif. Skrypt działa bardzo dobrze, dla większości imion, ale znalazłem błąd:
Grzesiek -> Grzesieku
Paweł -> Paweł

Macie pomysł jak to poprawić?
cipronex
Cytat(wjtk @ 4.02.2011, 15:25:11 ) *
Wybaczcie, za odkopanie trupa, ale temat uważam za ciekawy i aktualny wink.gif. Skrypt działa bardzo dobrze, dla większości imion, ale znalazłem błąd:
Grzesiek -> Grzesieku
Paweł -> Paweł

Macie pomysł jak to poprawić?


Mnie w ogóle dziwi sposób zabierania się do tego. To jest oczywiste, że nie da się wszystkiego przewidzieć, chociażby dlatego, że w przypadku niektórych imion mamy do czynienia z jerami, które w przypadku polskiego przyjął formę "e" ruchomego. Nie da się stworzyć reguły, zwłaszcza biorąc pod uwagę oboczności. Ja to widzę w jeden sposób. Tworzymy tabelę, w której będą imiona w mianowniku i przypisane do nich imiona w wołaczu.

Zastanawia mnie też, w jakim celu autor wątku chce taką operację przeprowadzić?
roobik
Cytat(cipronex @ 4.02.2011, 15:41:30 ) *
Wybaczcie, za odkopanie trupa(...)

Ja również, ale jest tego "przyczyna". Mowa tu jest tylko o imionach polskich, a nierzadko zdarzają się imiona z innego języka (głównie z angielskiego). Przykłady? Proszę:
Nelly (skoro był p. Jan wink.gif ), Agnes, Zamhri, czy Akiv (litewskie imię zarówno żeńskie, jak i męskie)... Przykładów można mnożyć i moim zdaniem (jeśli nie mam racji - proszę o poprawienie mnie), dokładając w skrypcie poszczególne wyjątki, dojdziemy do tego, że będą się one wzajemnie wykluczać...
Zyx
Od tego są słowniki fleksyjne języka polskiego. Są tam wymienione wszystkie formy gramatyczne danego wyrazu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.