2024 年 PHP Conference Japan

Pspell 函式

目錄

新增筆記

使用者貢獻的筆記 14 則筆記

dylan at wedefy dot com
17 年前
我發現 preg_replace_callback() 是檢查大量文字中的單字並更改未找到單字的 HTML 顏色的最佳方法。以下是我撰寫的執行此操作的程式碼,並可選擇使用 pspell_suggest() 進行自動更正。我很樂意撰寫更好的正規表示式來忽略 XML 標籤內的文字 (<text inside xml tags>),但这真的不像聽起來那麼容易……
<?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 呼叫中,PATH 變數可能與 shell 呼叫中的不同,因此您可能無法在沒有路徑的情況下為 PHP 執行 aspell。
andrew at bluerhinos dot co dot uk
18 年前
如果您使用 Red Hat 或 Fedora,您可能需要使用

yum install pspell-devel

(修正:configure: error: Cannot find 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;
20 年前
jrweir _a_t_ yahoo

我在按照 Windows 安裝的詳細說明進行操作後遇到了同樣的問題,但能夠透過執行以下操作來解決這些問題

首先,我將 aspell 安裝目錄的 data 資料夾中的所有檔案(例如 C:\Program Files\Aspell\data)複製到 Unix 機器上,並對所有檔案執行 dos2unix,然後再複製回來。
其次,在 pspell_new("en") 呼叫之前新增這一行

pspell_config_create("en");
希望這也對您有效。
除了使用內建的 aspell/pspell 函式(這些函式只能逐字檢查)之外,另一種方法是撰寫一個腳本,透過 shell 執行 aspell 來檢查整個文字區塊。

http://chxo.com/scripts/spellcheck.php
(網頁有提供「檢視原始碼」的選項)

我不確定在 Linux 或 Windows 上的情況,但在 FreeBSD 上從 ports collection 安裝 aspell 非常簡單。如果您願意,這個腳本可以很容易地修改成使用 ispell。
To Top