月度归档:2008年02月

真的被Pylucene给打败了

    既然在线程内调用pylucene会有问题,于是我将pylucene做成了一个独立的程序,将执行结果pickle后输出到控制库。主程序在遇到查询请求的时候执行这个独立程序,获取控制台输出后再unpickle获取查询结果。
    本以为这将是一个可行的方案,哪知道部署到服务器上还是不行。
    真的败给pylucene了,暂时是不想再被pylucene折磨了,以后有时间还是看看Xapian吧。

django添加pylucene失败

lucene简单易用,而且默认的中文分词也还凑合。
本来用lucene做django的全文搜索引擎应当会是个不错的选择。
不过看似乎没看到什么项目这么做,在django的世界里似乎xapian更流行些。
做过了才知道,不是没人用,而是pylucene这东西根本就没法用:(。

今天花了一晚上将pylucene的全文搜素给做完,用django自带的测试服务器测试也没啥问题。
部署到服务器上就挂了。
本还以为服务器上的部署问题。
些了个简单的测试程序到服务器上又测试了一遍。
测试程序OK。
但django还是死活跑不了。

然后想起pylucene那个比较BT的问题。
pylucene由于是CGJ编译的,为了支持垃圾回收,如果在线程中使用pylucene需要继承PyLucene.PythonThread。

到网上找了下,还真是这个问题。
据说
"import PyLucene.PythonThread as thread" in django/utils/autoreload.py
对django做这样一个修改就可以正常工作了,不过mod_python下还是无法正常使用。

我用的是fastcgi,不过修改够还是无法正常工作:(。

各位打pyluence主意的朋友们以后得主意了,pylucene这东西有时候真的不是太好玩:(。
pylucene除了gcj版本外还一个jcc版本,这个版本是用c++对java进行wrap。
应当不会有类似gcj版本的问题,但你必须安装个java。

参考资料:
PyLucene JCC vs GCJ
http://ubuntuforums.org/showthread.php?t=593327

pylucene编译成功

    Python可以使用的全文检索方案还是有几个的,其中比较流行的有Xapian(豆瓣在用)和Pylucene。
    但对于中文而言,除全文索引引擎外,中分分词也是个麻烦事。Pylucene移植自lucene,因此很自然的支持中文分词。Xapian就没这么幸运了。虽然也有些简单的方法让Xapian支持中文分词,但效果也都好不到哪去。经过斟酌之后最后还是确定使用PyLucene。
以前在Linux下安装软件基本上都是apt-get。不过共享主机就没这么方便了。在pylucene的网站上找了半天也没找到可以匹配的二进制包,于是决定手动编译pylucene。
    去看了下编译说明,似乎还比较简单,只要简单的修改Makefile就可以。可以是有个比较大的问题,服务器上没有gcj,还得先安装个gcj。
    去down了个pylucene推荐版本gcc进行编译。被那个host参数整了半天(设置得不对),后来去掉–host后将gcc编译成功。编译费时1小时?
    Pylucene的编译倒挺快,不过目录结构和Makefile中定义的目录结构似乎有些不太一样。手动将相关文件复制到对应目录后运行sample,查看运行结果。
    IndexFiles.py ./    可以看到成功索引了一个文件PlainText.txt
    SearchFiles.py     输入查询条件Plain,可以看到成功的查询出了一条记录
    到这里pylucene就已经可以正常工作了,过些天等有空就去将国学阅读网的全文索引给做。

国学阅读网上线了

网站地址:http://guoxue.victsoft.com/

    其实这个网站在很早以前就有开始整了,中途因为一些事情中断了许久。最近在假期就快结束的时候重新启动,花了几天时间做了个收尾工作,正式部署上线了。
    国学阅读网看名字就知道她是做啥的了。目前网站的功能还比较简单,只提供了书签、收藏、好友等基础功能。各书籍的点击次数等虽然也有统计,但目前还并未使用。
    类似豆瓣的网友最新动态,我觉得这是一个挺有意思的功能。他让各个网友都有露面的机会,而且越是活跃的网友露面的机会越大。这对激发网友的活跃度将会很有作用。这个功能的实现也不复杂,不过我目前优先考虑的还是网站的上线。这个功能或许很快就会推出了(说不定写完blog就去整这东西了)。
    如果说“老照片”是我的第一块试验田,那这个网站就算是第二块试验田了。“老照片”基本认定是失败的了。至于失败的原因在早前的blog中已有分析过了。
    主要两点:
    1. 缺乏必要的基础资源,无法引导用户。
    2. 图片网站对搜索引擎并不友好,SEO难度过大。
    “国学阅读网”应当也有不少问题,但至少这这两点上会比“老照片”好些。国学阅读网上的古文典籍,本身就是网站的基础资源。收藏夹、书签等功能可以为用户的阅读带来便利,有一定的实用价值。
    网站的古文典籍,本身是大量的文本信息相比图片,这对搜索引擎要友好得多。
    当然“国学阅读网”在SEO方面也个很严重的问题。古文资料在网络上已经是一大把了,而且资料是从网络上收集来的,很容易被搜索引擎打入黑名单。
    无论如何,看看新网站的表现了。

————————关于Django————————
    Django的开发速度确实挺快,就是修改表结构的时候比较郁闷。Django不能象Hibernate一样自动修改表结构。
    这个工程的项目结构在我看来有些乱。Django提倡各个模块要相对独立,这样可以提供模块的复用性。这样模块想引入新项目的时候,只需要做个简单的url配置就可以。但事实上各个模块之间要做到完全的独立似乎并不是一件容易的事,比较项目本来就是一个整体,完全独立的模块太少。项目的前期我有刻意的将模块独立,但到了后期我舍弃了这个做法。

发布:支持unicode的SQLite3控件(Delphi)

下载地址
http://2ccc.com/article.asp?articleid=4612

sqlite介绍
    sqlite是个嵌入式数据库。发布的时候只需要带上一个300K的DLL就可以,不用去担心用户没有驱动的问题。
    sqlite支持完整的sql语法,使用方便。
    综合以上优点,sqlite用来给桌面程序使用还是很不错。

sqlite4delphi(unicode)介绍
     因为刚好要用到sqlite,所以到网上去找了一个感觉不算太糟糕的sqlite控件。程序写到一半的时候发现需要增加unicode支持:(。而且根据sqlite3的规范,sqlite3中的数据都应当是以utf-8形式保存。于是动手对库程序进行了部分修改,增加unicode的支持,同时对入库数据进行utf-8编码。

使用方式
    将SQLite3.pas,SQLiteTable3.pas放到代码的搜索路径, sqlite3.dll(bin/sqlite3.dll)和可执行文件放到同一目录。在unit中引用SQLiteTable3就可以使用了。其他的更多使用方法看原作者的介绍(readme.txt)和demo。

PS:
    字符的编码方式害死人啊,老要转来转去。
    特别是delphi,对unicode的支持又不行。要界面支持unicode只能用tnt,然后其他控件集体阵亡。
    要是早统一成utf-8这世界就清净了。