Autor Zpráva
Antonn
Profil *
Zdravím,

potřeboval bych poradit jak rozdělit větu na slova za pomocí php.


Příklad.

Aneta utíkala nakupovat, koupila rohlíky a kávu.

php script by z toho udělal.

Aneta;utíkala;nakupovat;koupila;rohlíky;kávu.

ale pouze slova delší jak 3 slabiky aby script vynechal předložky a spojky a podobně, nejlepší to bude asi ukládat do pole, ale nevím přesně jak.

existuje nějaká funkce php, která by to zvládla?

---------------------------------------------------------------------
Chci to použít do klíčových slov do stránky kde každé slovo bude fungovat jako tag při kliknutí na něj se spustí hledání /hledat.php?co=(klíčové slovo z věty)


Předem díky

Anton
MCKAY
Profil
A co si třeba trochu vyhrát s funkcí
<?php explode();?>
? Tím si řetězec rozdělíš na slova (použij znak mezery jako oddělovač), potom bych třeba pomocí foreachu přidal ke každému prvku pole ten středník (možná je to moc složité, jestli to někdo nastíníte lépe, rád se poučím:-) ).
Radek9
Profil
<?php
$veta = "Aneta utíkala nakupovat, koupila rohlíky a kávu.";
$veta = explode(" ", $veta);
$vysledek = "";
foreach($veta as $slovo){
if(iconv_strlen($slovo)>3){
$vysledek .= $slovo.";";
}
else{
$vysledek .= $slovo." ";
}
}
?>

Edit: ještě jsem to trochu upravil.
Antonn
Profil *
Díky, to určitě vyzkouším a vypadá to, že to bude stačit.
Antonn
Profil *
Radek9: Také děkuji, jen ještě malý problém pokud si vypíšu například v této větě druhé slovo (utíkala) hodí mě to výsledek se špatnou diakritkou a to utĂ­kala. Nějaké řešení?
Timy
Profil
http://cz2.php.net/manual/en/function.str-word-count.php
Watchick
Profil
špatně nastavené kódování stránky a scriptu?
Radek9
Profil
Antonn:
Buďto pomocí headeru nebo pomocí meta tagu musíš nastavit kódovávní.
Majkl578
Profil
$text = 'Aneta utíkala nakupovat, koupila rohlíky a kávu.';
preg_match_all("~[\pL\.]{3,}~ui", $text, $matches);
var_dump($matches, implode(';', $matches[0]));


jen upozornuji, ze vyzaduje unicode (dnes standard)
Tresorg
Profil *
$text = 'Aneta utíkala nakupovat, koupila rohlíky a kávu.';
preg_match_all("~[\pL\.]{3,}~ui", $text, $matches);
var_dump($matches, implode(';', $matches[0]));


hodilo by se mi to taky ale nvm jak to vypsat abych k tomu moch dat odkazy. dik za pomoc
zedna
Profil *
tento kod funguje ale kdyz jsem to zkousel na jinem serveru(jeste nevim jake ma jine nastaveni), tak to vubec nefungovalo.
pomohlo az jedine

preg_match_all("~[\w\.]{2,}~ui", $text, $matches);


jenze problem je v tom, ze se vubec nezobrazuji znaky v diakritikou a co vic, nemohu nikde najit manual kde jsou jednotlive regularni vyrazy vypsany a vysvetleny

mate nekdo nejaky napad?
__construct
Profil
zedna:
Založ si vlastné vlákno - nepíš semm.

Moderátor Alphard: Viz Nejčastější potíže s PHP (FAQ). Jestli to nestačí, založte si nové vlákno.
Martin Adámek
Profil *
Pokud byste někdo potřeboval oddělovat slova i podle jiných znaků (tečka, čárka, závorka) než jen podle mezer
(a přitom zachovat informaci o tom, kde je jaký oddělovač, aby se věta zase dala slepit),
můžete využít tento skript: Náhrada funkce explode pro více oddělovačů
M
Nox
Profil
Když už je tu ta nekromancie ... co takhle http://php.net/manual/en/function.preg-split.php ?
Martin Adámek
Profil *
Pro můj účel není ten split až tak vhodný, potřeboval jsem udržet informaci i o oddělovačích, abych to zase mohl slepit (i když u splitu by se jakžtakž dal využít údaj offset, ale při použití i dvouznakových oddělovačů (escape sekvence) už by to nebylo efektivní)
Nox
Profil
Však taky neřešim tebe ale "Rozdělení věty na slova" ;) dávám alternativní řešení, když už se to oživilo

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: