Hi! I’m clsung

Hi! I’m clsung

clsung’s blog site

Hi! I’m clsung RSS Feed
 
 
 
 

快快樂樂學 Python – 由 Ferret 與 PyLucene 談起

標題當然是假的,又不是天才,怎麼快快樂樂學 Python 。也不是要出書,只是不知道要下什麼標題。

事情由來是這樣的,我在 survey 在 FreeBSD 上可以 run 的 lucene 程式,原本中意的是 ferret(1) ,不過看了一下文件發現

  1. API 不相容
  2. 不能讀 dotLucene(2) 的 index ,其實意思就是跟原生的 Java lucene 不相容啦

基於上述兩個理由,我只好含淚斬 Ruby 了。不然上面那個標題就會是「快快樂樂學 Ruby」了。

Python 有個 PyLucene 可以用,而它其實有點接近原生版本的 Lucene ,因為

  1. API 大致相容,說大致是因為我才剛學,不敢保證
  2. 可以 access dotLucene 的 index file ,這很重要,敝實驗室的流派就是點點點(3)
  3. 它是用 gcj 編譯的,感覺會比 Java 快一點,而我也可以確定大部份的功能是相同的。籠統地說,算是 Lucene 的 Python-binding 。

不過說要學個語言不是那麼容易,雖然說比起英語德語加法語來說,學個程式語言比較起來容易太多了,可是沒有個入門文件也是不行的。上網一查「Python」,結果台灣陣亡,第一頁最有用的就是第一筆: Python 教學文件。這可以位在香港的,看來我以前沒學 Python 也不能怪自己,資源少的可憐的感覺,隨隨便便要找個論壇都還來個 404 。

有了入門文件,沒有個中文文件是不行的。在我安裝了 PyLucene 之後,發現要查找中文還真是不可能的任務。程式一 run 下去就來個

SyntaxError: Non-ASCII character xxx’ in file xxxx.py on line xx, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

的訊息,當然人家在 error message 都給了資料了,不去看一下也不對吧。所以,找出原因,只要在程式碼中加入

# -*- coding: utf-8 -*-

就沒事了。…當然不會就這樣沒事,結果你不找問題,問題還是會找上你:

UnicodeEncodeError: ‘ascii’ codec can’t encode character …..

這就糗大了,它又沒說要怎麼辦?只好再次求助 Google 了。結論是,在字串後面加上 .encode(『utf-8″) 就可以了。(現在大家都老大不小了,應該改用 utf-8 了吧)

當然在做 Text Processing 的人,少不了要用到 Regular Expression,那入門文件當然是沒有啦。目前我是正在看這裡,如果有人可以指點一二的,也麻煩告訴我一下吧。 :)

先就這樣吧,反正趁有點小空的時候來學學 Python 也不錯,希望以後可以快快樂樂啦。

Reference:

Technorati Tags: , , ,

  1. ruby 版的 lucene[back]
  2. dotNet 版的 lucene[back]
  3. 甚麼?不不不,我們不是兄弟象[back]

11 Responses to “快快樂樂學 Python – 由 Ferret 與 PyLucene 談起”

  1. 1
    tcc:

    「Python 教學文件」是很好的入門文件,畢竟過了這麼多年,Python 也長大不小,就蠻需要 http://www.python.org/doc/ 加持。

    如果常查閱參考文件,也剛好用 Firefox 的話,與 Trac 同家公司的傢私 http://www.edgewall.org/python-sidebar/ 可考慮裝一下。

    也是看 Kunchling 先生的文件長大(咦?)。另外 Mertz 先生的書 Text Processing in Python http://gnosis.cx/TPiP/ 涵蓋、彙整更多文字處理的主題 … 用 .txt 有點嚇人就是了。

  2. 2
    clsung:

    這, 實在是太謝謝你了 :D

  3. 3
    yungyuc:

    在 Python 裡面有兩種字串物件:str 和 unicode。str 可以使用各式各樣的編碼,包括 UTF-8, UTF-16,而 unicode 就是 Unicode。

    如果需要在不同編碼間轉換,我通常會這樣作:

    # -*- coding: UTF-8 -*-
    uni = 『萬國碼』.decode(‘UTF-8′)
    big5str = uni.encode(‘Big5′)
    sjisstr = uni.encode(‘S-JIS’)

  4. 4
    clsung:

    謝謝,不過請教一下,Unicode 包含 UTF-8, UTF-16, UTF-32,那 python 的 Unicode 是?

  5. 5
    yungyuc:

    我想 Python 的 unicode 物件沒存 UTF-*,而是直接存 code point (refer to http://effbot.org/zone/unicode-objects.htm and http://docs.python.org/lib/encodings-overview.html)。

  6. 6
    clsung:

    To yungyuc :
    謝謝 :)

  7. 7
    qrtt1:

    如果在linux下可以這樣執行
    LC_ALL=zh_TW.utf8 python script.py
    因為你除了定義code encoding之外
    python執行時的自動編碼會使用環境變數裡的設定
    所以, 如果你預設非utf8時,
    他就會試著轉成你環境變數中的編碼
    但是其他編碼的set似乎都比unicode小:)
    只要對應不到就會出包了

  8. 8
    Hi! I'm clsung:

    快快樂樂學 Ruby – 再談 Ferret…

    這只是為了要呼應之前的舊文章…

    話說昨天早上到了實驗室,發現 b6s 前一晚留給我有關 Ferret 的訊息。兩點,第一是 lukhnos實作了 Ferret 處理中文的方法,在這裡。當然,處理中文很重要….

  9. 9
    Hi! I'm clsung:

    PyLucene Win32 on googlecode…

    ……

  10. 10
    Clarence:

    請問可不可以讓我下載那個文件,讓我離線時也可以看,謝謝!

  11. 11
    clsung:

    啊?什麼文件?

Leave a Reply

噗浪:

  • clsung 說 睡眠開始被分段了.. 8 小時 之前
  • clsung 說 今天又是轉進日 2010-03-21
  • clsung 說 來看班傑明... 2010-03-20

分類

Flickr

    clsung. Get yours at bighugelabs.com/flickr

Blogroll

    馬的警總回來了