Autor | Zpráva | ||
---|---|---|---|
Anonymní Profil * |
#1 · Zasláno: 20. 12. 2011, 15:17:33
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); |
||
Spectator Profil |
#2 · Zasláno: 20. 12. 2011, 16:29:02 · Upravil/a: Spectator
$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 * |
#3 · Zasláno: 20. 12. 2011, 16:33:14
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 |
#4 · Zasláno: 20. 12. 2011, 17:05:10 · Upravil/a: Joker
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 |
#5 · Zasláno: 20. 12. 2011, 17:09:15
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 |
#6 · Zasláno: 20. 12. 2011, 20:22:13
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 * |
#7 · Zasláno: 21. 12. 2011, 12:38:42
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. |
||
Časová prodleva: 12 let
|
0