`

Nutch中metadata的分析

阅读更多

  

作为Nutch中的一个非常重要的数据结构,metadata是一个内容丰富的容器,这里面存储了很多值,同时metadata也是一个信息集合的约束,如果要使用metadata,那它里面的所有声明的静态字符串字段,都是约定的一些固定字段,特别是在操作相关信息的时候,metadata的命名是有特殊含义的.

其实从MetaData的类结构中,我们会找到相关的原因.

首先,MetaData实现了六个接口,我们先来分析这五个与类元素密切相关的接口.

CreativeCommons

“创作共用”授权机制的属性集合

DublinCore

都柏林核心元数据属性集合(有关 DublinCore的介绍,请看后续文章)

HttpHeaders

HTTP头文件的属性集合

Nutch

Nutch自定义的内部属性

Office

Office文档属性的集合

CreativeCommons为例子:

public interface CreativeCommons{

   public final static String LICENSE_URL="Licnese-Url";

   public final static String LICENSE_LOCATION="License-Location";

   public final static String WORK_TYPE="Work-Type";

}

可以看到,这个接口里面有三个不能被继承的,静态的string类型字段,为什么会这样呢?其实无论是creativeCommons还是其他如DublinCore,HttpHeaders,这些具有都具有特殊意义的集合体标志,MetaData实现他们,只是附加了一种约束机制,如实现了CreativeCommons,它就符合了”创作共用”的授权,以上代码中的三个静态字段,也成为了MetaData的静态字段,我们可以使用这三个字段里面的内容,构造键值对加入MetaData类中的HashMap.

从这个意义上来说,是这些接口框定了MetaData中的元素.他们有所分类,并且都具有各自的含义,这样的好处是让Metadata具有很好的通用性和扩展性,因为它实现不同意义的接口.

首先我们先介绍MetaData中的两个重要的数据结构成员

private final static Map NAMES_IDX = new HashMap();

这里面存储的是所有已定义过的MetaData的名字,它因为属于类成员,每当类被声明的时候,它就被类中的静态块初始化了,

    private Map metadata = null;

这里面存储的是最重要的信息,因为MetaData毕竟是一个存储某网页中的不同信息的,我们已经有了描述这些信息的约定好的属性名,那么只需要这个Map存储相应的键值对就好了.值得注意的是:

    String normalized = getNormalizedName(name);

    Object values = metadata.get(normalized);

  if (values != null) {

      if (values instanceof String) {

        List list = new ArrayList();

        list.add(values);

        list.add(value);这里使用了List,这样一个属性就可以对应多个值了,这样的好处是多多的,可以保证网页信息的完整性.

        metadata.put(normalized, list);

      } else if (values instanceof List) {

        ((List) values).add(value);

      }

    } else {

      metadata.put(normalized, value);

}

 

Method Summary

void

add(String name, String value)
  
添加一个键值对,      

String

get(String name)
       
得到给定meta名字的值.

static String

getNormalizedName(String name)
根据给定的name,得到标准的name书写形式,在此类的HashMap中保存了标准的metadata的书写形式,这个函数通过对给定name进行字母小写化等的操作,HashMap中的元素进行匹配,得到标准的书写形式

String[]

getValues(String name)
根据某属性名,得到它的值

void

remove(String name)
         
删除某属性,整个键值对都会被删除

void

set(String name, String value)
         
设置某键值对

int

size()
  
返回metadata中现有属性的数量

分享到:
评论

相关推荐

    如何通过java程序获得Nutch中网页的详细信息

    在Java编程环境中,获取Nutch中的网页详细信息是一项常见的任务,尤其对于那些处理大量网络数据的项目来说。Nutch是一个开源的Web爬虫框架,它能够抓取...这将使你能够有效地处理和分析存储在Nutch中的大量网页数据。

    Eclipse中编译Nutch-1.0

    对于初学者而言,了解Nutch的架构,熟悉其爬虫机制,以及掌握如何利用Nutch进行网页抓取和数据分析,都是不可或缺的学习内容。 通过Eclipse编译Nutch-1.0不仅是一次技术实践,更是深入理解开源软件开发流程的机会。...

    Nutch1.7二次开发培训讲义 之 腾讯微博抓取分析

    ### Nutch 1.7 二次开发培训讲义之腾讯微博抓取分析 #### 一、概述 Nutch 是一个开源的网络爬虫项目,它提供了灵活的数据抓取能力,并支持二次开发定制功能。本篇培训讲义主要针对的是如何使用 Nutch 1.7 版本对...

    nutch-analysis.rar_nutch

    4. **Text and Metadata**: Nutch会从HTML中提取文本内容并保存在`_content`文件中。同时,它还提取元数据(如标题、描述等),存储在`_parse_meta`文件中。 5. **Inlinks and Outlinks**: `linkdb`文件记录了网页...

    nutch2.3.1安装文档教程

    在安装 Nutch 之前,首先需要确保环境中已经安装了 Apache Ant 工具,因为 Nutch 的构建过程依赖于 Ant。以下是具体步骤: 1. **下载 ant**: - 访问 ant 官网:[http://archive.apache.org/dist/ant/binaries/]...

    Nutch 解析器parse部分代码笔记

    通过对Nutch解析器中`parse`方法的深入分析,我们可以了解到该方法是如何高效地从原始HTML文档中抽取有价值的信息。这一过程不仅涉及到了DOM解析技术的应用,还涉及到状态管理和数据结构的设计等多个方面。对于...

    Nutch在MyEclipse下的配置[参照].pdf

    通过以上步骤,您应该能够在MyEclipse环境中成功配置并运行Nutch项目。这些步骤不仅涵盖了基本的项目配置,还包括了一些针对特定版本的问题解决方案。希望这篇指南能够帮助开发者们快速上手Nutch项目,并有效地进行...

    PDFBox教程.pdf

    PDFBox 库的应用广泛,比如在Apache Nutch(一个开源网络搜索引擎)和Apache Tika(用于提取文档元数据和结构化文本的工具包)中都有使用。此外,PDFBox包含四个主要组件: 1. **PDFBox**:核心部分,包含处理内容...

    大数据面试题 (2).pdf

    - 解析:NameNode将metadata存储在内存中,以提高效率,磁盘只在启动时加载。 21. NameNode的本地磁盘保存了Block的位置信息。 - 答案:是的。 - 解析:NameNode的元数据包括Block与DataNode的映射关系。 22. ...

Global site tag (gtag.js) - Google Analytics