Jur4 Blog - Jiří Petřek alias Jur4 - webdesign, seo, programovaní, php, css, html

PHP: Synonyma a ohýbání - edit

Při programování (zvyšování efektivity) Keywords Generátoru mě napadla delikátní věc :-D, zařadit k němu i vyhladávání synonym a implementovat ohýbání slov. Jenže jak to udělat, žádný česlý free slovník podobného rázu podle pana Gůgla neexistuje a vyrabět vlastní by bylo nad mé češtinářské síly :-D. Ale když už jsem si to umanul, tak jsem to prostě musel mít. Nakonec mě trklo jak na to a musim říct nepotřeboval jsem k tomu žádne složité konstrukce. Stačilo trocha regulárních vyrázů, práce s polem, vyhledávač www.jyxo.cz a jsou z toho dvě celkem šikovné funkce :-).

Funkce už zase funguji chyba by měla být vyřešena. Jen chci upozornit na to, že synonyma a ohýbání slov by bylo dobré cachovat, jelikož při větším počtu slov je neunosne pokaždé ziskávat fraze.

Vyhledávání synonym

Nejprvé kód, vysvětlím zaokamžik.

function vratSynonyma($slovo, $cp)
{
$slovo = trim($slovo);
$cont = file_get_contents('http://jyxo.cz/s?q=' . urlencode(iconv($cp, 'UTF-8', $slovo)) . '&d=cz');
$cont = iconv('UTF-8', $cp, $cont);
$cont = strip_tags($cont, '<br>');
$reg = 'Synonyma'.$slovo.': (.+)(, \(vše\))?<br><br>';
preg_match_all("!$reg!", $cont, $arrSyn);
$arrSynonyma = explode(',', $arrSyn[1][0]);
$arrSynonyma = array_map('trim', $arrSynonyma);
if($arrSynonyma[count($arrSynonyma)-1]=="(vše)"){
 unset($arrSynonyma[count($arrSynonyma)-1]);
}
return $arrSynonyma;
}

Tato funkce pracuje na principu toho, že z www.jyxo.cz stáhné stránku s vyhledávaným slovem (když si v jyxu necháte cokoliv vyhledat, v pravém sloupci máte vyčet synonym a ohýbání slova). Jako vstupní hodnota je slovo, ke kterému hledáme synonyma a jako druhá hodnota je kodování vašeho scriptu. Vrací pole hodnot. Pomoci regulárního výrazu vyjmu jen potřebnou část, kterou pak rozdělím podle čárek. Za zmínku stojí funkce array_map, tato funkce aplikuje na všechny prvky pole uvedené v 2 parametru funkci uvedenou v parametru 1.

Pozn.: Zakomentovaný řadek odkomentujte v případě toho, že máte stránku v jiném kódování než UTF-8 a na místo požadovaného CP napište vaše kódování.

Ohýbání slov

function ohybejSlovo($slovo, $cp)
 {
  $slovo = trim($slovo);
  $cont = file_get_contents('http://jyxo.cz/s?q=' . urlencode(iconv($cp, 'UTF-8', $slovo)) . '&d=cz');
  $cont = iconv('UTF-8', $cp, $cont);
  $cont = strip_tags($cont);
  $reg = 'Ohýbání(.+): (.+)\. ';
  preg_match_all("!$reg!", $cont, $arrSyn);
  $arrSynonyma = explode(',', $arrSyn[2][0]);
  $arrSynonyma = array_map('trim', $arrSynonyma);
  return $arrSynonyma;
 }

Pro tuto funkci platí úplně to samé, co pro funkci první s tím rozdílem, že je jiný regulární výraz.

Funkce můžete vyzkoušet na adrese
http://scripty.jur4.net/synonyma-ohybani/.
Pokud chcete zadat vlastni slovo použijte adresu
http://scripty.jur4.net/synonyma-ohybani/?slovo=vaseslovo,
defaultně je nastaveno slovo lampa

P.S. Funkce nebudou fungovat bez přistupu k netu. Pak by pravděpodobně funkce file_get_contents vratila chybu.

Info:


