好的,最后我自己部分解决了这个问题.我还使用了Richard Friedman tag cloud的一些代码.

我的操作方式如下:在指定的时间间隔内,OpenCMS运行一个计划的作业,该作业读取Lucene索引,从“关键字”字段中提取所有术语(可以为VFS中的每个文件填写),生成标签云,并将结果存储在OpenCMS模板的一部分中.有两个Java文件:Cloud.java和BuildTagCloud.java. “云”读取索引并返回最常用术语的列表. “ BuildTagCloud”实现I_CmsScheduledJob接口,并注册为计划作业.

BuildTagCloud.java:

package mypackage;

import org.opencms.file.*;

import org.opencms.main.*;

import org.opencms.scheduler.I_CmsScheduledJob;

import java.text.SimpleDateFormat;

import java.util.*;

public class BuildTagCloud implements I_CmsScheduledJob {

private final String indexaddress = "address/of/your/index/folder"; // something like ../webapps/opencms/WEB-INF/index/nameOfIndex

private final String tagsFile = "address"; // part of my template; it's where I store the tag cloud

private final int numTerms = 10; // number of terms in the tag cloud

public String launch(CmsObject object, java.util.Map parameters) throws java.lang.Exception {

Cloud cloud = new Cloud(indexaddress, numTerms);

Calendar cal = Calendar.getInstance();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String data;

data = "

Tag cloud
";

data += sdf.format(cal.getTime()) + "
";

try {

List list = cloud.getCloud();

for(int i = 0; i

data += "
" + i + ". " + list.get(i).term.text() + " ... " + list.get(i).docFreq; // list.get(i).docFreq

}

} catch (Exception e) {

data += e.getMessage();

data += "
";

} finally {

data+="

";

}

writeAndPublishResource(object, tagsFile, data);

return "OK";

}

private void writeAndPublishResource(CmsObject object, String resouce, String data) throws java.lang.Exception {

object.loginUser("administrator's user name", "and his password");

CmsRequestContext cmsContext = object.getRequestContext();

CmsProject curProject = cmsContext.currentProject();

if(curProject.isOnlineProject()){

CmsProject offlineProject = object.readProject("Name of the project");

cmsContext.setCurrentProject(offlineProject);

}

CmsResource res = object.readResource(resouce);

object.lockResource(resouce);

CmsFile file = object.readFile(res);

file.setContents(data.getBytes());

object.writeFile(file);

OpenCms.getPublishManager().publishResource(object, resouce);

object.unlockResource(resouce);

}

}

Cloud.java:

package mypackage;

import java.io.*;

import java.util.*;

import org.apache.lucene.index.*;

public class Cloud {

private String indexaddress;

private int numTerms;

private int max;

private int sum;

public Cloud(String indexaddress, int numTerms) {

this.indexaddress = indexaddress;

this.numTerms = numTerms;

max = 0;

sum = 0;

}

public List getCloud() throws Exception {

TermInfoQueue termQ = new TermInfoQueue(numTerms);

IndexReader reader = IndexReader.open(new File(indexaddress));

TermEnum terms = reader.terms();

int minFreq = 0;

while (terms.next()) {

if (!terms.term().field().equals("keywords")) continue;

if ( terms.docFreq() > minFreq) {

if (termQ.size() >= numTerms) // if tiq overfull

{

termQ.pop(); // remove lowest in tiq

termQ.put(new TermInfo(terms.term(), terms.docFreq()));

minFreq = ((TermInfo)termQ.top()).docFreq; // reset minFreq

} else {

termQ.put(new TermInfo(terms.term(), terms.docFreq()));

}

}

}

terms.close();

reader.close();

ArrayList res = new ArrayList( termQ.size() );

while ( termQ.size() > 0 ) {

TermInfo ti = (TermInfo)termQ.pop();

max = Math.max( max, ti.docFreq );

sum += ti.docFreq;

res.add( ti );

}

// Shuffles the results up, since a sorted cloud would be predictiable.

//Collections.shuffle( res );

return res;

}

public int getMaxFrequency() {

return max;

}

}

class TermInfo {

TermInfo(Term t, int df) {

term = t;

docFreq = df;

}

public int docFreq;

public Term term;

}

class TermInfoQueue extends org.apache.lucene.util.PriorityQueue {

TermInfoQueue(int size) {

initialize(size);

}

protected final boolean lessThan(Object a, Object b) {

TermInfo termInfoA = (TermInfo)a;

TermInfo termInfoB = (TermInfo)b;

return termInfoA.docFreq < termInfoB.docFreq;

}

}

希望这对我有所帮助,因为我花了很多时间来解决这个问题!

