pspell и aspell с php для немецкого языка

Я пытаюсь использовать pspell в сочетании с aspell для PHP.

Я установил его таким образом:

sudo apt-get install libpspell-dev 
sudo apt-get install php5-pspell
sudo apt-get install aspell-de

После этого вот пример кода:

$pspell_link = pspell_new("de");
var_dump(pspell_check($pspell_link, "Verkäuferin"));
if (!pspell_check($pspell_link, "Verkäuferin")) {
    $vorschlaege = pspell_suggest($pspell_link, "verkäuferin");
    foreach ($vorschlaege as $vorschlag) {
    echo "Mögliche Schreibweise:" . $vorschlag . "<br>";
    }
}

Есть две проблемы:

  1. Этот пример не понимает умлауты по-немецки
  2. Для субстантивных они должны быть в верхнем регистре, так что pspell_check возвращает true. Когда у меня есть слова в нижнем регистре, как стать правдой? Например, "Ball" вернет true, но "ball" вернет false. Как решить, что для "шарика" чек также вернет true?

2 ответа

Попробуйте указать кодировку символов. Я смог заставить ваш код работать, просто изменив первую строку на:

$pspell_link = pspell_new("de", "", "", "utf-8");

Кроме того: Хотя это и позволило Verkäuferin пройти проверку орфографии, мой сервер не смог правильно выводить буквы с умлаутами, пока я не вставил эту строку в файл php.ini.

default_charset = "utf-8"

Для получения дополнительной информации о кодировке символов с помощью PHP эта страница выглядит полезной:

http://kore-nordmann.de/blog/php_charset_encoding_FAQ.html

Что касается вашего второго вопроса, хотя пакет aspell, который использует PHP, поддерживает сопоставление без учета регистра, к сожалению, PHP не позволяет вам выбирать эту опцию. Вот лучшее решение, которое я мог придумать:

$pspell_link = pspell_new("de", "", "", "utf-8");
$wort = "verkäuferin";
$richtig = pspell_check($pspell_link, $wort);
if (!$richtig) {
    $vorschlaege = pspell_suggest($pspell_link, $wort);
    // make a copy of the array with all words in lowercase, so we can still
    // display the original suggestions if necessary
    $kleinschrift_vorschlaege = array_map('strtolower', $vorschlaege);
    // convert the original word to lowercase before comparing it
    $richtig = in_array(strtolower($wort), $kleinschrift_vorschlaege);
}
echo "'$wort' ist " . ($richtig ? "" : "nicht") . " richtig buchstabiert.<br/>";
if (!$richtig) {
  echo "Mögliche Schreibweisen:<br/>";
  foreach ($vorschlaege as $vorschlag) {
    echo "&nbsp; &nbsp; " .  $vorschlag . "<br/>";
  }
}

Есть простое решение. Просто сделай это:

$word = ucfirst($word); //Always capitalize to avoid case sensitive error
if (!pspell_check($dict, $word)) {
   $suggestions = pspell_suggest($dictionary, $word);
}
Другие вопросы по тегам