PHP Conference Japan 2024

Pspell 函数

目录

添加注释

用户贡献的注释 14 个注释

dylan at wedefy dot com
17 年前
我发现 preg_replace_callback() 是检查大文本中的单词并更改未找到的单词的 HTML 颜色的最佳方法。以下是我编写的脚本,它可以做到这一点,并可以选择使用 pspell_suggest() 进行自动更正。我很乐意编写一个更好的正则表达式来忽略 <xml 标签内的文本>,但这真的不像听起来那么容易……
<?php
$pspell
= pspell_new('en','canadian','','utf-8',PSPELL_FAST);

function
spellCheckWord($word) {
global
$pspell;
$autocorrect = TRUE;

// 从 preg_replace_callback 的数组中获取字符串匹配
$word = $word[0];

// 忽略所有大写字母
if (preg_match('/^[A-Z]*$/',$word)) return $word;

// 返回字典中的单词
if (pspell_check($pspell,$word))
return
$word;

// 使用第一个建议自动更正,颜色为绿色
if ($autocorrect && $suggestions = pspell_suggest($pspell,$word))
return
'<span style="color:#00FF00;">'.current($suggestions).'</span>';

// 没有建议,颜色为红色
return '<span style="color:#FF0000;">'.$word.'</span>';
}

function
spellCheck($string) {
return
preg_replace_callback('/\b\w+\b/','spellCheckWord',$string);
}

echo
spellCheck('PHP is a reflecktive proegramming langwage origenaly dezigned for prodewcing dinamic waieb pagges.');
?>
输出:PHP is a reflective programming language originally designed for producing dynamic Web pages.
jeremy hepler
18 年前
在 Debian Sarge 上编译带有 pspell 的 PHP

apt-get install aspell libaspell15 libaspell-dev libpspell-dev

配置 PHP

./configure <您的其他选项> --with-pspell=/usr

make & install

如果之前的尝试失败或无法正常运行,请重新解压 PHP 源代码并在新的树中进行配置/编译
golotyuk at gmail dot com
14 年前
在 Debian/Ubuntu 上手动安装 PHP 需要您

apt-get install libpspell-dev
Alan Dunsmuir<alan at moonrake dot demon dot co dot uk>
17 年前
目前似乎存在一个影响 Windows 机器上 PSpell 功能的问题。

目前,Windows 版 PHP5 的编译版本默认不包含 PSpell,要激活这些功能,Windows 用户必须 (a) 安装 GNU ASpell;(b) 将文件 aspell-15.dll 复制到 Windows "Path" 语句中的目录(通常为 C:\Windows\System32);(c) 安装一个或多个 ASpell 词典;(d) 通过在 php.ini 文件中添加对 php_pspell.dll 的引用,并将文件本身移动到 PHP 主目录来启用 PHP 的 PSpell 扩展。

然而,当这一切都完成后,PSpell 似乎已被完全激活,但仍然存在一个问题。虽然所有 PSpell 函数在从 PHP 代码的“主体”部分引用时都能按预期工作,但如果将它们放在 PHP 函数中,系统会报告它无法找到指定词典(无论选择哪个)的任何单词列表。

我有一个使用 PSpell 的代码示例(取自 SAMS 的《PHP 5 In Practice》一书),它在基于 Unix 的 Web 服务器上运行良好,但在各种 Windows 机器上都会出现指示的错误消息。
kevina at gnu dot org
21 年前
Aspell 作者在此。

自 Aspell 0.50 起,不再使用 Pspell。无需下载和安装 Pspell 软件包,只需要 Aspell 0.50(或更高版本)。Aspell 现在为期望使用旧 Pspell 接口的程序(例如 PHP)提供了一个向后兼容接口。

即使 Aspell 现在提供了一个新的“Aspell”接口,您仍然需要使用 PHP Pspell 接口。如手册所述,Aspell PHP 接口与 *非常* 旧版本的 Aspell 一起使用。

如果这令人困惑,我深感抱歉,但这并不是我的错,因为我无法控制 PHP 的开发。最终应该为 PHP 提供一个新的 Aspell 接口,该接口使用 Aspell 0.50 提供的新 Aspell 接口,但现在 Pspell 接口可以正常工作。

注意:如果您希望使用 Aspell 的旧版本(_在_ 0.50 之前),则需要 Aspell 和 Pspell。
flint at modulusgroup dot com
19 年前
对于那些在 Win32 上使用 IIS 安装时遇到问题的人

症状:调用 pspell 函数时浏览器只是挂起。从命令行运行 PHP.exe 会导致 pspell 声称存在损坏的文件。在命令行上运行 Aspell 工作正常。

您需要新的数据文件

