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
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
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
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);
}
?>
<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>