专栏首页python3Python+Lucene

Python+Lucene

Python+Lucene(pylucene) + Paoding的安装配置

pylucene让Python可以调用Lucene API实现搜索,这个项目紧跟Lucene的步调,对用惯了Python的同学来说是个福音。 pylucene是通过JCC实现的,JCC读取 jar 包里的public class/method签名,生成C++的包装类,通过JNI(Java Native Interface)调用java的class/mathod。C++代码转成Python的扩展模块,在Python虚拟机里嵌入JVM就可以用了。细节参考http://lucene.apache.org/pylucene/jcc/documentation/readme.html 。 由于Paoding跟Lucene 2.9版本以前的接口是一致的,因此找了一个最接近的PyLucene版本(pylucene 2.4),但里面的JCC比较老了,因此使用了pylucene 3.3的JCC。 下文假定 python 2.7.2安装到 /data/python-2.7.2 目录,相关源码保存在 /data/src 目录。 1 安装 Python 下载Python 2.7.2 切换到解压目录 ./configure --prefix=/data/python-2.7.2 --enable-shared make && make install export LD_LIBRARY_PATH=/data/python-2.7.2/lib 安装包 setuptools wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz#md5=7df2a529a074f613b509fb44feefe74e tar zxvf setuptools-0.6c11.tar.gz cd setuptools-0.6c11 /data/python-2.7.2/bin/python setup.py install 2 安装 JCC 2.10 下载 pylucene-3.3-3-src.tar.gz 切换到解压目录 cd jcc 给 setuptools打补丁 mkdir tmp cd tmp unzip -q /data/python-2.7.2/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg patch -Nup0 < /data/src/pylucene-3.3-3/jcc/jcc/patches/patch.43.0.6c11 sudo zip /data/python-2.7.2/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg -f cd .. rm -rf tmp ln -sf /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64 /usr/lib/jvm/java-6-openjdk /data/python-2.7.2/bin/python setup.py build /data/python-2.7.2/bin/python setup.py install 3 安装 PyLucene + Paoding 下载 pylucene-2.4.1-2-src.tar.gz 和 paoding-analysis-2.0.4-beta.zip tar zxvf pylucene-2.4.1-2-src.tar.gz mkdir paoding cd paoding unzip ../paoding-analysis-2.0.4-beta.zip 切换到 pylucene-2.4.1-2解压目录 vi Makefile 修改内容如下 ... # Linux (Ubuntu 8.10 64-bit, Python 2.5.2, OpenJDK 1.6, setuptools 0.6c9) PREFIX_PYTHON=/data/python-2.7.2 ANT=ant PYTHON=$(PREFIX_PYTHON)/bin/python JCC=$(PYTHON) -m jcc --shared NUM_FILES=2 ... JARS=$(LUCENE_JAR) $(SNOWBALL_JAR) $(HIGHLIGHTER_JAR) $(ANALYZERS_JAR) \ $(REGEX_JAR) $(QUERIES_JAR) $(INSTANTIATED_JAR) $(EXTENSIONS_JAR) \ /data/src/paoding/paoding-analysis.jar ... GENERATE=$(JCC) $(foreach jar,$(JARS),--jar $(jar)) \ --include /data/src/paoding/lib/commons-logging.jar \ --package java.lang java.lang.System \ ... 运行 make make install 4 测试 export LD_LIBRARY_PATH=/data/python-2.7.2/lib export PAODING_DIC_HOME=/data/src/paoding/dic /data/python-2.7.2/bin/python /data/src/testpylucene.py testpylucene.py的内容如下: # -*_ coding: utf-8 -*- # from lucene import * texts = ["Python是一个很有吸引力的语言", "C++语言也很有吸引力,长久不衰", "我们希望Python和C++高手加入", "我们的技术巨牛,人人都是高手"] def search(searcher, qtext):     tq = TermQuery(Term("content", qtext))     hits = searcher.search(tq)     print "----------------------------------------------"     print "Query:'%s', %d Found" % (qtext,hits.length())     for i in range(hits.length()):         doc = hits.doc(i)         print "\t",doc.get("content") def dump(reader):     for i in range(reader.maxDoc()):     print "-----------------------------------------------"     tv = reader.getTermFreqVector(i, "content")     for tk in tv.getTerms():     print tk initVM() directory = RAMDirectory() analyzer = PaodingAnalyzer() writer = IndexWriter(directory, analyzer, True) for text in texts:     doc = Document()     doc.add(Field("content", text, Field.Store.YES, Field.Index.TOKENIZED,         Field.TermVector.YES))     writer.addDocument(doc) writer.optimize() writer.close() reader = IndexReader.open(directory) dump(reader) searcher = IndexSearcher(directory) search(searcher, "python") search(searcher, "C++") search(searcher, "高手")

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 升级python到2.7

     眼看着python3 都出来了,vps上用的还是2.4的版本额,确实汗了一把。决定升级下python。

    py3study
  • Linux CentOS6编译安装Pyt

        CentOS6.x系统中一直沿用的都是Python2.6.x(目前最新版本是python-2.6.6),有时不能满足某些应用生产环境和开发环境的需要,直...

    py3study
  • Python-基础-day2

    Python环境的安装                                                                     ...

    py3study
  • Hadoop+Hbase集群数据迁移问题

    我是攻城师
  • python2.6 升级为 2.7

    CentOS 6.3自带的Python版本为2.6,首先需要升级到2.7版本。由于旧版本的Python已被深度依赖,所以不能卸载原有的Python,只能全新安装...

    py3study
  • 代码 | 自适应大邻域搜索系列之(1) - 使用ALNS代码框架求解TSP问题

    上次出了邻域搜索的各种概念科普,尤其是LNS和ALNS的具体过程更是描述得一清二楚。不知道你萌都懂了吗?

    用户1621951
  • 代码 | 自适应大邻域搜索系列之(1) - 使用ALNS代码框架求解TSP问题

    上次出了邻域搜索的各种概念科普,尤其是LNS和ALNS的具体过程更是描述得一清二楚。不知道你萌都懂了吗?

    短短的路走走停停
  • 如何在 Rstudio 中使用 python 语言 (图文详解)

    一直以来我们学习、测试python都会提到 Pycharm,不仅好用,还支持使用 R 语言。

    生信菜鸟团
  • 光芯片中的adiabatic型结构

    Adiabatic,意思是绝热,这一概念来源于量子力学中的绝热近似(adiabatic approximation)。所谓绝热定理,是指对于一个量子系统,如果所...

    光学小豆芽
  • spring boot框架学习2-spring boot核心(1)

    1:解析spring boot入口和@SpringBootApplication源码详解

    凯哥Java

扫码关注云+社区

领取腾讯云代金券