`
grunt1223
  • 浏览: 419765 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用标签云扩展自己的应用

阅读更多
标签云或文字云是关键词的视觉化描述,用于汇总用户生成的标签或一个网站的文字内容。标签一般是独立的词汇,常常按字母顺序排列,其重要程度又能通过改变字体大小或颜色来表现。所以标签云可以灵活地依照字序或热门程度来检索一个标签。大多数标签本身就是超级链接,直接指向与标签相联的一系列条目。

互联网标签云(Tag Cloud)的概念最早由Stewart Butterfield在《Make a Flickr-Style Tag》一文中提出。在那些用户分享频繁的web2.0网站,比如Flickr、Del.icio.us和Technorati中得到了广泛的应用。

简要总结了一下,标签云的作用主要有以下三类:
  • 热门推荐
  • 自动分类
  • 数据分析


比如下图展示了与Web2.0相关的一组标签云,字体的大小参照相关程度:

通过上图我们可以看出,关注Web2.0的人们,可能还会对博客、用户参与、长尾理论等关键词感兴趣。

下面的TagCloud可视化地描绘了全球的人口分布,字体的大小参照各国的人口数量:

通过上图,我们可以清晰地看出,中国和印度是世界上人口最多的两个国家;排在其后的人口大国有美国、尼日利亚、巴基斯坦等等。

标签云也可以用作数据分析,比如下面这张有趣的图,分别摘自布什总统在2002年以及奥巴马总统在2011年的政府报告。这里,字体的大小与关键词的TF(词频)以及IDF(反文档频率)相关,即某个关键词出现的频率越高,而在其它文档中出现的频率越低,就认为该词的权重越大:

从两份报告总可以看出,911发生之后,布什更强调安全、反恐、武器等,而在经济危机来临之时,奥巴马则更强调工作、税收、商务等。

关于实现一个TagCloud的代码架构,可以参考下图:

其中各类的声明如下所述:
namedescription
Tag标签实体类,考虑到英语语法的特性,包含词语和词根两个属性
TagCache缓存所有Tag
TagMagnitudeTag的模
TagMagnitudeVectorTag矢量的模,一个TagMagnitudeVector包含多个TagMagnitude
TagMagnitudeVectorTag矢量的模,一个TagMagnitudeVector包含多个TagMagnitude
InverseDocFreqEstimatorIDF的计算
HTMLTagCloudDecorator实现动态字体大小设置的HTMl装饰类


核心代码如下:

public class LuceneTextAnalyzer implements TextAnalyzer {
    
    public List<Tag> analyzeText(String text) throws IOException {
        Reader reader = new StringReader(text);
        Analyzer analyzer = getAnalyzer();//获取继承自Lucene的Analyzer
        List<Tag> tags = new ArrayList<Tag>();
        TokenStream tokenStream = analyzer.tokenStream(null, reader) ;
        Token token = tokenStream.next();
        while ( token != null) {
            Tag tag = getTag(token.termText());
            tags.add(tag);
            token = tokenStream.next();
        }
        return tags;
    }
    
    public TagMagnitudeVector createTagMagnitudeVector(String text) throws IOException {
        List<Tag> tagList =  analyzeText(text);
        Map<Tag,Integer> tagFreqMap = computeTermFrequency(tagList);//计算TF
        return applyIDF(tagFreqMap);//计算IDF
    }
    
  
    private Map<Tag,Integer> computeTermFrequency(List<Tag> tagList) {
        Map<Tag,Integer> tagFreqMap = new HashMap<Tag,Integer>();
        for (Tag tag: tagList) {
            Integer count = tagFreqMap.get(tag);
            if (count == null) {
                count = new Integer(1);
            } else {
                count = new Integer(count.intValue() + 1);
            }
            tagFreqMap.put(tag, count);
        }
        return tagFreqMap;
    }
    
    private TagMagnitudeVector applyIDF(Map<Tag,Integer> tagFreqMap) {
        List<TagMagnitude> tagMagnitudes = new ArrayList<TagMagnitude>();
        for (Tag tag: tagFreqMap.keySet()) {
            double idf = this.inverseDocFreqEstimator.estimateInverseDocFreq(tag);
            double tf = tagFreqMap.get(tag);
            double wt = tf*idf;
            tagMagnitudes.add(new TagMagnitudeImpl(tag,wt));
        }
        return new TagMagnitudeVectorImpl(tagMagnitudes);
    }
    
    private TagCloud createTagCloud(TagMagnitudeVector tmVector) {
        List<TagCloudElement> elements = new ArrayList<TagCloudElement>();
        for (TagMagnitude tm: tmVector.getTagMagnitudes()) {
            TagCloudElement element = new TagCloudElementImpl(tm.getDisplayText(), tm.getMagnitude());
            elements.add(element);
        }
        return new TagCloudImpl(elements, new LinearFontSizeComputationStrategy(3,"font-size: "));//使用线性的字体计算策略,权重加一级,字体增大一号
    }
    
    private String visualizeTagCloud(TagCloud tagCloud) {
        HTMLTagCloudDecorator decorator = new HTMLTagCloudDecorator();//使用HTML包装内容
        String html = decorator.decorateTagCloud(tagCloud);
        System.out.println(html);
        return html;
    }

    public static void main(String [] args) throws IOException {
        String title = "Collective Intelligence and Web2.0";
        String body = "Web2.0 is all about connecting users to users, "  +
                " inviting users to participate and applying their collective" +
                " intelligence to improve the application. Collective intelligence" +
                " enhances the user experience" ;
                
        TagCacheImpl t = new TagCacheImpl();
        InverseDocFreqEstimator idfEstimator = new EqualInverseDocFreqEstimator();
        LuceneTextAnalyzer lta = new LuceneTextAnalyzer(t, idfEstimator);
//        System.out.print("Analyzing the title .... \n");
//        lta.displayTextAnalysis(title);
//        System.out.print("\nAnalyzing the body .... \n");
//        lta.displayTextAnalysis(body);
        TagMagnitudeVector tmTitle = lta.createTagMagnitudeVector(title);
        TagMagnitudeVector tmBody = lta.createTagMagnitudeVector(body);
        TagMagnitudeVector tmCombined = tmTitle.add(tmBody);
        System.out.println(tmCombined);    
        TagCloud tagCloud = lta.createTagCloud(tmBody);
        String html = lta.visualizeTagCloud(tagCloud);
        System.out.println("html:" + html);
    }
    
    private void displayTextAnalysis(String text) throws IOException {
        List<Tag> tags = analyzeText(text);
        for (Tag tag: tags) {
            System.out.print(tag + " ");
        }      
    }
}

  • 大小: 15.3 KB
  • 大小: 52.6 KB
  • 大小: 111.1 KB
  • 大小: 21.8 KB
1
1
分享到:
评论

相关推荐

    Infinity新标签页(Pro)遇见美好的Chrome新标签页

    Infinity,基于过去对新标签页的认识,觉得新标签页不仅仅如此,应该有更棒的功能和极简的设计。今天我们重新定义了新标签页,一个追求极简美学和一站式服务体验更少的东西体验更多的...您也可以使用自己的图片做壁纸

    云无关的方式启动Docker容器Clocker.zip

    该项目是建立在Apache Brooklyn(一款多重云应用)管理软件之上的。 Clocker的部分特性是: 在云基础架构中自动化创建和管理多个Docker主机 容器放置智能化、提供了容错的机制、易于扩展以及更好的资源利用率 ...

    微度新标签页 chrome插件 v4.0.7

    它提供了网站快速拨号、扩展应用快捷访问方式、网站云添加、数据云备份等功能来增强 Chrome 原生新标签页(New Tab);另外微度还提供了:拨号框分类、天气、收藏夹、最近访问、扩展管理、云壁纸、快速搜索等插件,...

    其他类别Noka tag 软件标签 v3.0-noka3.9.rar

    作为一个专业的JSP源码资料包,Noka Tag v3.0很可能包含了一些先进的功能,如自动标签生成、标签云展示、多标签支持、标签权限管理等。这些功能使得标签系统不仅对于用户友好,也便于网站管理员进行内容管理和数据...

    物联网应用开发平台Calvin.zip

    Calvin的优点Calvin的runtime扩展性非常好,基础功能非常简洁,可以在很小的物联网设备商运行,同时也能充分调用云端的计算性能。Calvin的编 程模型对云、设备、智能手机/传感器、客户端/服务器一视同仁,采用相同...

    web-master-note.zip私人笔记应用程序

    使用编辑器(例如Markdown和Code),主题和组件(如文件夹和自动完成标签)可扩展。 开源和自托管笔记本服务器的选项。您只需几个简单的步骤即可托管自己的标准服务器。 重点关注长寿和可持续发展。 创建您的私人...

    CloudFoundry-Mesos.zip

    Foundry-Mesos框架由华为与Mesosphere的工程师合作完成,能够为应用提供安全可靠的、可伸缩、可扩展的云端运行环境,并且应用能够 享用Cloud Foundry生态圈内各类丰富的服务资源。企业能够通过Cloud Foundry开发云...

    AWS 白皮书 — 产品.zip

    使用 Amazon Virtual Private Cloud扩展I基础设施,pdf 使用 Spark Streaming和 Spark SQL在AWs上执行批处理和实时处理的 Lambda架构pdf 基于 Robust Random Cut Forest的数据流异常检测pdf 对AWS基础设施进行规模...

    kubernetes-hackfest:在Azure Kubernetes Service上使用开源技术交付现代的云原生应用程序

    开始:其他练习(无顺序):监控和记录扩展集群和应用程序Azure容器实例和AKS虚拟节点Azure开发空间服务网格集群运营商最佳实践适用于应用程序开发人员的最佳做法 即将推出: 贮存服务经纪人在AKS上使用OpenFaaS ...

    【PerfDog性能狗 v5.1.210204】移动全平台性能测试分析专家+APP应用游戏性能测试

    软件介绍 PerfDog(性能狗),移动全平台性能测试分析专家,致力提升移动应用和游戏的性能和品质...自定义数据文件服务器地址,构建自己web云 可修改数据文件服务器上传地址。Post上传http协议格式文件至自己服务器地址。

    Infinity 新标签页-crx插件

    您也可以使用自己的图片做壁纸 支持语言:Bahasa Indonesia,Bahasa Melayu,Deutsch,English,English (UK),English (United States),Français,Nederlands,Norsk,Tiếng Việt,Türkçe,dansk,español,español ...

    KODExplorer 芒果云-资源管理器

    - 可以用来作为私有云存储系统,存储你的文件... - 当然你也可以用来分享文件 - Web IDE / browser code editor awesomeness - 更多场景等你来挖掘!…… #### 3.使用说明 管理员: admin/admin 普通用户:...

    ThinkCMFX 中文内容管理框架 v5.1.2.zip

    ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者可以根据自身的需求以应用的形式进行扩展。每个应用都能独立的完成自己的任务,也可通过系统调用其他应用进行协同工作。在这种运行机制下,开发...

    configuro:一个针对容器化和云原生应用程序的自以为是的配置加载框架

    仅使用两行代码并进行零设置,即可从Config File加载配置,覆盖值或仅依赖于环境变量,使用$ {ENV}表达式扩展值,以及验证标签。 加载配置 1.在结构中定义应用程序配置 将读取配置Load()到哪个Configuro中。 2....

    SpringBoot项目基于springboot的多媒体素材库的开发与应用.zip

    8. API接口:提供开放的API接口,便于第三方应用集成和扩展新的功能。 通过这个多媒体素材库,用户能够更加高效地管理和利用其数字资产,无论是在本地还是云端。它极大地简化了查找和使用多媒体内容的过程,加速了...

    vc++ 应用源码包_1

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    Redis云管理平台CacheCloud.zip

    Redis的开发人员如同使用Mysql一样,不需要运维Mysql服务器,同样使用Redis服务,不要自己运维Redis,Redis由一些在Redis运维方面更有经验的人来维护(保证高可用,高扩展性),使得开发者更加关注于Redis使用本身。...

    密码管理器Encryptr.zip

    因为 Cryton 是使用端到端的零知识加密,基于云的键/值存储。服务器上没有数据可以被其它服务器查看。Encryptr 让事情很简单,它能保存三种类型数据,密码、信用卡号码,一般的键/值对。它还可以轻松地扩展到其它...

    小峰视频云解决方案.zip

    云点播(Video on Demand,VOD)基于公司多年技术积累与基础设施建设,为有音视频应用相关需求的客户提供包括音视频采集上传、存储管理、自动化转码处理、加速播放、媒体资源管理和音视频通信服务为一体的一站式 ...

    皇帝浏览器 v42.300.347.1.zip

    使用谷歌帐号可以登录皇帝浏览器,可以实现收藏夹、个人设置、扩展等的自动云同步,安全方便。 2.功能强大: 皇帝浏览器支持谷歌chrome浏览器所有扩展插件、应用、背景皮肤。 3.贴心导航: 皇帝浏览器的新标签...

Global site tag (gtag.js) - Google Analytics