ファイルからの文字列・メタ情報の抽出方法
S2Robot では、ファイルから文字列とメタ情報を抽出する方法として、Extractor を提供しています。 Extractor は ExtractorFactory から MIME タイプをキーとして取得することができます。 また、dicon ファイルの設定により自由に Extractor を追加、削除することが可能です。
本機能は、S2Robot のクローリング機能とは独立しているので、ファイルからの文字列抽出をしたい場合に利用可能です。 Extractor だけ利用したい場合は、s2robot_extractor.dicon を include してください。
設定方法
Extractor をカスタマイズする場合は、s2robot_extractor.dicon を作成してその中で定義します。 標準の s2robot_extractor.dicon は以下になります。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <component name="tikaExtractor" class="org.seasar.robot.extractor.impl.TikaExtractor"/> <component name="extractorFactory" class="org.seasar.robot.extractor.ExtractorFactory"> <initMethod name="addExtractor"> <arg>{ "application/xml", "image/svg+xml", "application/x-tika-msoffice", "application/vnd.visio", "application/vnd.ms-powerpoint", "application/vnd.ms-excel", "application/vnd.ms-excel.sheet.binary.macroenabled.12", "application/msword", "application/vnd.ms-outlook", "application/x-tika-ooxml", "application/vnd.openxmlformats-officedocument.presentationml.presentation", "application/vnd.ms-powerpoint.presentation.macroenabled.12", "application/vnd.openxmlformats-officedocument.presentationml.template", "application/vnd.openxmlformats-officedocument.presentationml.slideshow", "application/vnd.ms-powerpoint.slideshow.macroenabled.12", "application/vnd.ms-powerpoint.addin.macroenabled.12", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/vnd.ms-excel.sheet.macroenabled.12", "application/vnd.openxmlformats-officedocument.spreadsheetml.template", "application/vnd.ms-excel.template.macroenabled.12", "application/vnd.ms-excel.addin.macroenabled.12", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/vnd.ms-word.document.macroenabled.12", "application/vnd.openxmlformats-officedocument.wordprocessingml.template", "application/vnd.ms-word.template.macroenabled.12", "text/html", "application/xhtml+xml", "application/x-asp", "application/rtf", "application/pdf", "text/plain", "application/vnd.sun.xml.writer", "application/vnd.oasis.opendocument.text", "application/vnd.oasis.opendocument.graphics", "application/vnd.oasis.opendocument.presentation", "application/vnd.oasis.opendocument.spreadsheet", "application/vnd.oasis.opendocument.chart", "application/vnd.oasis.opendocument.image", "application/vnd.oasis.opendocument.formula", "application/vnd.oasis.opendocument.text-master", "application/vnd.oasis.opendocument.text-web", "application/vnd.oasis.opendocument.text-template", "application/vnd.oasis.opendocument.graphics-template", "application/vnd.oasis.opendocument.presentation-template", "application/vnd.oasis.opendocument.spreadsheet-template", "application/vnd.oasis.opendocument.chart-template", "application/vnd.oasis.opendocument.image-template", "application/vnd.oasis.opendocument.formula-template", "application/x-vnd.oasis.opendocument.text", "application/x-vnd.oasis.opendocument.graphics", "application/x-vnd.oasis.opendocument.presentation", "application/x-vnd.oasis.opendocument.spreadsheet", "application/x-vnd.oasis.opendocument.chart", "application/x-vnd.oasis.opendocument.image", "application/x-vnd.oasis.opendocument.formula", "application/x-vnd.oasis.opendocument.text-master", "application/x-vnd.oasis.opendocument.text-web", "application/x-vnd.oasis.opendocument.text-template", "application/x-vnd.oasis.opendocument.graphics-template", "application/x-vnd.oasis.opendocument.presentation-template", "application/x-vnd.oasis.opendocument.spreadsheet-template", "application/x-vnd.oasis.opendocument.chart-template", "application/x-vnd.oasis.opendocument.image-template", "application/x-vnd.oasis.opendocument.formula-template", "image/bmp", "image/gif", "image/jpeg", "image/png", "image/tiff", "image/vnd.wap.wbmp", "image/x-icon", "image/x-psd", "image/x-xcf", "application/zip", "application/x-tar", "application/x-gzip", "application/x-bzip", "application/x-tika-java-class", "audio/mpeg", "application/x-midi", "audio/midi", "audio/basic", "audio/x-wav", "audio/x-aiff" }</arg> <arg>tikaExtractor</arg> </initMethod> </component> </components>
標準では、Apache Tika を利用することにより、MS Office 系ファイルや PDF ファイルからの文字列抽出が可能です。 音声ファイルや画像からはメタ情報を取得することができます。
使用方法
以下のように ExtractorFactory を DI して、利用することができます。
@Resource protected ExtractorFactory extractorFactory; : InputStream in = ... ex. new FileInputStream("/tmp/text.doc") ...; String mimeType = ... ex. "application/msword" ...; Extractor extractor = extractorFactory.getExtractor(mimeType); ExtractData extractData = extractor.getText(in); String content = extractData.getContent(); // content に text.doc 内の文字列だけ入る for (String key : extractData.getKeySet()) { String[] values = extractData.getValues(key); // values にはメタ情報が入る } :
各種Extractor
Extractor を追加する場合は、ExtractorFactory にも追加してください。
TextExtractor
テキストファイルからテキストを抽出します。
<component name="textExtractor" class="org.seasar.robot.extractor.impl.TextExtractor"/>
XmlExtractor
XML ファイルからテキストを抽出します。
<component name="xmlExtractor" class="org.seasar.robot.extractor.impl.XmlExtractor"/>
HtmlExtractor
HTML ファイルからテキストを抽出します。
<component name="htmlExtractor" class="org.seasar.robot.extractor.impl.HtmlExtractor"/>
HtmlXpathExtractor
HTML ファイルから XPath で指定してテキストを抽出します。
<component name="htmlXpathExtractor" class="org.seasar.robot.extractor.impl.HtmlXpathExtractor"> <property name="targetNodePath">"//HTML/BODY | //@alt | //@title"</property> <initMethod name="addFeature"> <arg>"http://xml.org/sax/features/namespaces"</arg> <arg>"false"</arg> </initMethod> </component>
TikaExtractor
Apache Tika を利用して様々なファイルからテキストを抽出します。 ファイルの種類は自動的に判定されます。
<component name="tikaExtractor" class="org.seasar.robot.extractor.impl.TikaExtractor"/>
CommandExtractor
コマンドライン呼び出しによりテキスト抽出を行う Extractor です。 たとえば、以下のように設定することで pdftotext コマンドを利用してテキスト抽出ができます。
<component name="pdfCmdExtractor" class="org.seasar.robot.extractor.impl.CommandExtractor"> <property name="command">"pdftotext $INPUT_FILE $OUTPUT_FILE"</property> <property name="outputEncoding">"UTF-8"</property> </component>
$INPUT_FILE は変換元のファイルパス、$OUTPUT_FILE は変換後のファイルパスです。 これらのファイルは S2Robot により一時的に作成され、テキスト抽出後に削除されます。 outputEncoding は $OUTPUT_FILE のエンコーディングです。 outputEncoding を正しく設定しないと文字化けの原因になります。