Autor Zpráva
Anonymní
Profil *
Zdravím, mám takový malý problém. Potřebuju najít podobné slova v poli:

array('text', 'tetíček', textový', 'magnet');

Tak jsem to udělal tak, že jsem pomocí foreach prošel todle pole a vzal první 3písmena. Následně jsem použil funkci array_count_values() pro zjíštění vět, které začínají na tyto 3písmena. Nyní bohužel nevím, jak zase zjístit zpátky ty slova.

Příklad:
$array = array('text', 'textíček', textový', 'magnet');
$koren = array();
foreach($array as $item){
$koren[$item] = substr($item, 0, 3);
}
$test = array_count_values($koren);

 //$test obsahuje array('tex' => 3, 'mag' => 1);
Díky.
Spectator
Profil
$array = array('text', 'textíček', 'textový', 'magnet'); 

Jinak tex není rozhodně kořenem slova textíček, u slova textíček je kořen slova text. Každé slovo má kořen jinde, ne pouze na začátku, takže spíš budeš potřebovat nějaký seznam kořenů různých slov a ty teprve nějak aplikovat
Anonymní
Profil *
No nepotřebuju to hned tak přesné, zatím jsem se rozhodl to řešit takto a vzít podobná slova (co mají první 3 písmena stejná. Ten apostrof je maličkost (překlep při psaní sem). Spíš bych potřeboval nějak dostat ten text do správné podoby. Nenapadá někoho jak to vyřešit? Přikláním se i jinému, lepšímu řešení.
Joker
Profil
Anonymní:
Tak pokud to má podle těch „kořenů“ vracet slova, bylo by asi lepší vyrobit pole, kde klíč bude „kořen“ a hodnota bude pole slov, tj.:
$pole["tex"] => array("text", "textíček", "textový")
$pole["mag"] => array("magnet")

Akorát teda, jak píše Spectator, například veškerá slova začínající předponami nad, pod, a podobně budou pohromadě (stejně jako třeba pohromadě, pohnout, pohlaví a Pohlová).

Přikláním se i jinému, lepšímu řešení.
To záleží na tom co to vlastně má dělat.

oprava: Hodnota v $pole["mag"] samozřejmě není "mag", ale "magnet"
Sir Tom
Profil
Anonymní:
Také zdravím,

nejdříve doporučuji načíst informace z http://cs.wikipedia.org/wiki/Stemming a posléze pak i z Google.
Třeba se tam dozvíš, jak z nějakých slov "vytřískat" kořen...
Aleš Janda
Profil
Takhle nějak:

$slova = array('text', 'textíček', 'textový', 'magnet');
$koreny = array();
foreach($slova as $slovo) {
  $koren = VratKoren($slovo);   //neco jako to substr()
  if (!array_key_exists($koren, $koreny))
    $koreny[$koren] = array();
  $koreny[$koren][] = $slovo;
}
foreach($koreny as $koren => $slovakoren) {
  echo 'Kořen '.$koren.':';
  for ($slovakoren as $slovo) echo ' '.$slovo;
  echo "\n";
}
Anonymní
Profil *
Sir Tom:
Díky, ale bohužel když vyzkouším nějaké třídy toho stemmingu tak to není asi pro české mutace, protože to nedokáže určit kořen českých slov takže budu muset zůstat u mého řešení.

Na ostatní řešení se mrknu jak budu mít trochu víc času, zatím děkuji.

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