opencms整合到java项目里_java-将标签云添加到OpenCMS网站相关推荐

  1. Myeclipse10.7安装git插件并将Java项目上传到码云(github)

    注:本文来源:外匹夫的<Myeclipse10.7安装git插件并将Java项目上传到码云(github)> 一.先说说安装egit插件的步骤(安装egit不成功的原因主要是下载的egit ...

  2. vue打包放到Java项目里_如何把vuejs打包出来的文件整合到springboot里

    这个需求不知道是不是合适,因为静态的vuejs项目,用nginx部署,听说很快. 一般有这个需求的,都是用tomcat来部署java项目,tomcat转发静态vuejs,应该不会很快. 好吧,以上都是 ...

  3. java项目 导出_Java项目的导入和导出

    ---------siwuxie095 在很多情况下,需要将当前的 Java工程传递给其他人继续工作, 或 协同工作,或者是从其他人那里接收到传递来的Java项目, 就需要掌握 Java项目的导入和导 ...

  4. java 项目 预警_java开发中的常见代码黄线预警

    java日常开发中,经常会碰到开发工具idea.Eclipse等在一些代码中报黄线,这对于很多具有强迫症的同学来说,也是一件很头疼的事,尤其是编码不注意规范的同学来说. 下面我就列举一些常见的黄线预警 ...

  5. Java项目:SSH在线电影售票选座版网站平台系统

    作者主页:源码空间站2022 简介:Java领域优质创作者.Java项目.学习资料.技术互助 文末获取源码 项目介绍 本项目为前后台项目,首先分为管理员和普通用户,游客. 游客可以进入首页,必须注册成 ...

  6. java项目定时任务_java项目定时任务实现

    首先配置spring-context.xml文件 在xmlns 下加如下代码 xmlns:task="http://www.springframework.org/schema/task&q ...

  7. java项目流程_Java项目开发全流程实践

    文章导读 [项目遵循需求分析.程序设计.编码.测试.运行标准开发过程, 从分析项目问题入手,提出解决方案,应用对象建模工具UML设计系统,依据设计文档进行编码.] 问题描述:实现一个简单的四则运算器. ...

  8. 谷歌Google authenticator 整合到JAVA项目

    前言: 最近项目中,需要使用到谷歌的验证码,就采用了这种.....      其实还可以使用reCaptcha来做,不过移动端还是采用authenticator 会方便点, 如果想了解reCaptch ...

  9. 获取java项目路径_Java获取项目路径

    Java获取项目路径 1. 利用System获取System.getProperty("user.dir"); //输出: E:\IDEA\canye365-crawler-dem ...

  10. java项目部署_Java Web 项目的部署步骤

    关于java web项目的部署有很多种,我就把最近使用的一种跟大家分享下: 项目部署的前期准备: 1.XXX.war file 2.Tomcat server 当以上两项都准备好后,我们就可以开始项目 ...

最新文章

  1. notepad++ 快捷键
  2. 【独家】IT自由职业者是怎么样的感受和体验
  3. js 转义成html,js转义html,反转义
  4. 上传图片到linux返回url,Springboot 将前端传递的图片上传至Linux服务器并返回图片的url(附源码)...
  5. linux 抓包文件 导出,tcpdump抓包和scp导出以及Wireshark查看
  6. Hbase过滤器(Filter)汇总
  7. 去除inline-block间隙的几种方法
  8. 今天开始学C#.NET
  9. mysql给用户授权最大_mysql 给用户授权
  10. 我前面的杨千雪看图软件
  11. 韩国各大银行纷纷开始引进区块链技术
  12. matlab将常值函数转换为变量,MATLAB与科学计算期末复习题题库15.11.12
  13. Windows平台CocosStudioV3.10安装配置(使用Cocos2d-xV3.17.2进行开发)
  14. awk 字符串替换 gsub
  15. 【算法笔记】求长度为n的序列的全排列包含的总逆序对数目(树状数组求解)
  16. android端好用的gif生成器,gif字幕生成器
  17. win10下安装numpy
  18. python写ppt_python可以写PPT吗
  19. 十大最热门人工智能技术
  20. 2020年(农历庚子鼠年)春联大全(收藏必备)

热门文章

  1. js 生成条形码(JsBarcode.all.min.js)
  2. Camera启动过程简述(MTK)
  3. 弘辽科技:淘宝旧链接如何打新品标?有什么规则?
  4. SparkMLlib之二Basic Stastics
  5. c++ 查看opencv版本 linux
  6. matlab把图例放在左边,如何将图例放在p之外
  7. 个人记录——洛谷试炼场,BOSS战!【新手村】
  8. Java语言背景介绍
  9. python词云图生成脚本
  10. 用WPF做报表控件(一)