您可以在此处下载并获取有关它的更多信息
http://wiki.wordpress.org/SpellCheck

只需将 C:\Programs Files\Aspell\ 中的数据目录替换为您下载的新数据目录即可。

不再有问题。
fragment
17 年前
要解决 Windows 上在函数内部找不到单词列表的错误,请将对 pspell_new() 的调用移出函数并将返回值传递给您的函数,即

<?
function testSpell($pspell_link) {
echo pspell_check($pspell_link, "test") ? 'OK' : 'Not OK';
}
$pspell_link = pspell_new("en");
testSpell($pspell_link);
?>
sholland at napervillegi dot com
18 年前
早在 2002 年 10 月,csnyder at chxo dot com 就写了关于拼写函数的第一条评论,并通过直接调用 aspell 编写了一个非常复杂的拼写检查程序。同样,我编写了一个简化的 PHP 函数,该函数将对字符串进行拼写检查并在拼写错误的单词前后插入标签。不提供自动更正。

<?
function spellcheck($string) {
// 输入:$string:要进行拼写检查的文本。
// 返回:在拼写错误的单词前后插入“<strong>”和“</strong>”的字符串
// 拼写错误之后.

$pre='<strong>'; // 在每个拼写错误的单词前插入.
$post='</strong>'; // 在每个拼写错误的单词后插入.
$string=strtr($string,"\n"," ");
// 删除字符串中的换行符。(这在这种情况下会影响 aspell。)
$mistakes = `echo $string | /usr/local/bin/aspell list`;
// 获取错误列表.
$offset=0;
foreach (explode("\n",$mistakes) as $word)
// 遍历列表,插入 $pre 和 $post 字符串。我移动并
// 执行插入,并跟踪位置。全局替换
// 使用 str_replace($string,$pre.$work.$post) 如果
// 同一个拼写错误出现多次,则会出现问题.
if ($word<>"") {
$offset=strpos($string,$word,$offset);
$string=substr_replace($string, $post, $offset+strlen($word), 0);
$string=substr_replace($string, $pre, $offset, 0);
$offset=$offset+strlen($word)+strlen("$pre $post");
};
return $string;};
?>

要在您的系统上运行此程序,请查看 /usr/local/bin/aspell list 是否可以从 shell 运行。它需要从标准输入获取输入。您可能无法在没有 PHP 路径的情况下运行 aspell,因为 PHP 调用中的 PATH 变量可能与 shell 调用中的不同。
andrew at bluerhinos dot co dot uk
18 年前
如果您使用 Red Hat 或 Fedora,您可能需要使用

yum install pspell-devel

(修复:配置:错误:找不到 pspell)
Gregory Boshoff
19 年前
如果您收到错误消息
PSPELL 无法打开字典。原因
找不到语言“en”的单词列表。

在调用 pspell_check 之前添加以下行
$pspell_config = pspell_config_create("en");
$pspell_link = pspell_new_config($pspell_config);
tidd
20 年前
回复 csnyder 关于调用 aspell 而不是使用 aspell 或 pspell 库的评论

如果您运行的是低流量站点,这将正常工作,这是一个好主意。

但是,如果您有许多客户使用您的拼写检查脚本,则此方法无法很好地扩展,您应该考虑花时间使库正常工作。
webmaster at script-tease dot net
20 年前
创建拼写检查器的简单方法

<?

function spellcheck ( $string ) {
$words = preg_split('/[\W]+?/',$string);
$misspelled = $return = array();
$int = pspell_new('en');
foreach ($words as $value) {
if (!pspell_check($int, $value)) {
$misspelled[] = $value;
}
}
foreach ($misspelled as $value) {
$return[$value] = pspell_suggest($int, $value);
}
return $return;
}

?>
jrweir _a_t_ yahoo
20 年前
按照 Windows 上安装的详细说明操作后,我遇到了同样的问题,但能够通过执行以下操作来解决这些问题

首先,我将 aspell 安装数据目录(即 C:\Program Files\Aspell\data)中的所有文件复制到 Unix 计算机,并在所有文件上运行 dos2unix,然后将它们复制回来。

其次,在调用 pspell_new("en") 之前添加了这一行
pspell_config_create("en");

希望这对您也有效。
csnyder at chxo dot com
22 年前
作为对编译内置 aspell/pspell 函数(仅逐字检查)的一种替代方法,可以编写一个脚本,该脚本调用 aspell 作为 shell exec 来检查整个文本块

http://chxo.com/scripts/spellcheck.php
(有一个查看源代码选项)

不确定 Linux 或 Windows,但从 ports 集合安装 aspell 在 FreeBSD 上非常容易。毫无疑问,如果愿意,可以轻松修改此类脚本以使用 ispell。
To Top