4

PHP 用の aspell と組み合わせて pspell を使用しようとしています。

私はこの方法でそれをインストールしました:

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>";
    }
}

2 つの問題があります。

  1. この例はドイツ語のウムラウトを理解していません
  2. 名詞については、pspell_check が true を返すように大文字にする必要があります。単語がすべて小文字の場合、どうすれば 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

2 番目の質問についてですが、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 に答える