Извлечение метаданных с использованием Apache Tika и сохранение в HashMap - PullRequest
1 голос
/ 16 сентября 2011

Я пытаюсь извлечь метаданные, используя apache tika, а затем помещая их в HashMap. Но мой код get - это только ключ, а не значение этого ключа. Например. Он хранит только заголовок (как ключ), но не егозначение, таким же образом он хранит ключевые слова (как ключ), но не его значение ..
И если я пытаюсь увидеть, что содержит 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 Ответ

1 голос
/ 16 сентября 2011

Прежде всего, Tika допускает несколько значений для данного ключа.Вам лучше думать об этом как о Map<String,List<String>>, а не как о Map<String,String>

. Я бы посоветовал вам взглянуть на Java-документацию Tika Metadata .Вы либо захотите проверить метод isMultiValued(String key) для каждого из них, либо просто вызывать getValues(String key) каждый раз

Чтобы получить первое значение для данного ключа, metadata.get(String key) - верный путь.Не уверен, почему он не работает для вас

Возможно, вы захотите поиграть с Jar App от Tika, это лучший способ отладки, например:

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

Это позволитвы легко видите метаданные, которые действительно содержит ваш файл, а затем, когда вы знаете, что можете отследить, где в вашем коде вы делаете что-то не так

...