2011-09-15 42 views
1

我试图使用apache tika提取元数据,然后放入HashMap中。但是,我的代码只获取密钥而不是该密钥的值..例如..它仅存储标题(作为关键字)但不是它的价值,就像它存储关键字(作为关键字)而不是它的值一样。
如果我试图看看md包含的是什么,它会显示: -使用Apache Tika提取元数据并存储到HashMap中

Description= title=Wireless Technology & Innovation | Mobile Technology Content-Encoding=UTF-8 Content-Type=text/html; charset=utf-8 Keywords= google-site-verification=AzhlXdqBSdUCRPJRY1evCtp2Ko5r9kxB_f81WffACUc 

private Map<String, String> metaData; 

     try { 
        Metadata md = new Metadata(); 
        htmlStream = new ByteArrayInputStream(htmlContent.getBytes()); 
        String parsedText = tika.parseToString(htmlStream, md); 
        //very unlikely to happen 
        if (text == null){ 
         text = parsedText.trim(); 
        } 
        processMetaData(md); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } finally { 
        IOUtils.closeQuietly(htmlStream); 
       } 


     private void processMetaData(Metadata md){ 
       if ((getMetaData() == null) || (!getMetaData().isEmpty())) { 
        setMetaData(new HashMap<String, String>()); 
       } 
       for (String name : md.names()){ 
//This below line is not working I guess, it stores only the key.. not the value of that particular key..  
    getMetaData().put(name.toLowerCase(), md.get(name)); 
       } 
      } 

     public Map<String, String> getMetaData() { 
       return metaData; 
      } 

      public void setMetaData(Map<String, String> metaData) { 
       this.metaData = metaData; 
      } 

任何帮助WIL我们将不胜感激。

回答

1

首先,Tika允许给定键的多个值。你最好把它想成Map<String,List<String>>而不是简单的Map<String,String>

我建议你看看Tika Metadata JavaDocs。你要么要检查的isMultiValued(String key)方法为每一个,或者只是调用getValues(String key)

时间来为给定键获得的第一个值,metadata.get(String key)是正确的道路要走。不知道为什么它不为你工作

你可能想与提卡应用罐子玩,这就是调试东西的最佳方式,如:

java -jar tika-app-1.0-SNAPSHOT.jar --metadata problem.file 

这会让你很容易地看到您的文件真正包含的元数据,然后当您知道您可以追踪代码中的哪个位置时,您做错了某些事情

相关问题