- 浏览: 74379 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
hay:
大骗子
zend studio教程 -
jiewuzhe02:
请问开源CMS digitaluscms 安装后不能登录后台 ...
zend frawework 开源代码列子 -
天梯梦:
怎么一个都打不开啊
zend studio教程 -
freedomstyle:
调试的时候,变量中文出现乱码
zend studio for eclipse 中文乱码的问题 -
freedomstyle:
是的,我也碰到这样的问题。
zend studio for eclipse 中文乱码的问题
前言:去年系统的研究了下lucene和weblucene等相关的全文检索技术。后来也稍微的看了下zend Framework的lucene。之后就没有继续研究了。这次打算给研学吧(http://www.yanxue8.com)添加全文检索的功能,再次重新研究下zend Framework的lucene模块。
接下来的几篇文章会系统讲述如何使用zend Framework搭建一个简单实用的站内全文检索。主要是增对数据库里面的数据进行检索。关于全文检索的基本知识,和zend framework环境的搭建使用,我这里不细说(呵呵,其实我自己也不是是zend framework,而是用自己的phpbean。zend framework我只当作库类用)。
ZF本身没有提供中文分词算法,具体应用中要自己写。我这里使用简单的二元分词算法(只在utf-8下工作正常,对于其他字符集,请修改程序)。
第一步、如何测试分词算法的输出。
在zf 的手册中没有提到,我这里简单给个例子:
第二步、自定义自己的分词算法,可以参考手册,或者自己看Zend_Search_Lucene_Analysis_Analyzer_Common_Text类的实现。
其中要注意的是过滤这点。由于我们的分词是二元分词,如果要过滤一些比如“的”、“啊”之类的单词,是无法使用内置的Tokens Filtering。我们需要是分词前先过滤调。这个可以在reset()里面实现
例子。
接下来的几篇文章会系统讲述如何使用zend Framework搭建一个简单实用的站内全文检索。主要是增对数据库里面的数据进行检索。关于全文检索的基本知识,和zend framework环境的搭建使用,我这里不细说(呵呵,其实我自己也不是是zend framework,而是用自己的phpbean。zend framework我只当作库类用)。
ZF本身没有提供中文分词算法,具体应用中要自己写。我这里使用简单的二元分词算法(只在utf-8下工作正常,对于其他字符集,请修改程序)。
第一步、如何测试分词算法的输出。
在zf 的手册中没有提到,我这里简单给个例子:
复制内容到剪贴板
这里使用是zf默认的分词算法Zend_Search_Lucene_Analysis_Analyzer_Common_Text。另外你可以加上一个过滤方法。比如说过滤一些单词,比如“is”,"a "之类的。代码:
<?php
$analyzer = Zend_Search_Lucene_Analysis_Analyzer::getDefault();
$value = 'this is a test!';
$analyzer->setInput($value, 'utf-8');
$position = 0;
$tokenCounter = 0;
while (($token = $analyzer->nextToken()) !== null) {
$tokenCounter++;
$tokens[] = $token;
}
print_r($tokens);
?>
第二步、自定义自己的分词算法,可以参考手册,或者自己看Zend_Search_Lucene_Analysis_Analyzer_Common_Text类的实现。
其中要注意的是过滤这点。由于我们的分词是二元分词,如果要过滤一些比如“的”、“啊”之类的单词,是无法使用内置的Tokens Filtering。我们需要是分词前先过滤调。这个可以在reset()里面实现
例子。
复制内容到剪贴板
测试分词输出demo
代码:
<?
require_once 'Zend/Search/Lucene/Analysis/Analyzer.php';
class Phpbean_Lucene_Analyzer extends Zend_Search_Lucene_Analysis_Analyzer_Common {
private $_position;
private $_cnStopWords = array();
public function setCnStopWords($cnStopWords){
$this->_cnStopWords = $cnStopWords;
}
/**
* Reset token stream
*/
public function reset()
{
$this->_position = 0;
$search = array(",", "/", "\", ".", ";", ":", """, "!", "~", "`", "^", "(", ")", "?", "-", "t", "n", "'", "<", ">", "r", "rn", "$", "&", "%", "#", "@", "+", "=", "{", "}", "[", "]", ":", ")", "(", ".", "。", ",", "!", ";", "“", "”", "‘", "’", "[", "]", "、", "—", " ", "《", "》", "-", "…", "【", "】",);
$this->_input = str_replace($search,' ',$this->_input);
$this->_input = str_replace($this->_cnStopWords,' ',$this->_input);
}
/**
* Tokenization stream API
* Get next token
* Returns null at the end of stream
*
* @return Zend_Search_Lucene_Analysis_Token|null
*/
public function nextToken()
{
if ($this->_input === null) {
return null;
}
while ($this->_position < strlen($this->_input)) {
while ($this->_position < strlen($this->_input) &&
$this->_input[$this->_position]==' ' ) {
$this->_position++;
}
$termStartPosition = $this->_position;
$temp_char = $this->_input[$this->_position];
$isCnWord = false;
if(ord($temp_char)>127){
$i = 0;
while ($this->_position < strlen($this->_input) &&
ord( $this->_input[$this->_position] )>127) {
$this->_position = $this->_position + 3;
$i ++;
if($i==2){
$isCnWord = true;
break;
}
}
if($i==1)continue;
}else{
while ($this->_position < strlen($this->_input) &&
ctype_alnum( $this->_input[$this->_position] )) {
$this->_position++;
}
}
if ($this->_position == $termStartPosition) {
return null;
}
$token = new Zend_Search_Lucene_Analysis_Token(
substr($this->_input,
$termStartPosition,
$this->_position - $termStartPosition),
$termStartPosition,
$this->_position);
$token = $this->normalize($token);
if($isCnWord)$this->_position = $this->_position - 3;
if ($token !== null) {
return $token;
}
}
return null;
}
}
?>
复制内容到剪贴板
比如上面的输出就是"this" "test" "中文" “测试”四个结果。符合我们的需要。代码:
<?
$stopWords = array('a', 'an', 'at', 'the', 'and', 'or', 'is', 'am');
$stopWordsFilter = new Zend_Search_Lucene_Analysis_TokenFilter_StopWords($stopWords);
$analyzer = new Phpbean_Lucene_Analyzer();
$cnStopWords = array('的');
$analyzer->setCnStopWords($cnStopWords);
$analyzer->addFilter($stopWordsFilter);
$value = 'this is " a test【中文】的测试';
$analyzer->setInput($value, 'utf-8');
$position = 0;
$tokenCounter = 0;
while (($token = $analyzer->nextToken()) !== null) {
$tokenCounter++;
$tokens[] = $token;
}
print_r($tokens);
?>
搜索更多相关主题的帖子: zend_framework lucene 分词
发表评论
-
Zend Framework 教程大全(英文版)
2009-02-22 23:05 2503Zend Framework教程大全 07月 3rd, 200 ... -
Zend Framework 1.7.5发布增加了不少功能
2009-02-19 21:43 1380Welcome to Zend Framework 1.7 ... -
lucene的简单实例<一>
2009-02-17 15:15 1051说明一下,这一篇文章的用到的lucene,是用2.0版本的,主 ... -
走进全文搜索
2009-02-17 14:07 984走进全文搜索 http://www.phpx.com/hap ... -
Jobeet 第17天:搜索引擎
2009-02-17 10:49 930写给每个朋友来访的朋友! Friday, December ... -
Zend Search Lucene实现全文搜索收藏
2009-02-17 10:24 1849Zend Search Lucene实现全文搜索收藏 新一篇 ... -
DBSight-Zend Framework中lucene的最佳替代方案
2009-02-17 10:22 2325DBSight-Zend Framework中lucene的最 ... -
理解ZEND_DB_PROFILE相关的知识
2009-02-14 00:46 950MYSQL的性能跟踪mysql> help profil ... -
zend framwork quickstart 列子SQLLITE介绍
2009-02-13 01:54 1187SQLLITE 1、SQLite简介SQLite第一个Al ... -
ZF HEADLINK相关的HTML link标签 rel 属性
2009-02-12 21:04 2234rel 属性 -- rel属性,描述了当前页面与href所指定 ... -
php 目录结构学习
2009-02-11 21:59 0d:/docroot/ index.phpapplica ... -
zend framework中的helper们
2009-02-10 15:21 21772008-11-06 00:28 写 ... -
Zend Framework实例教程2
2009-02-09 10:00 2289最后,admin.php模板可以用来批准新闻条目: &l ... -
Zend Framework实例教程
2009-02-09 09:17 2696作者:张佳(译) 来源:PHPEye开源社区 20 ... -
Zend Framework 留言本实战
2009-02-08 20:27 5786一、环境搭建和ZF安装 *[注] ... -
xampp下跑zendframe框架apache报pdo错
2009-02-08 16:47 2038今天在xampp下跑zendframe框架 链接数据库,遇到这 ... -
zend frawework 开源代码列子
2009-02-08 13:01 16041.zend frawework QUICK START ... -
国外主流PHP框架比较
2009-02-06 10:13 2277国外主流PHP框架比较 作者:heiyelure ...
相关推荐
使用zend Framework的lucene进行全文检索
本文构造出一种适应中英文信息处理的Lucene语言分析器,该分析器的核心模块——分词器所使用的分词算法是一种基于词典的中文分词算法,该算法具体实现上采用了基于词前缀哈希技术来进行逐字匹配,采用基于规则统计...
Table of Contents •Introduction to Zend Framework •Overview •Installation •Learning Zend Framework •Zend Framework Quick Start •Autoloading in Zend Framework •Plugins in Zend Framework •...
Lucene实现全文检索
Lucene4做的全文检索,支持文件和数据库
基于Lucene的全文检索系统研究与开发基于Lucene的全文检索系统研究与开发基于Lucene的全文检索系统研究与开发
lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮
使用lucene编程实现全文检索数据库内容,程序使用lucene-core-2.4.0以及access数据库
Lucene4.7+IK Analyzer中文分词入门教程
Lucene全文检索案例Lucene全文检索案例Lucene全文检索案例Lucene全文检索案例
使用visual studio 开发的lucene.net和盘古分词实现全文检索。并按照lucene的得分算法进行多条件检索并按照得分算法计算匹配度排序。 可以输入一句话进行检索。 lucene.net的版本为2.9.2 盘古分词的版本为2.3.1 并...
基于struts2的全文检索系统,实现了文件上传和下载,并实现对上传的文件进行检索。
本案例通过.Net MVC4基础上,针对Lucene.Net实现全文检索的应用。通过查询数据表中数据,创建索引,通过统一输入框进行全文检索。可以进行对索引的增删改查功能。
lucenetest.rar,lucene,全文检索,lucene例子 lucenetest.rar,lucene,全文检索,lucene例子lucenetest.rar,lucene,全文检索,lucene例子
基于Lucene的全文检索系统,对本地文件的全文检索,方便搜索自己的文档
lucene全文检索需要的三个jar包:lucene-analyzers-3.6.1.jar lucene-core-3.6.1.jar lucene-highlighter-3.6.1.jar
* Apache Lucene全文检索和IKAnalyzer分词工具类 * <p>Company: 91注册码 * time:2014-04-22 * @author www.91zcm.com * @date * @version 1.1 */ public class LuceneUtil { /**索引创建的路径**/ ...
IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。 庖丁中文分词库是一个使用Java开发的,可结合到Lucene 应用中的,为互联网、企业内部网使用的中文搜索引擎分词组件。
lucene全文检索全面教程,基于JAVA的lucene全文检索全面教程。www.288158.com
Lucene 是一个用Java 写的全文索 引引擎工具包,访问索引时间快,支持多用户访问,可以跨平台使用。文中研究了Lucene 系统结构和数据流,分析了 Lucene 的索引文件格式,实现了一个基于Lucene 文档检索的应用实例。