Ik heb naar aanleiding van dit topic nog eventjes naar de woordophakker van de search in react gekeken en wat aangescherpt.
In react hakt men nu als volgt een bericht op in woorden:
[technisch]
$message = message html-output
PHP:
1
| <?$words = preg_split('([\s,:;/?]+|[.-]{2,})',strtolower(striptags($message)));foreach($words as $word){ if ( !preg_match('/^[\W]*([&#$.@]?[\w]+([@$.-][\w]+)*[%]?)[\W]*$/sU',trim($word),$matches) ) echo "Dit is geen woord :'(<br>"; else { $word = substr($word,0,30); if ( strlen($word) < 3 ) echo "Dit is geen woord :'(<br>"; else echo $matches[1] .' is een woord!<br>'; }}?> |
[/technisch]
[nontechnisch]
Men neme een bericht, en hakken die op in stukjes, splijtende daar waar zich een of meerdere spaties, tabs, regeleindes, kommas, :en, ;'s, /'s of ?'s voorkomen, en ook waar 2 of meer -jes of .en voorkomen.
(Waarom 2 of meer -jes of .en? bijvoorbeeld om later '192.168.1.1', '.Net' of 'test-omgeving' te kunnen herkennen als woorden)
Hierna nemen we de hierdoor verkregen 'grove' woorden en doen er het volgende mee:
-haal alle niet 'a-z 0-9 of underscore' characters voor het woord af, met de uitzondering als een enkele '.', '&', '$', '@' of '#' dat voor het later gevonden woord staat
-kijk daarna naar het woord bestaande uit 'a-z 0-9 of underscore' characters, met de mogelijkheid dat die onderbroken worden met (enkele) characters '.', '-', '$' of '@'.
-haal alle niet 'a-z 0-9 of underscore' characters achter het woord vandaan, met de uitzondering voor een enkele '%' aan het eind van het woord.
<> Als er geen woord passend op het algorithme wordt gevonden, is het geen geldig woord.
-Als het nu gevonden woord langer is dan 30 characters wordt het afgekapt tot 30
-Als het woord minder dan 3 characters bevat, is het geen geldig woord..
Anders wel!
(regex werkt ietsje anders maar dit komt aardig in de buurt)
[/nontechnisch]
Et voila. En nu dat doen voor elk woord ooit gepost op tweakers
Waarom zo moeilijk zal je denken... tis voor het wel herkennen van woorden als
'.Net'
'$phpvariabele'
'@home'
'#tweakers'
'100%'
'Disct@2'
'192.168.1.2'
'micro$oft'
'my-email@ikmoetgeenemailadressenposten.nl'
maar niet die zoals:
'...tjsa' (wat omgezet wordt naar 'tjsa')
'$$$$' - geen woord
'flex-' (wat omgezet wordt naar 'flex')
'he' - geen woord
'--(WaReZ)--' - (wordt 'WaReZ')
Wel een probleem voor mensen met een slechte interpuntie.Die dus dit soort dingen doen.Slecht he? of "test"test..
Want daarin pakt ie wel 'interpuntie.Die', 'doen.Slecht'.. maar wie wil nou toch zulke posts vinden
Nog suggesties voor verbeteringen?