PHP Doku:: Macht Vorschläge für die Schreibweise eines Wortes - function.pspell-suggest.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzUnterstützung menschlicher Sprache und ZeichenkodierungPspellPspell Funktionenpspell_suggest

Ein Service von Reinhard Neidl - Webprogrammierung.

Pspell Funktionen

<<pspell_store_replacement

GNU Recode>>

pspell_suggest

(PHP 4 >= 4.0.2, PHP 5)

pspell_suggestMacht Vorschläge für die Schreibweise eines Wortes

Beschreibung

array pspell_suggest ( int $dictionary_link , string $word )

pspell_suggest() gibt ein Array möglicher Schreibweisen für das angegebene Wort zurück.

Parameter-Liste

dictionary_link

word

Das überprüfte Wort

Rückgabewerte

Gibt ein Array möglicher Schreibweisen zurück.

Beispiele

Beispiel #1 pspell_suggest()-Beispiel

<?php
$pspell_link 
pspell_new("de");

if (!
pspell_check($pspell_link"Testt")) {
    
$vorschlaege pspell_suggest($pspell_link"Testt");

    foreach (
$vorschlaege as $vorschlag) {
        echo 
"Mögliche Schreibweise: $vorschlag<br />";
    }
}
?>


2 BenutzerBeiträge:
- Beiträge aktualisieren...
andoryuusama at gmail dot com
30.12.2004 22:37
To get a more meaningful "did you mean", I use metaphones on the suggestion list, this helps to insure that the word is one that "sounds" closer to the word spelled wrong.

<?php
function spellcheck ( $string ) {
  
$words = split(' ',$string);
  
$misspelled = $return = array();
  
pspell_config_create("en",PSPELL_NORMAL);
  
$int = pspell_new('en');
   foreach (
$words as $value) {
      
$check = preg_split('/[\W]+?/',$value);
       if ((
$check[1] != '') and (strpos("'",$value) > 0) ) {$check[0] = $value;}
       if ((
$check[0] + 1 == 1) and (!pspell_check($int, $check[0]) )) {
          
$res  .= '<SPAN class="misspelled" style="color:#FF0000; font-weight:bold;">' . $value . ' </SPAN> ';
          
$poss = pspell_suggest($int,$value);
          
$orig = metaphone($value);
           foreach (
$poss as $suggested)
           {
                
$ranked[metaphone($suggested)] = $suggested;
           }
           if (
$ranked[$orig] <> '') {$poss[1] = $ranked[$orig];}
          
          
$res2  .= '<SPAN style="color:#CC8800; font-weight:bold">' . $poss[1] . ' </SPAN> ';

       } else {
      
$res .= $value . ' ';
      
$res2 .= $value . ' ';
       }
   }

  
$n[1] = $res;
  
$n[2] = $res2;
   return
$n;
}
?>

this helps to correct for the fact that pspell_suggest's first idea of a replacement is just the first in the alphabet.
webmaster at hostpure dot com
13.04.2004 2:42
It seems if you are trying to do something similar to the Google 'Did you mean:' suggestions and are selecting the first word given by the pspell_suggest() function, then it will not work well with custom dictionaries and replacements. Take the following code for example:

<?php
    $pspell_config
= pspell_config_create("en");
   
pspell_config_personal($pspell_config, "/home/user/public_html/custom.pws");
   
pspell_config_repl($pspell_config, "/home/user/public_html/custom.repl");
   
$pspell_link = pspell_new_config($pspell_config);

   
$words = preg_split ("/\s+/", $query);
   
$ii = count($words);

    global
$spellchecked;
   
$spellchecked = "";
   
    for(
$i=0;$i<$ii;$i++){

        if (
pspell_check($pspell_link, $words[$i]))
        {
           
$spellchecked .= $words[$i]." ";
        }
        else
        {
           
$erroneous = "yes";
           
$suggestions = pspell_suggest($pspell_link, $words[$i]);
           
$spellchecked .= $suggestions[0]." ";
        }
    }
    if(
$erroneous == "yes")
    {
        echo
"Did you mean: <i>".$spellchecked."?";
    }
    else
    {
        echo
$spellchecked . " is a valid word/phrase";
    }
?>

This works fine most of the time, and gives suggestions to what you meant when inserting a spelling mistake with most inputs. However, if you specify a custom replacement and then search for the misspelt word that you specified, then if it is not the first returned suggestion it wont be used in the 'Did you mean' end result. What you need to do is open up the custom dictionary using fopen and fread, and then for each of the suggested words, check if they are in the dictionary. If the suggested word is in the custom dictionary then use it in the 'Did you mean' part, if not, discard it and try the next. Hope this helps anyone who comes across this problem with trying to get more accurate suggestions.



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)