使用php的pspell和aspell来处理德语语言。

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. 这个例子无法理解德文umlauts
  2. 对于名词,它们需要大写,以使pspell_check返回true。当我把单词都改成小写时,如何让它也变为true?例如,“Ball”会返回true,但“ball”会返回false。如何解决这个问题,使得“ball”检查返回true呢?

德语umlauts问题已经通过以下方式解决:$pspell_link = pspell_new("de", "", "", "UTF-8"); 但是大写字母的问题还没有解决 :-( - Mutatos
2个回答

2
尝试指定字符编码。我只需将第一行更改为以下内容,就能使您的代码正常工作:
$pspell_link = pspell_new("de", "", "", "utf-8");

此外:尽管这使“Verkäuferin”能够通过拼写检查,但在我将此行放入我的php.ini文件之前,我的服务器无法正确输出带有umlauts的字母。
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/>";
  }
}

哎呀!我刚意识到你已经解决了这个问题。如果你自己回答了问题,应该发布一个答案并批准它。评论不太明显。 :) - Lambart
1
在那里,我也尝试回答了你的第二个问题。希望这能帮助到某些人。 - Lambart

0

有一个简单的解决方案。只需按照以下步骤操作:

$word = ucfirst($word); //Always capitalize to avoid case sensitive error
if (!pspell_check($dict, $word)) {
   $suggestions = pspell_suggest($dictionary, $word);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接