`
yangzc106
  • 浏览: 156378 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

统一检索以实现资源整合的初步实践

阅读更多

 

这里所指的统一检索是指实现资源的整合。用户使用各种检索时由于存储方式,存储格式的不同,给用户造成诸多不便,这就需要一个统一的平台对资源进行整合。这里利用baidu和google的检索资源初步实现了一个资源整合的例子。运行环境需要浏览器支持html5的websocket。检索服务器采用jetty。使用方式可参考以前写的博文。

下边就粘贴写主要的代码:

 

 

TaskManager.java

 

package org.search.core.site;

import java.util.HashMap;
import java.util.Iterator;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import org.search.core.adapter.SiteAdapter;
import org.search.core.parser.ParserThread;

/**
 * 任务派发的主要管理者
 * @author yangzc
 *
 */
public class TaskManager {
	
	private SiteMap siteMap = null;
	
	//线程池用
	private ThreadPoolExecutor siteThreadPool;
	private ArrayBlockingQueue<Runnable> threadQueue;
	//返回结果队列
	private ArrayBlockingQueue<DataMap> dataqueue;
	
	public TaskManager(){
		threadQueue = new ArrayBlockingQueue<Runnable>(10);
		siteThreadPool = new ThreadPoolExecutor(5, 10, 0, TimeUnit.SECONDS, threadQueue);
		dataqueue = new ArrayBlockingQueue<DataMap>(100);
	}
	
	public void setSiteMap(SiteMap siteMap){
		this.siteMap = siteMap;
	}
	
	/**
	 * 开启单个任务
	 * @param siteId
	 * @param params
	 */
	public void startTask(String siteId, HashMap<String, String> params){
		SiteAdapter site = siteMap.get(siteId);
		siteThreadPool.execute(new ParserThread(site, params, dataqueue));
		
		siteThreadPool.shutdown();
	}
	
	/**
	 * 开启所有任务
	 * @param params
	 */
	public void startAllTask(HashMap<String, String> params){
		Iterator<String> keyIterator = siteMap.keySet().iterator();
		while(keyIterator.hasNext()){
			String siteId = keyIterator.next();
			SiteAdapter site = siteMap.get(siteId);
			siteThreadPool.execute(new ParserThread(site, params, dataqueue));
		}
		siteThreadPool.shutdown();
	}
	
	public boolean isShutDown(){
		return siteThreadPool.isShutdown();
	}
	
	public DataMap getFirstData(){
		try {
			if(siteThreadPool.getActiveCount() != 0 || dataqueue.size()>0)
				return dataqueue.take();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public static void main(String[] args) {
		
	}
}

 ContextParser.java

 

package org.search.core.parser;

import java.util.ArrayList;
import java.util.List;

import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.search.core.adapter.ISiteCell;
import org.search.core.adapter.SiteAdapter;
import org.search.core.filter.MyNodeFilter;

/**
 * html内容解析
 * @author yangzc
 *
 */
public class ContextParser {
	
	private SiteAdapter site;
	
	public ContextParser(SiteAdapter site){
		this.site = site;
	}
	
	/**
	 * 取得每条记录
	 * @param context
	 * @return
	 */
	public List<String> getRecord(String context){
		List<String> recordlst = new ArrayList<String>();
		try {
			Parser parser = new Parser(context);
			NodeList nodeList = 
				parser.parse(new MyNodeFilter(site.getRecordCell().getLabel()));
			if(nodeList != null && nodeList.size() >0){
				for(int i=0; i< nodeList.size(); i++){
					Node node = nodeList.elementAt(i);
					recordlst.add(node.toHtml(true));
				}
			}
		} catch (ParserException e) {
			e.printStackTrace();
		}
		return recordlst;
	}
	
	/**
	 * 取得标题
	 * @param record
	 * @return
	 */
	public String getTitle(String record){
		return getHtml(record, site.getTitleCell());
	}
	
	/**
	 * 取得概述
	 * @param record
	 * @return
	 */
	public String getSummary(String record){
		return getHtml(record, site.getSummaryCell());
	}
	
	/**
	 * 取得URL
	 * @param record
	 * @return
	 */
	public String getUrl(String record){
		return getHtml(record, site.getUrlCell());
	}
	
	//========================================================
	public String getHtml(String record, ISiteCell cell){
		if(cell.getLabel() != null){//通过标签的方式取得内容
			return getHtmlByNode(record, cell.getLabel());
		}else{
			return getHtmlByIndex(record, cell.getStartString(), 
					cell.getEndString());
		}
	}
	
	/**
	 * 通过开始和结束位置取内容
	 * @param record
	 * @param startString
	 * @param endString
	 * @return
	 */
	public String getHtmlByIndex(String record, String startString, String endString){
		String txt = record;
		int startIndex = txt.indexOf(startString);
		if(startIndex == -1)return "";
		txt = txt.substring(startIndex+startString.length());
		
		int endIndex = txt.indexOf(endString);
		if(endIndex == -1)return "";
		
		return "<html>"+txt.substring(0, endIndex)+"</html>";
	}
	
	/**
	 * 通过节点取内容(htmlclient的方式)
	 * @param record
	 * @param filter
	 * @return
	 */
	public String getHtmlByNode(String record, String filter){
		try {
			Parser parser = new Parser(record);
			NodeList nodeList = parser.parse(new MyNodeFilter(filter));
			if(nodeList != null && nodeList.size()>0){
				Node node = nodeList.elementAt(0);
				return node.toHtml(true);
			}
		} catch (ParserException e) {
			e.printStackTrace();
		}
		return "";
	}
}

 效果如下:

 

 

  • 大小: 145.1 KB
1
5
分享到:
评论

相关推荐

    CALIS资源整合与云服务.pdf

    通过图书馆、共享域和全国三个层面的资源加工、整合、交换、发现和获取问题的初步解决,CALIS实现了包括不同图书馆联盟体系、国外文献资源联合采购体系、全国联机编目体系、全国高校文献资源整合与发现体系、全国...

    高校人事管理系统实践报告.doc

    在开发过程中,团队成员积极请教老师、同学,利用网络资源进行学习,甚至请教学长以获取更多经验。在初次整合程序时遇到困难,发现整体架构的统一性不足。于是,决定由一人负责整体架构的设计,其他成员负责填充具体...

    阿里云大数据AI一体化最佳实践

    综上所述,阿里云大数据AI一体化最佳实践不仅展示了如何有效整合数据处理和AI模型开发,还提供了具体的案例分析,帮助企业和开发者更好地理解和应用这些先进的技术和方法论。通过不断优化开发范式和加强数据质量控制...

    AIOps百度架构实践.pdf

    - **基础运维平台**(2007-2012):这一阶段主要构建了基础运维工具,如机器管理、服务树、权限管理、部署系统、数据管理系统和监控系统,初步实现了运维自动化。 - **开放运维平台**(2012-2014):升级了监控...

    移动云的自动化运维架构与开发之路.pdf

    4. **平台化和服务化**:将工具和脚本整合到运维能力平台上,实现配置管理、资源服务化和运维操作场景化,推动初步的DevOps实践。 5. **智能化**:通过趋势预判和辅助决策,实现更高级别的运维自动化,如通过数据...

    档案信息化建设中存在的问题及完善措施

    资源整合不足 由于缺乏统一规划和协调机制,各地档案馆之间的信息资源未能得到有效整合。不同地区、不同级别的档案机构之间信息交流不畅,无法形成资源共享的良性循环,从而影响了档案资源的整体利用效率。 #### ...

    2010企业架构年会报告

    它不仅关注技术层面的系统集成,更强调业务流程、组织结构、信息资源和应用系统的协调统一。企业架构的核心目标是使企业能够更好地响应市场变化,提高运营效率,并降低IT复杂性。 姚乐可能分享了关于企业架构的方法...

    河北:医疗健康信息要联通.pdf

    通过构建统一的数据库,可以提高数据的可挖掘性和检索效率,便于科研人员进行多维度的快速筛选和随访患者的管理。同时,数据库需要具备数据质量控制机制,确保数据准确无误,避免人工输入导致的错误。为了保护患者...

    高校档案工作信息化建设浅析.pdf

    四是构建网络化的档案资源共享平台,打破部门间的信息壁垒,促进校内资源的整合与共享。 此外,高校档案工作信息化建设面临的挑战也不容忽视。如电子档案的安全防护问题,需要采取先进的加密技术来防止数据泄露;...

    基于UML的图书馆自建特色数据库的探索.docx

    3. **数据整合:**通过RDF等技术将分散的数据资源整合起来,形成统一的知识库。 #### 实践案例 以某高校图书馆为例,该图书馆拥有丰富的古籍文献资源。通过对这些资源进行数字化处理,并运用UML进行系统建模,成功...

    pmbok1996(第一版)

    - **执行**:整合人员和其他资源,以执行项目的管理计划。 - **监控**:跟踪、审查和调整项目进度与绩效,识别必要的计划变更并启动相应的变更流程。 - **收尾**:正式结束项目或阶段,转移资源到下一个项目或阶段。...

    企业信息化规划资料汇总.pdf

    这一阶段可能涉及到更复杂的业务系统,如CRM(客户关系管理)和ERP(企业资源规划),以优化销售、供应链、生产等关键业务流程,提升整体运营效率。 1.3 决策层支持的信息化建设:强调数据驱动的决策。企业会引入BI...

    信息化背景下档案管理改革探讨.docx

    通过对档案信息进行数字化处理并采用科学合理的分类方法,可以实现档案资源的有效整合与快速检索,进而提高工作效率。此外,这种分类管理方式还有助于实现档案管理的标准化和规范化,便于信息共享和交流。 ##### ...

    新型智慧城市综合运行管理平台大数据运营顶层设计解决方案(223页).docx

    2. **数据资源整合**:整合政府、企业和社会各界的数据资源,形成统一的数据共享机制。 3. **数据分析能力**:加强数据挖掘与分析技术的研究与应用,提高数据处理效率和准确性。 4. **安全保障体系**:建立健全数据...

    A joint model for question-answering over Traditional Chinese Medicine

    - **研究目标**:该模型旨在将问题处理和结构化查询两个步骤整合到一个统一的框架内,以减少信息损失并提高答案的准确性。 #### 三、研究方法与创新点 - **联合模型的设计**:该联合模型通过将自然语言处理(NLP)...

    管理信息系统资料 考试题和答案

    ### 管理信息系统知识点详解 ...以上是对管理信息系统相关知识点的详细阐述,涵盖了信息系统的基本概念、构成要素、发展阶段、管理方法等多个方面,旨在帮助读者全面了解管理信息系统的理论基础和实践应用。

    CMM、CMMI标准名词术语

    - **定义**:组织过程焦点(OPF)是指组织将资源集中在一个或几个关键过程上,以实现持续改进。 - **目的**:提高特定过程的成熟度水平,增强组织的核心竞争力。 #### 41. OPL Organizational Process Assets 组织...

    CMMI标准名词术语

    - **作用**: 为组织提供了一个框架,以系统地改进其过程,并最终提升产品和服务的质量。 #### 13. Capability Maturity Model Integration (CMMI) 能力成熟度集成模型 - **定义**: CMM的扩展版本,涵盖了更多的过程...

Global site tag (gtag.js) - Google Analytics