Autor Zpráva
1Pupik1989
Profil
Opět dobrý den přeji všem.

Přemýšlím nad teorií, jak zjistit "Cool" psaní typu "muck" nebo "aHoJqY".

U prvního příkladu jsem si udělal pole, kde jsem si definoval tato slova a následně je zaznamenával přes preg_match. Toto řešení by ještě tak nějak v rámci možností fungovalo.

U druhého příkladu už to bylo horší, ale napadlo mě, že bych řetězec mohl kontrolovat podle počtu velkých písmen ve větě či slově. Jenže když někdo napíše slovo celé velkým písmenem, tam už jsem ze hry.

Otázka zní jak rozpoznat oba příklady? Opět nepotřebuji ani kousek zdrojového kódu, případně jen pošťouchnout v regulárním výrazu nebo se dobrat k nějaké teorii.

Hezký den přeje Pupik.
CZechBoY
Profil
když píšeš celý slovo velkýma písmenama tak se občas stane, že máš poslední písmeno malý, na to si dej taky bacha ;)
vem si jakýkoliv slovo a zkus ho "zkrášlit" velkýma písmenama, většinou zvětšíš jen písmena H,K,R,D,T,N,M a tak, podle toho by se to dalo taky možná poznat ;)
1Pupik1989
Profil
Ještě mě napadlo udělat regulární výraz s rozlišováním malých a velkých písmen. Potom by stačilo jen dát podmínku, že další písmeno bude malé. Zkusím a dám vědět.
Marek88
Profil
Asi bych to udělal tak, že bych nastavil nějaké limity na výskyty různých neduhů. Pak by se v celém odstavci (celém textu) počítaly poměry např.:
pocet_slov_s_ruzne_velkymi_pismeny / pocet_slov_celkem
pocet_vyskytu_pismene_q / pocet_slov_celkem
pocet_vyskytu_pismen_sh / pocet_slov_celkem
atd...

Musíš si analyzovat pár textů, abys správně nastavil ty limity (ale jednoduše by se to mělo blížit nule).
Pak se ještě musíš rozhodnout, jestli budeš zahazovat příspěvek kvůli porušení jednoho limitu nebo třeba třech, pěti, všech...

Stejně to ale nikdy nebude 100%. Kdybych napsal třeba: "Použij MySQL", tak se to asi také identifikuje jako "cool písmo".
1Pupik1989
Profil
No napsal jsem něco takového jako první verzi. Moc se mi to ale nezdá.

<?php
$retezec = "Použij MySQL";

if(preg_match_all("/([a-zěščřžýáíéůú](?![a-zěščřžýáíéůú]))/", $retezec, $vysledek)){

  $nalezene_pocet = count($vysledek[0]);
  $celkovy_pocet = strlen(preg_replace("/([[:punct:][:space:]]+)/","",$retezec));
    
  echo "<br>Nalezených: ".$nalezene_pocet;
  echo "<br>Z celkových:".$celkovy_pocet;
}else{
  echo "Žádný výsledek";
}
?>
Sir Tom
Profil
1Pupik1989:
Co se týče toho aHoJKy, tak toto bych asi řešil stylem, že bych spočítal v každém slově malá a velká písmena zvlášť. Následoval by poměr (menší číslo ku větší číslo) a pokud by výsledné číslo bylo v rozmezí např. 0.7 až 0.3, tak pak bych o slově prohlásil, že se jedná o Cool slovo. Jestliže někdo napíše slovo pouze velkými nebo pouze malými, tak vyjde poměr nula, což o slově říká, že je to normální slovo.

Samozřejmě, že tento návrh má své mouchy - je potřeba vytvořit výjimky pro jednopísmenné a dvojpísmenné slova...
1Pupik1989
Profil
Nuže vymyslel jsem toto, leč ale výsledek se mi pořád moc nelíbí :(

<?php
function CoolPsani($retezec){
$Objekt->vstup = $retezec;

foreach(preg_split('/[\s\n\r]+/', $retezec) as $slovo){
  preg_match_all("/([a-zěščřžýáíéůúňďť])|([A-ZĚŠČŘŽÝÁÍÉÚŮŇĎŤ])/", $slovo, $velka_mala);
 
  $pocet_malych = strlen(implode("",$velka_mala[1]));
  $pocet_velkych = strlen(implode("",$velka_mala[2]));

  if($pocet_malych / $pocet_velkych !== false){
  $pomer_pismen = $pocet_malych < $pocet_velkych ? $pocet_malych / $pocet_velkych : $pocet_velkych / $pocet_malych;
  
  $Objekt->pomer_pismen[] = $pomer_pismen;

  }
}

if(preg_match_all("/([a-zěščřžýáíéůúňďť](?![a-zěščřžýáíéůúňďť ]))/", $retezec, $vysledek)){

  $nalezene_pocet = count($vysledek[0]);
  $celkovy_pocet = strlen(preg_replace("/([[:punct:][:space:]]+)/","",$retezec));
    
  $Objekt->stridani = $celkovy_pocet / $nalezene_pocet;
}

  return $Objekt;
}
?>
Saky
Profil
Nemyslím, že je to dobré řešení, co slova co je tak vhodné psát, např. MySQL, phpMyAdmin, atd?
1Pupik1989
Profil
Ty bez problemu projdou.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0