Egyszerű helyesírás-ellenőrző PHP-val. - pspell könyvtár

Egy kis helyesírás-ellenőrző programot fogok mutatni, amihez a PHP pspell könyvtárát használtam. Lényegében 3 függvényt használtam fel. Ezek pedig a pspell_new, pspell_check és pspell_suggest. Ezekkel már elérhető, hogy egy magyar szótár alapján az egyes szavak helyességét vizsgáljuk. Központozást és egyéb mondattani jellemzőket nem néz.

Szükséges

hozzá az aspell csomag. Illetve magyar szótárhoz az aspell-hu is. Ezen kívül a php5-pspell könyvtár kell, amit linuxon ( debian, ubuntu ) vagy apt-get -tel kell feltelepíteni, vagy aki a php-t is saját maga fordítja, az a --with-pspell kapcsolót kell használja. Ahhoz viszont szükséges előbb a libpspell-dev csomag is.

pspell_new

Ezzel lehet egy új szótárt megnyitni. Az első paraméterben a „hu_HU” megadja, hogy magyar szótár kell. A második paraméter különböző nyelvjárások megadására szolgál, mint például amerikai, brit, kanadai angol. Megadható zsargon is, de most a fontosabb két paraméter a 4. és 5. Ezek sorban a karakterkódolás és a mód. A móddal korlátozható a hibás szavakra adott javítási javaslatok száma. Én a leggyorsabb és legkevesebb javaslatot adó PSPELL_FAST konstanst adtam meg.

pspell_check

Ezzel lehet ellenőrizni egy szót. Fontos, hogy minden átadott string egy szónak számít. Tehát a mondatok szavakra darabolását meg kell oldani. Beleértve az írásjeleket is.

pspell_suggest

Végül pedig maradt a javaslatok lekérdezése. A javaslatokat ez a függvény tömbként adja vissza.

Helyesírás-ellenőrző program

Demo-t sajnos nem tudok mutatni, mert a tárhelyemen nincs telepítve a pspell. Ezért csak leírom, mit tud a program. Egy megadott szövegben megkeresi a hibás szavakat, majd azokat aláhúzva és kiemelve pirossal, megjeleníti. A hibás szavakra kattintva megjelennek a javaslatok, ha az űrlapon ez az opció ki van pipálva. Lehetne tovább cifrázni azzal, hogy a javaslatra kattintva a szövegben lecseréli a szót, de ezt én most nem oldottam meg.

És a program forráskódja:

pspell.css

  1. #pspell-result .wrong-word {
  2.         color: red;
  3.         text-decoration: underline;
  4. }
  5.  
  6. #pspell-result .show-suggests {
  7.         cursor: pointer;
  8. }
  9.  
  10. #pspell-suggests ul {
  11.         display: none;
  12. }

jquery.js

jQuery honlapjáról letölthető: jQuery

pspell.js

  1. (function() {
  2. var wordlinks = $('#pspell-result .show-suggests');
  3. wordlinks.click(function() {
  4.         var n = $(this).attr('id').match(/\d+/)[0];
  5.         var id = 'suggests-'+n;
  6.        
  7.         $('#pspell-suggests ul').hide();
  8.         $('#pspell-suggests ul#'+id).show();
  9. })
  10.  
  11. })()

index.php

  1. <?php
  2. header('content-type: text/html; charset=utf8');
  3. $text = '';
  4. $suggests = '';
  5.  
  6. $regex_split = "\b";
  7.  
  8. if (isset($_POST['text'])) {
  9.         $pspell = pspell_new('hu_HU',null, null, 'utf-8', PSPELL_FAST);
  10.  
  11.         $text = $_POST['text'];
  12.        
  13.         if (get_magic_quotes_gpc()) {
  14.                 $text = stripslashes($text);
  15.         }
  16.        
  17.         $showSuggests = isset($_POST['suggests']);
  18.        
  19.         $words = preg_split('#'.$regex_split.'#u', $text.' ');
  20.         $wrong = array();
  21.         foreach ($words as &$word) {
  22.                 if(!pspell_check($pspell, $word) and !isset($wrong[$word])) {
  23.                         $wrong[$word]['word'] = $word;
  24.                         if ($showSuggests) {
  25.                                 $wrong[$word]['suggests'] = pspell_suggest($pspell, $word);
  26.                         }
  27.                 }
  28.         }
  29.         $i = 0;
  30.         $suggests = array();
  31.         foreach ($wrong as &$word) {
  32.                 $result = htmlspecialchars($word['word']);
  33.                 if($showSuggests) {
  34.                         $result = sprintf('<span class="show-suggests" id="wrong-word-%s">%s</span>',$i, $result );
  35.                         if ($word['suggests']) {
  36.                                 $suggests[] = sprintf('<ul id="suggests-%s">%s</ul>', $i, '<li>'.implode('</li><li>', $word['suggests']).'</li>');
  37.                         }
  38.                 }
  39.                 $text = preg_replace('#('.$regex_split.')('.preg_quote($word['word'],'#').')('.$regex_split.')#u','\\1'.sprintf('<span class="wrong-word">%s</span>', $result).'\\3', $text);
  40.                 $i++;
  41.         }
  42.         $suggests = implode('', $suggests);
  43. }
  44. ?>
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.         <head>
  4.                 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  5.                 <script type="text/javascript" src="jquery.js"></script>
  6.                 <link rel="stylesheet" type="text/css" href="pspell.css" />
  7.         </head>
  8.         <body>
  9.                 <div>
  10.                         <form action="" method="post">
  11.                                 <input type="checkbox" name="suggests" /> Elírásoknál javaslatok kérése.<br />
  12.                                 <textarea name="text" cols="1" rows="1" style="width: 500px; height: 200px;"></textarea>
  13.                                 <br />
  14.                                 <input type="submit" value="Küldés" style="width: 500px;" />
  15.                         </form>
  16.                         <p id="pspell-result"><?php echo $text; ?></p>
  17.                         <div id="pspell-suggests"><?php echo $suggests ?></div>
  18.                 </div>
  19.                 <script type="text/javascript" src="pspell.js"></script>
  20.         </body>
  21. </html>
Kategóriák: 
Megosztás/Mentés

Új hozzászólás