1

我正在尝试使用 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;
            }

任何帮助将不胜感激..

4

1 回答 1

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

这会让你很容易看到你的文件真正包含的元数据,然后当你知道你可以追踪你的代码中你做错了什么时

于 2011-09-16T10:22:42.023 回答