Zadejte hledaný výraz...

FAQ – datamining, mod_rewrite

Kamil Tomšík
verified
rating uzivatele
(3 hodnocení)
30. 6. 2010 00:21:29
- - = DATA MINING = - -
aneb odborne oznaceni asi nejcastejsiho dotazu - jak vydolovat z nejakeho textu nejakou konkretni cast...
reseni zalezi na tom, jestli se jedna o XML, JSON a nebo jiny predem nespecifikovany text:
1. JSON - nejjednodussi (a nejmene caste) - pouzijeme json_decode a nechame si od php vratit objekt - pak uz jenom pristoupime k tomu, co potrebujeme
(json_decode muze vratit i pole - pokud je to klasicke indexovane, jinak vraci objekt)
2. XML/HTML (nejcastejsi) - tady jsou reseni 2 - bud regexy a nebo simplexml/dom+xpath:
http://php.net/simplexml
http://php.net/dom
http://www.w3.org/TR/xpath20/
http://interval.cz/clanky/zaklady-jazyka-xpath/
http://www.zvon.org/xxl/XPathTutorial/General_cze/examples.html
Ve zkratce:
$dom = new DOMDocument ();
$dom -> loadHTML ( 'this anchor is not inside div' );
$xml = simplexml_import_dom ( $dom );
//vypise vsechny divy s tridou anchor-div
foreach ( $xml -> xpath ( "//div" ) as $anchor_div )
echo $anchor_div -> asXML (), "n";
//vypise vsechny anchory
foreach ( $xml -> xpath ( "//a" ) as $anchor )
echo $anchor -> asXML (), "n";
//vypise vsechny url ze vsech anchoru
foreach ( $xml -> xpath ( "//a/@href" ) as $anchor_url )
echo $anchor_url, "n";
//vypise vsechny url ze vsech anchoru uvnitr divu
foreach ( $xml -> xpath ( "//div/a/@href" ) as $anchor_url )
echo $anchor_url, "n";
//vypise url z posledniho anchoru
foreach ( $xml -> xpath ( "//a/@href" ) as $anchor_url )
echo $anchor_url, "n";
priklady xpath:
http://msdn.microsoft.com/en-us/library/ms256086.aspx
http://www.w3schools.com/XPath/xpath_examples.asp
http://www.zvon.org/xxl/XPathTutorial/Output/examples.html
3. regexy - HTML/XML/jakykoliv textovy obsah
regularni vyrazy jsou v php zastoupeny jak temi POSIXovymi, tak temi PERLovskymi (PCRE), ty prvni jsou pomale, slabe, ale jsou standard - umi je grep, sed, gvim, ale taky notepad2, total commander, a pravdepodobne jeste spousta dalsich programu.
Vetsinu z Vas budou ale zajimat ty druhe, cili preg - jsou podporovane ve vsech hlavnich programovacich jazycich (ikdyz se jejich implementace trosicku odlisuje) - tzn. Java, Javascript, PHP a samozrejme Perl, urcite bude existovat i nejaka knihovna pro C a C++, ale nas zajima tentokrat jenom PHP. Popisovat to cele znovu by bylo asi zbytecne, takze sem hodim par odkazu pro nastudovani a pak par ukazek pouziti:
http://interval.cz/clanky/perl-compatible-regularni-vyrazy-v-php-zakladni-konstrukce/ - perfektni serial na intervalu
http://php.net/manual/en/book.pcre.php - seznam fci, ktere mame k dispozici v pripade PCRE
http://www.php.net/manual/en/reference.pcre.pattern.syntax.php - manualova stranka popisujici syntax PCRE - je to zahrabane celkem hluboko v dokumentaci, tak to sem supnu primo...
http://www.regextester.com/ - tester regexu - umi javascript, preg (php) i posix - urcite se bude hodit...
http://www.sitepoint.com/blogs/2006/09/26/the-joy-of-regular-expressions-1/ - hezky tutorial na sitepointu
priklady:
$html = 'this anchor is not inside div';
//tyto 3 priklady vypisou vzdy to same - pole poli, kde kazdy prvek obsahuje: cele html odkazu, pak url odkazu a pak text odkazu...
//lisi se jenom tim, ze ty slozitejsi budou fungovat i na neobykle odkazy typu: , kdezto ty jednodussi ne...
//parsnuti obvykleho odkazu (neni 100%ni)
if ( preg_match_all ( '%
(.*?)%si', $html, $matches, PREG_SET_ORDER ) )
print_r ( $matches );
//to same, tentokrat zvlada i rozdilne uvozovky ("') - ve vyslednem poli bude jeste jeden prvek navic, ten bude obsahovat bud ' a nebo "
if ( preg_match_all ( '%(.*?)%si', $html, $matches, PREG_SET_ORDER ) )
print_r ( $matches );
//a tentokrat zvladneme i vice mezer a libovolnou pozici href atributu
if ( preg_match_all ( '%(.*?)%si', $html, $matches, PREG_SET_ORDER ) )
print_r ( $matches );
doporucuju vyzkouset si a pohrat si s tim...
jinak u regexu obecne plati, ze napiseme takovy regex, ktery dostacuje nasemu pouziti, protoze napsat 100%ne neprustrelny (a zaroven fungujici) vyraz by nam zabralo neporovnatelne vetsi mnozstvi casu (tudiz doporucuju jit spise cestou prvnich prikladu, pokud si nejste tak uplne jisti)
- - = MOD_REWRITE = - -
jeste takova rychla vsuvka na tema mod_rewrite - ne ze bych na to byl extra odbornik, ale vetsina problemu je zpusobena tim, ze v .htaccess chybi tohle:
tento radek by mel byt umisteny hned za RewriteEngine On, jak je uvedeno...
tema se bude rozsirovat - ale chce to cas :-) a mozna, ze ho taky rozdelim do vice temat, podle kategorii, uvidime, kolik bude materialu...
30. 6. 2010 00:21:29
https://webtrh.cz/diskuse/faq-datamining-mod_rewrite/#reply522038
Patrik
verified
rating uzivatele
(2 hodnocení)
30. 6. 2010 09:34:52
Dobry napad, ale myslim, ze skor si mohol namiesto tem vyuzit funkciu Blog, ktora tu bola spravena.
30. 6. 2010 09:34:52
https://webtrh.cz/diskuse/faq-datamining-mod_rewrite/#reply522037
Kamil Tomšík
verified
rating uzivatele
(3 hodnocení)
30. 6. 2010 09:46:20
Napsal Diehard;531520
Dobry napad, ale myslim, ze skor si mohol namiesto tem vyuzit funkciu Blog, ktora tu bola spravena.
vidis, o tom jsem vubec nevedel, tak uvidime, no... omrknu to a kdyztak to prepisu, dle casu
EDIT: necham to tady - protoze to ma lidi odradit od pokladani zbytecnych otazek a na blogu by to tezko melo stejny efekt...
EDIT: updatovano - jeste tam par prikladu prihodim, ale konecne jsem pridal i neco k regexum....
30. 6. 2010 09:46:20
https://webtrh.cz/diskuse/faq-datamining-mod_rewrite/#reply522036
pehape
verified
rating uzivatele
(8 hodnocení)
18. 11. 2010 18:37:23
Zkoušel jsem si to "Ve zkratce: PHP kód:" - 1. příklad.
A všechno pracuje tak, jak bych čekal - pouze to "vypise url z posledniho anchoru" vypisuje:
anchor1url
anchor2url
anchor3url
a já bych čekal jen poslední anchor3url
Je chyba u mě nebo jsem to nějak špatně pochopil? Díky.
18. 11. 2010 18:37:23
https://webtrh.cz/diskuse/faq-datamining-mod_rewrite/#reply522035
crs
verified
rating uzivatele
(1 hodnocení)
30. 11. 2012 01:39:59
@vedouci: Docela užitečný on-line testovač různých funkcí, včetně regulárních výrazů - http://www.functions-online.com/
Testování skriptů v PHP online - http://writecodeonline.com/php/
30. 11. 2012 01:39:59
https://webtrh.cz/diskuse/faq-datamining-mod_rewrite/#reply522034
Pro odpověď se přihlašte.
Přihlásit