Apache Tika 文档内容提取每页
Apache Tika Document Content Extraction Per Page
我正在使用 Apache Tika 1.9
并且内容提取非常棒。
我面临的问题是页面。我可以从文档元数据中提取总页数。但是我找不到任何方法从文档中提取每页的内容。
我进行了很多搜索并尝试了用户建议的一些解决方案,但对我没有用,可能是由于最新的 Tika 版本。
请为此提出任何解决方案或进一步的研究方向。
我会感激的。
注意:我使用 JRuby 来实现
这是我创建的自定义内容处理程序 class,它解决了我的问题。
class PageContentHandler < ToXMLContentHandler
attr_accessor :page_tag
attr_accessor :page_number
attr_accessor :page_class
attr_accessor :page_map
def initialize
@page_number = 0
@page_tag = 'div'
@page_class = 'page'
@page_map = Hash.new
end
def startElement(uri, local_name, q_name, atts)
start_page() if @page_tag == q_name and atts.getValue('class') == @page_class
end
def endElement(uri, local_name, q_name)
end_page() if @page_tag == q_name
end
def characters(ch, start, length)
if length > 0
builder = StringBuilder.new(length)
builder.append(ch)
@page_map[@page_number] << builder.to_s if @page_number > 0
end
end
def start_page
@page_number = @page_number + 1
@page_map[@page_number] = String.new
end
def end_page
return
end
end
要使用此内容处理程序,代码如下:
parser = AutoDetectParser.new
handler = PageContentHandler.new
parser.parse(input_stream, handler, @metadata_java, ParseContext.new)
puts handler.page_map
我正在使用 Apache Tika 1.9
并且内容提取非常棒。
我面临的问题是页面。我可以从文档元数据中提取总页数。但是我找不到任何方法从文档中提取每页的内容。
我进行了很多搜索并尝试了用户建议的一些解决方案,但对我没有用,可能是由于最新的 Tika 版本。
请为此提出任何解决方案或进一步的研究方向。
我会感激的。
注意:我使用 JRuby 来实现
这是我创建的自定义内容处理程序 class,它解决了我的问题。
class PageContentHandler < ToXMLContentHandler
attr_accessor :page_tag
attr_accessor :page_number
attr_accessor :page_class
attr_accessor :page_map
def initialize
@page_number = 0
@page_tag = 'div'
@page_class = 'page'
@page_map = Hash.new
end
def startElement(uri, local_name, q_name, atts)
start_page() if @page_tag == q_name and atts.getValue('class') == @page_class
end
def endElement(uri, local_name, q_name)
end_page() if @page_tag == q_name
end
def characters(ch, start, length)
if length > 0
builder = StringBuilder.new(length)
builder.append(ch)
@page_map[@page_number] << builder.to_s if @page_number > 0
end
end
def start_page
@page_number = @page_number + 1
@page_map[@page_number] = String.new
end
def end_page
return
end
end
要使用此内容处理程序,代码如下:
parser = AutoDetectParser.new
handler = PageContentHandler.new
parser.parse(input_stream, handler, @metadata_java, ParseContext.new)
puts handler.page_map