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

#pspell-result .wrong-word {
        color: red;
        text-decoration: underline;
}

#pspell-result .show-suggests {
        cursor: pointer;
}

#pspell-suggests ul {
        display: none;
}

jquery.js

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

pspell.js

(function() {
var wordlinks = $('#pspell-result .show-suggests');
wordlinks.click(function() {
        var n = $(this).attr('id').match(/\d+/)[0];
        var id = 'suggests-'+n;
       
        $('#pspell-suggests ul').hide();
        $('#pspell-suggests ul#'+id).show();
})

})()

index.php

<?php
header('content-type: text/html; charset=utf8');
$text = '';
$suggests = '';

$regex_split = "\b";

if (isset($_POST['text'])) {
        $pspell = pspell_new('hu_HU',null, null, 'utf-8', PSPELL_FAST);

        $text = $_POST['text'];
       
        if (get_magic_quotes_gpc()) {
                $text = stripslashes($text);
        }
       
        $showSuggests = isset($_POST['suggests']);
       
        $words = preg_split('#'.$regex_split.'#u', $text.' ');
        $wrong = array();
        foreach ($words as &$word) {
                if(!pspell_check($pspell, $word) and !isset($wrong[$word])) {
                        $wrong[$word]['word'] = $word;
                        if ($showSuggests) {
                                $wrong[$word]['suggests'] = pspell_suggest($pspell, $word);
                        }
                }
        }
        $i = 0;
        $suggests = array();
        foreach ($wrong as &$word) {
                $result = htmlspecialchars($word['word']);
                if($showSuggests) {
                        $result = sprintf('<span class="show-suggests" id="wrong-word-%s">%s</span>',$i, $result );
                        if ($word['suggests']) {
                                $suggests[] = sprintf('<ul id="suggests-%s">%s</ul>', $i, '<li>'.implode('</li><li>', $word['suggests']).'</li>');
                        }
                }
                $text = preg_replace('#('.$regex_split.')('.preg_quote($word['word'],'#').')('.$regex_split.')#u','\\1'.sprintf('<span class="wrong-word">%s</span>', $result).'\\3', $text);
                $i++;
        }
        $suggests = implode('', $suggests);
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
        <head>
                <meta http-equiv="content-type" content="text/html; charset=utf-8" />
                <script type="text/javascript" src="jquery.js"></script>
                <link rel="stylesheet" type="text/css" href="pspell.css" />
        </head>
        <body>
                <div>
                        <form action="" method="post">
                                <input type="checkbox" name="suggests" /> Elírásoknál javaslatok kérése.<br />
                                <textarea name="text" cols="1" rows="1" style="width: 500px; height: 200px;"></textarea>
                                <br />
                                <input type="submit" value="Küldés" style="width: 500px;" />
                        </form>
                        <p id="pspell-result"><?php echo $text; ?></p>
                        <div id="pspell-suggests"><?php echo $suggests ?></div>
                </div>
                <script type="text/javascript" src="pspell.js"></script>
        </body>
</html>
Kategóriák: 
Megosztás/Mentés