我正在尝试使用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;
}
任何帮助将不胜感激..
答案 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
这可以让您轻松查看文件真正包含的元数据,然后当您知道可以在代码中找到错误的位置时