Líbí se ti text? Ano / Ne Dej mi o tom vědět! Nebo si jej můžeš zalinkovat! linkuj.cz / del.icio.us. Pokud chceš ještě něco víc, můžeš si text vytisknout, exportovat do PDF nebo na tento text upozornit e-mailem. Dále si ještě můžeš stáhnou RSS jeho komentářů, popřípadě ho i komentovat.

Jiří Petřek | 18.8.2006 Pá 21:36 | PHP | 16 komentářů

Komentáře k textu

czech-kid napsal:

Konecne prvni clovek co dovede nejco i bez googlu!! :-D Dobry to je ten kod ,zabere to cas ale super a diky za moznost stahnuti….! :-D

19.8.2006 So 04:58
[1]
Jiří Petřek napsal:

[1] czech-kid : Ono to s googlem ani nejde, protože u něj není výpis synonym a ohýbání slov. Ono to prakticky nejde s jinym vyhledavacem nez s jyxem. :-) A ja davam na stahnuti vsechny scripty. ;-)

19.8.2006 So 06:19
[2]
QuickShare napsal:

Zajimavy. Asi se nudis :-D

19.8.2006 So 15:38
[3]
Jiří Petřek napsal:

[3] QuickShare : Nenudim, ale je to nutna funkce pro generovani keywords z textu. ;-)

19.8.2006 So 16:42
[4]
Onecar napsal:

Hezká funkce, normální využití mně ale moc nenapadá ;-)

19.8.2006 So 17:20
[5]
Jiří Petřek napsal:

Jen jako přiklad co mě napadlo, vyhledavani → kdyz vyhledavas tak vratis relevantnejsi vysledky diky tomu ze pridas synonyma a sklonovani.

19.8.2006 So 17:37
[6]
stfu napsal:

ech mekna sranda myslim, ze by to mala dost praktickeho vyuzitia :)

20.8.2006 Ne 19:28
[7]
Jiří Petřek napsal:

[7] stfu : V to doufam, jen jsem zjistil ze pri vetsim poctu slov, je to dost pomale.

20.8.2006 Ne 20:23
[8]
Jiří Petřek napsal:

Asi budu muset vymyslet cacheovani. Nejspiš do databaze, nebo xml. Ale u xml bych zas musel resit atomicitu operaci, takze nevim co bude lepsi.

20.8.2006 Ne 21:47
[9]
Pampuch napsal:

Vůbec netuším k čemu bych to mohl třeba já využít.

20.8.2006 Ne 23:14
Jiří Petřek napsal:

[10] Pampuch : Kupříkladu při vyhledávání. Uživatel zada slovo „dům“ a ty vezmeš a vyhledaš všechny texty kde je dům + zjistiš jeho synonyma a vyhledáš i to myslim, že takhle by bylo vyhledávání na mnoha stránkách dokonalejší.

20.8.2006 Ne 23:36
stfu napsal:

[10] Pampuch : ano Jur4 to vystihol spravne najpraktickejsim pouzitim vyhladavanie

21.8.2006 Po 21:45
Pampuch napsal:

[11] Jiří Petřek : Ale co když uživatel zadá do vyhledávání slovo domům ?? A když zadává třeba slovotvorný základ z toho skloňování tak v DB použijeme pouze základ toho slova ne??

27.8.2006 Ne 07:03
Mazlo napsal:

Využití na vyhledávání je zajímavé. Jen ještě vyřešit to cachování :-D

6.9.2006 St 00:44
Jiří Petřek napsal:

[14] Mazlo : S tim je trochu problem. Neprisel jsem na to jak vyresit zavislosti, abych neukládl redudantní data. Protože mužu pro každe slovo vytvořit soubor s jeho synonymy, ale to potom budu mit synonyma i pro kazdy sklon slova, a to jsou data na vic.

6.9.2006 St 01:22
Jiří Petřek napsal:

Sry spolu s tunami spamu jsem smaznul i dva komentare, od error414 a svuj. Jednalo se o tak jak řešit cacheovani. To jen pro uplnost.

7.9.2006 Čt 00:45
Na texty napsané před více jak 60 dny nelze dále reagovat.

Úvod | Archív | Vzkaz | Download | Hledání | Odkazy | Fotoblog | Portfolio
Běží na RS2 RC4 s formátovačem Texy! | Hosting station.cz
© Jiří Petřek | Pagerank | Prohlášení o přístupnosti | Statistika | ^ Nahoru