4

我正在尝试将 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?
4

2 回答 2

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#which-charset-encoding-do-strings-have-in-php

至于你的第二个问题,虽然 PHP 使用的 aspell 包支持不区分大小写的匹配,但不幸的是 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/>";
  }
}
于 2012-07-27T01:36:35.063 回答
0

有一个简单的解决方案。只需这样做:

$word = ucfirst($word); //Always capitalize to avoid case sensitive error
if (!pspell_check($dict, $word)) {
   $suggestions = pspell_suggest($dictionary, $word);
}
于 2015-04-10T06:41:34.527 回答