使用Apache Tika提取元数据并存储到HashMap中

时间:2011-09-15 23:52:09

标签: java apache-tika

我正在尝试使用apache tika提取元数据,然后放入HashMap ..但是我的代码只是键而不是该键的值..例如..它只存储标题(作为键)但不存储它值,与存储关键字(作为键)的方式相同,但不存储其值。
 如果我试着看看 md 包含什么,它会显示: -

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;
            }

任何帮助将不胜感激..

1 个答案:

答案 0 :(得分:1)

首先,Tika允许给定键的多个值。您最好将其视为Map<String,List<String>>而不是简单的Map<String,String>

我建议您查看Tika Metadata JavaDocs。您要么想检查每个方法的isMultiValued(String key)方法,要么每次只调用getValues(String key)

要获取给定密钥的第一个值,metadata.get(String key)是正确的方法。不知道为什么它不适合你

您可能想要使用Tika App jar,这是调试事物的最佳方式,例如:

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

这可以让您轻松查看文件真正包含的元数据,然后当您知道可以在代码中找到错误的位置时