May 6,2007
MediaWiki 的分類更名
整理資料是一件苦差事。但如果不這麼做,大量收集的資料終將雜蕪荒廢、難以查閱,喪失利用價值。因此對於從事創作的人來說,收集資料和整理資料的能力,是同等重要的。
在整理筆記的時候,為每篇文章決定標題可是件麻煩事。如果你想讓筆記井然有序,勢必要採取某種方法來整理大量的文字片段,無論是編目次、或是利用電腦的檔案系統建立階層化的目錄,總之你需要賦予每件事情一個名稱,乃至於大大小小的分類都需要命名。然而我們時常遭遇到的難題是:要在頃刻間決定名稱並不是一件易事。或許你會被迫選擇一個暫時的代號,待日後有機會再賦予正式命名;或許在隔了一段時日之後,你會想更變某些名稱或分類。對於傳統紙本形式的文件來說,任何更變都是困難且繁雜、令人望而生畏。但在現今架構於電腦設備之上的超文本系統,面對這些需求,已有了更具彈性的解決之道。
在整理筆記的時候,為每篇文章決定標題可是件麻煩事。如果你想讓筆記井然有序,勢必要採取某種方法來整理大量的文字片段,無論是編目次、或是利用電腦的檔案系統建立階層化的目錄,總之你需要賦予每件事情一個名稱,乃至於大大小小的分類都需要命名。然而我們時常遭遇到的難題是:要在頃刻間決定名稱並不是一件易事。或許你會被迫選擇一個暫時的代號,待日後有機會再賦予正式命名;或許在隔了一段時日之後,你會想更變某些名稱或分類。對於傳統紙本形式的文件來說,任何更變都是困難且繁雜、令人望而生畏。但在現今架構於電腦設備之上的超文本系統,面對這些需求,已有了更具彈性的解決之道。
MediaWiki 的重定向機制和移動條目(條目更名)功能,大體上已經解決了為文章命名的難題~~更名是如此簡易、消耗成本極低,因此我們的確可以先隨意決定一個暫時的名稱,日後若有必要可隨時修正。但基於設計理念及文字儲存形式的限制, MediaWiki 的分類並不能重定向,而更名必須以手動方式進行。如果想改變一個有上百條目的分類,那的確是件令人氣餒的苦工。
這個時候,我們需要的是能自動執行簡單手工作業的腳本程式,也就是俗稱的 "bot" 。
Pywikipediabot 是一個專為 MediaWiki 系統撰寫的 Python 腳本程式,目的是將許多在系統管理上時常遭遇的例行手工作業予以自動化。其中也提供了自動分類更名的功能。以下是本人在幾天前以 Pywikipediabot 成功進行分類更名的過程,包含從安裝、設定到執行的大致步驟,希望能給其他在 Windows 環境下使用單機 MediaWiki 的網友們做個參考。
測試環境
* Windows XP Home SP2 中文版
* Apache 2.0.55
* MySQL 5.0.18
* PHP 5.1.2
* MediaWiki 1.9.3
* Python 2.5.1
在此假設你已經安裝好 Windows 版的 Python 。
安裝與設定
首先要下載 Pywikipediabot ,下載點用 Google 搜尋即可得知。然後將檔案解壓縮在你喜歡的任意資料夾裡面。
在 Pywikipediabot 的主目錄下,新增一個名為 user-config.py 的檔案,在其中加入下列三行文字:
* zh 指定你所使用的語言。這可能和 MediaWiki 的設定有關,也可能無關,我不確定。
* mywiki 是用作某個檔案名稱,可隨意指定。慣例上會用全小寫。
* MyBot 必須是你的單機 MediaWiki 中事先建立好的一個用戶名稱,可隨意指定。慣例上會加上 bot 之類的字樣。注意這個字串前面有個 u 表示使用 unicode 。
在 families 目錄下,新增一個名為 mywiki_family.py 的檔案(建議可從 test_family.py 複製後更名),在其中加入下列文字:
* mywiki 必須和 user-config.py 裡面指定的名稱相同。
* self.langs 裡面指定 zh 語言的網址是 localhost (因為是單機版)。
* self.namespaces[4] 的 MyWiki 是你的單機 MediaWiki 所設定的 "project namespace" 。如果忘記的話,到沙箱裡輸入 {{ns:4}} 即可得知。
* version 是你安裝的 MediaWiki 的版本。這個參數好像可以省略?
* path 是你的 MediaWiki 的路徑。
執行
在主目錄下的 category.py 可執行一些與分類操作有關的工作。原本我們是可以在 Windows 的命令列模式下輸入下列指令:
可是 Windows XP 中文版的命令列是採用 Big-5 編碼, Python 看不懂輸入的字串。所以我們只好直接修改 category.py 的內容。在接近檔案結束的地方,你可以看到下列程式碼:
將其中的 oldCatTitle 和 newCatTitle 兩行修改一下:
如此一來 Python 就可以正常執行了。當然每次執行都要修改腳本檔案是有點麻煩,可惜我不知道有什麼更好的作法~~(汗)
Pywikipediabot 是個功能非常強大的腳本程式。其實它原本的功用是更複雜的自動 bot 的設計框架,目前在維基百科上運行的 bot 好像大部分都是從這個腳本改編而成的。有興趣的人可以再深入研究看看。
這個時候,我們需要的是能自動執行簡單手工作業的腳本程式,也就是俗稱的 "bot" 。
Pywikipediabot 是一個專為 MediaWiki 系統撰寫的 Python 腳本程式,目的是將許多在系統管理上時常遭遇的例行手工作業予以自動化。其中也提供了自動分類更名的功能。以下是本人在幾天前以 Pywikipediabot 成功進行分類更名的過程,包含從安裝、設定到執行的大致步驟,希望能給其他在 Windows 環境下使用單機 MediaWiki 的網友們做個參考。
測試環境
* Windows XP Home SP2 中文版
* Apache 2.0.55
* MySQL 5.0.18
* PHP 5.1.2
* MediaWiki 1.9.3
* Python 2.5.1
在此假設你已經安裝好 Windows 版的 Python 。
安裝與設定
首先要下載 Pywikipediabot ,下載點用 Google 搜尋即可得知。然後將檔案解壓縮在你喜歡的任意資料夾裡面。
在 Pywikipediabot 的主目錄下,新增一個名為 user-config.py 的檔案,在其中加入下列三行文字:
mylang = 'zh'
family = 'mywiki'
usernames[ 'mywiki' ][ 'zh' ] = u'MyBot'
* zh 指定你所使用的語言。這可能和 MediaWiki 的設定有關,也可能無關,我不確定。
* mywiki 是用作某個檔案名稱,可隨意指定。慣例上會用全小寫。
* MyBot 必須是你的單機 MediaWiki 中事先建立好的一個用戶名稱,可隨意指定。慣例上會加上 bot 之類的字樣。注意這個字串前面有個 u 表示使用 unicode 。
在 families 目錄下,新增一個名為 mywiki_family.py 的檔案(建議可從 test_family.py 複製後更名),在其中加入下列文字:
class Family(family.Family):
def __init__(self):
family.Family.__init__(self)
self.name = 'mywiki'
self.langs = {
'zh': 'localhost',
}
self.namespaces[4] = {
'_default': u'MyWiki',
}
self.namespaces[5] = {
'_default': u'MyWiki討論',
}
def version(self, code):
return "1.9.3"
def path(sefl, code):
return '/wiki/index.php'
* mywiki 必須和 user-config.py 裡面指定的名稱相同。
* self.langs 裡面指定 zh 語言的網址是 localhost (因為是單機版)。
* self.namespaces[4] 的 MyWiki 是你的單機 MediaWiki 所設定的 "project namespace" 。如果忘記的話,到沙箱裡輸入 {{ns:4}} 即可得知。
* version 是你安裝的 MediaWiki 的版本。這個參數好像可以省略?
* path 是你的 MediaWiki 的路徑。
執行
在主目錄下的 category.py 可執行一些與分類操作有關的工作。原本我們是可以在 Windows 的命令列模式下輸入下列指令:
category.py move -from:舊分類 -to:新分類
可是 Windows XP 中文版的命令列是採用 Big-5 編碼, Python 看不懂輸入的字串。所以我們只好直接修改 category.py 的內容。在接近檔案結束的地方,你可以看到下列程式碼:
elif action == 'move':
if (fromGiven == False):
oldCatTitle = wikipedia.input(u'Please enter the old name of the category:')
if (toGiven == False):
newCatTitle = wikipedia.input(u'Please enter the new name of the category:')
bot = CategoryMoveRobot(oldCatTitle, newCatTitle, batchMode, editSummary, inPlace)
bot.run()
將其中的 oldCatTitle 和 newCatTitle 兩行修改一下:
elif action == 'move':
if (fromGiven == False):
#oldCatTitle = wikipedia.input(u'Please enter the old name of the category:')
oldCatTitle = u'舊分類'
if (toGiven == False):
#newCatTitle = wikipedia.input(u'Please enter the new name of the category:')
newCatTitle = u'新分類'
bot = CategoryMoveRobot(oldCatTitle, newCatTitle, batchMode, editSummary, inPlace)
bot.run()
如此一來 Python 就可以正常執行了。當然每次執行都要修改腳本檔案是有點麻煩,可惜我不知道有什麼更好的作法~~(汗)
Pywikipediabot 是個功能非常強大的腳本程式。其實它原本的功用是更複雜的自動 bot 的設計框架,目前在維基百科上運行的 bot 好像大部分都是從這個腳本改編而成的。有興趣的人可以再深入研究看看。
引用URL
http://cgi.blog.roodo.com/trackback/3147183
回應文章 
雖然不是太相關的東西,不過我今天在老貓學出版的 blog 上看到一個還不錯的小東西:傻瓜專案孵蛋盒
http://b-oo-k.net/blog/blog.php/2007/203
http://b-oo-k.net/blog/blog.php/2007/203
Posted by 封狼
at May 9,2007 10:29
感謝封狼的介紹,
TiddlyWiki 的確是很方便、很好玩的工具,
封狼自己也有在使用嗎?
TiddlyWiki 的確是很方便、很好玩的工具,
封狼自己也有在使用嗎?
Posted by 采豫
at May 12,2007 14:39
我是有把這個敷蛋盒抓來玩,不過在之前並沒有用過這個程式。
因此自己編寫是沒有辦法的。
因此自己編寫是沒有辦法的。
Posted by 封狼
at May 17,2007 00:12
「docPointer」,我不確定這種應用程式是不是妳需要的,不過可以先看看展示:
http://www.docpointer.com/WebDevelopmentLinks/WebDevLinks.html
官方網頁在:http://www.docpointer.com/
除此之外,關於歷史紀錄,我個人認為可以用Version Control System。
因此用「docPointer」或類似的產品來幫助建立筆記建的關係連結,再利用Version Control System管理歷史紀錄。我猜,或許可以達到妳的需求也不一定?
http://www.docpointer.com/WebDevelopmentLinks/WebDevLinks.html
官方網頁在:http://www.docpointer.com/
除此之外,關於歷史紀錄,我個人認為可以用Version Control System。
因此用「docPointer」或類似的產品來幫助建立筆記建的關係連結,再利用Version Control System管理歷史紀錄。我猜,或許可以達到妳的需求也不一定?
Posted by sleepsleep
at May 28,2007 19:12
認真說起來,選擇 MediaWiki 主要的著眼點在於:這是一個維護狀況很健全的 Open Source 程式。基本上只要維基百科不倒, MediaWiki 應該就會持續維護下去。
此外我的需求是以大量文字記錄為主。有很多故事設定條目動輒幾千字,總條目數又很多(目前剛超過 1800 篇),通常要像 MediaWiki 這種背景是跑 SQL 資料庫的才有辦法負荷。當然硬體設備也要好一點,為了讓 MediaWiki 跑得順,我特地將記憶體加到 1 GB ,還是覺得不太夠用。
此外我的需求是以大量文字記錄為主。有很多故事設定條目動輒幾千字,總條目數又很多(目前剛超過 1800 篇),通常要像 MediaWiki 這種背景是跑 SQL 資料庫的才有辦法負荷。當然硬體設備也要好一點,為了讓 MediaWiki 跑得順,我特地將記憶體加到 1 GB ,還是覺得不太夠用。
Posted by 采豫
at June 10,2007 23:01