Можно ли фильтровать то, что анализирует tika по атрибуту id тегов div в html?
Я пытаюсь отфильтровать div с идентификатором «заголовок», потому что все страницы, которые я анализирую, имеют один и тот же заголовок, и мне нужны только уникальные данные.
Я уже активировал ContentHandler.StartElement для тегов div:
class MyHtmlMapper extends DefaultHtmlMapper {
public String mapSafeElement(String name) {
if ("DIV".equals(name)) {
return "div";
}
return super.mapSafeElement(name);
}
}
И я создаю парсер со следующим:
InputStream urlInput = new URL(url).openStream();
Parser parser = new AutoDetectParser();
Metadata metadata = new Metadata();
ContentHandler handler = new BodyContentHandler();
ParseContext context = new ParseContext();
context.set(HtmlMapper.class, new MyHtmlMapper());
Итак, я предполагаю, что мне нужно переопределить методы BodyContentHandler.startElement() и BodyContentHandler.endElement() в обработчике данных (что-то вроде следующего):
class MyContnentHandler extends BodyContentHandler{
public void startElement(String uri, String name, String element, Attributes atri) {
...
super.startElement(...)
}
public void endElement(...)
... //Similar to above
}
}
Я работаю над этим некоторое время, и я просто не очень хорошо знаком с тикой. Если у кого-то есть какие-либо предложения или решения, они будут очень признательны!
Позже я узнал, что могу сделать так, чтобы атрибуты (то есть идентификатор и класс) отображались в startElement, переопределив метод mapSafeAttribute в классе MyHtmlMapper следующим образом:
class MyHtmlMapper extends DefaultHtmlMapper {
public String mapSafeElement(String name) {
if ("DIV".equals(name)) {
return "div";
}
return super.mapSafeElement(name);
}
public String mapSafeAttribute(String eleName, String attrName) {
HashSet<String> safeAttrs = new HashSet<String>();
safeAttrs.add("id");
safeAttrs.add("class");
if (safeAttrs.contains(attrName) && eleName.equals("div")) {
return attrName;
} else {
return super.mapSafeAttribute(eleName, attrName);
}
}
}
Но я до сих пор не могу понять, как запретить синтаксическому анализатору анализировать вещи между начальным и конечным тегами свойства с заданным атрибутом.
Дайте мне знать, если я упустил какую-либо информацию, которая была бы полезна.