opencms整合到java项目里_java-将标签云添加到OpenCMS网站
好的,最后我自己部分解决了这个问题.我还使用了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 = "
";
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网站相关推荐
- Myeclipse10.7安装git插件并将Java项目上传到码云(github)
注:本文来源:外匹夫的<Myeclipse10.7安装git插件并将Java项目上传到码云(github)> 一.先说说安装egit插件的步骤(安装egit不成功的原因主要是下载的egit ...
- vue打包放到Java项目里_如何把vuejs打包出来的文件整合到springboot里
这个需求不知道是不是合适,因为静态的vuejs项目,用nginx部署,听说很快. 一般有这个需求的,都是用tomcat来部署java项目,tomcat转发静态vuejs,应该不会很快. 好吧,以上都是 ...
- java项目 导出_Java项目的导入和导出
---------siwuxie095 在很多情况下,需要将当前的 Java工程传递给其他人继续工作, 或 协同工作,或者是从其他人那里接收到传递来的Java项目, 就需要掌握 Java项目的导入和导 ...
- java 项目 预警_java开发中的常见代码黄线预警
java日常开发中,经常会碰到开发工具idea.Eclipse等在一些代码中报黄线,这对于很多具有强迫症的同学来说,也是一件很头疼的事,尤其是编码不注意规范的同学来说. 下面我就列举一些常见的黄线预警 ...
- Java项目:SSH在线电影售票选座版网站平台系统
作者主页:源码空间站2022 简介:Java领域优质创作者.Java项目.学习资料.技术互助 文末获取源码 项目介绍 本项目为前后台项目,首先分为管理员和普通用户,游客. 游客可以进入首页,必须注册成 ...
- java项目定时任务_java项目定时任务实现
首先配置spring-context.xml文件 在xmlns 下加如下代码 xmlns:task="http://www.springframework.org/schema/task&q ...
- java项目流程_Java项目开发全流程实践
文章导读 [项目遵循需求分析.程序设计.编码.测试.运行标准开发过程, 从分析项目问题入手,提出解决方案,应用对象建模工具UML设计系统,依据设计文档进行编码.] 问题描述:实现一个简单的四则运算器. ...
- 谷歌Google authenticator 整合到JAVA项目
前言: 最近项目中,需要使用到谷歌的验证码,就采用了这种..... 其实还可以使用reCaptcha来做,不过移动端还是采用authenticator 会方便点, 如果想了解reCaptch ...
- 获取java项目路径_Java获取项目路径
Java获取项目路径 1. 利用System获取System.getProperty("user.dir"); //输出: E:\IDEA\canye365-crawler-dem ...
- java项目部署_Java Web 项目的部署步骤
关于java web项目的部署有很多种,我就把最近使用的一种跟大家分享下: 项目部署的前期准备: 1.XXX.war file 2.Tomcat server 当以上两项都准备好后,我们就可以开始项目 ...
最新文章
- notepad++ 快捷键
- 【独家】IT自由职业者是怎么样的感受和体验
- js 转义成html,js转义html,反转义
- 上传图片到linux返回url,Springboot 将前端传递的图片上传至Linux服务器并返回图片的url(附源码)...
- linux 抓包文件 导出,tcpdump抓包和scp导出以及Wireshark查看
- Hbase过滤器(Filter)汇总
- 去除inline-block间隙的几种方法
- 今天开始学C#.NET
- mysql给用户授权最大_mysql 给用户授权
- 我前面的杨千雪看图软件
- 韩国各大银行纷纷开始引进区块链技术
- matlab将常值函数转换为变量,MATLAB与科学计算期末复习题题库15.11.12
- Windows平台CocosStudioV3.10安装配置(使用Cocos2d-xV3.17.2进行开发)
- awk 字符串替换 gsub
- 【算法笔记】求长度为n的序列的全排列包含的总逆序对数目(树状数组求解)
- android端好用的gif生成器,gif字幕生成器
- win10下安装numpy
- python写ppt_python可以写PPT吗
- 十大最热门人工智能技术
- 2020年(农历庚子鼠年)春联大全(收藏必备)