login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Zoekmachine

Offline legende - 23/04/2005 12:04 (laatste wijziging 23/04/2005 12:14)
Avatar van legendeOnbekend Hallo,

ik heb een zoekmachine die zoekt in een SF database,
waar hebreeuwse tekst in de \heb velden gecodeerd zit.
hier is mijn code:
  1. <?php
  2. if(!isset($_SESSION['sdbh-dictionary']))
  3. $_SESSION['sdbh-dictionary'] = file($database) or die("Failed reading the database.");
  4.  
  5. $contents=$_SESSION['sdbh-dictionary'];
  6. $found=false;
  7.  
  8. foreach($contents as $nmmr=>$curlijn)
  9. {
  10. $thisfound=false;
  11. $lexfound=false;
  12. $confound=false;
  13. if(ereg("\\heb ".$searchstring,$curlijn))
  14. {
  15. $i=0;
  16. while (!$thisfound && !eregi("\\00000",$contents[$i]))
  17. {
  18. $i++;
  19. if(ereg("\\lex .*".$lexical,strtolower($contents[$nmmr+$i])) && strlen($contents[$nmmr+$i])>5)
  20. $lexfound=true;
  21. if(ereg("\\con .*".$contextual,strtolower($contents[$nmmr+$i])) && strlen($contents[$nmmr+$i])>5)
  22. $confound=true;
  23. if($lexfound&&$confound)
  24. $thisfound=true;
  25. }
  26. }
  27. if($thisfound)
  28. {
  29. $found=true;
  30. echo "<a href=\"entry.php?id=".$nmmr."\" target=\"entry\">".convunicode(substr($curlijn,5))."</a><br />";
  31. }
  32. }
  33. if(!$found)
  34. echo "Nothing found!";
  35. echo "</p></body></html>";
  36. ?>

hij zoekt perfect als ik op AB en het lexical domein Plants en het contextual domein Navigation>Life zoek, maar hij neemt ook de woordjes op die geen lexical en/of contextual domein hebben.:s
Zo ziet mijn SF database eruit:
Citaat:
heb Hebreeuwse woord
def Dit betekent het
lex Lexicale domein
con Contextueel domein
0000
heb Hebreeuwse woord
def Dit betekent het
lex Lexicale domein
con Contextueel domein
0000
heb Hebreeuwse woord dat sowieso in de resultaten wordt weergegeven
def Dit betekent het
0000
heb Hebreeuwse woord
def Dit betekent het
lex Lexicale domein
con Contextueel domein
0000
ENZ...

Kan iemand me helpen?

2 antwoorden

Gesponsorde links
Offline Thomas - 23/04/2005 13:32
Avatar van Thomas Moderator Hmm... Die dictionary is dus één groot textbestand, met op elke regel ofwel \heb, \def, \lex, \con, of \00000 waarbij \lex en \con optioneel zijn en \00000 een eindmarkering van de definitie van een Hebreeuws woord aanduidt, correct ?

Als de ereg in regel 13 iets oplevert, is het interessant om de rest van zo'n "blok" te bekijken. Dit ga je doen met de while-lus die start in regel 16. Het lijkt mij dat $content[$i] in deze regel moet veranderen naar $contents[$nmmr + $i] ?

Omdat je in regel 19 en 21 strtolower toepast op je content-string, is het misschien beter om eregi() (case-insensitive match) te gebruiken in plaats van ereg() (die case-sensitive (hoofdlettergevoelig) matched).

Als er ook entries gevonden worden die eigenlijk niet in het resultaat thuis horen zou je haast denken dat $lexfound en $confound (en dus $thisfound) ten onrechte de waarde true krijgen. Het zou niets uit mogen maken, maar je zou kunnen proberen om accolades te zetten om de if-blokken van regel 19, 21 en 23. Je zou ook als debug de waarden van deze variabelen kunnen echo-en, om te zien wat deze zijn.

Voor de rest kan ik niet echt iets vreemds ontdekken ?
Offline legende - 23/04/2005 14:05 (laatste wijziging 23/04/2005 14:29)
Avatar van legende Onbekend Ik ben er uit!!!!
in regel 16 moest het
  1. while (!$thisfound && !eregi("\\00000",$contents[$nmmr+$i]))
zijN!!!

Thanx FangorN!!!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.207s