ファイルからの文字列・メタ情報の抽出方法
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 を正しく設定しないと文字化けの原因になります。
