私は実際に以前にこのようなことをしたことがありますが、それはかなり複雑でした。基本的に、抽出プラグインをパラメーター化できるプラグインシステム(うんざりするほどMavenのようなもの)を作成しました。
これは、DSLとしてSpringBeanXMLを使用して行うことができます。
<bean id="strategy1" class="absolute.class.name">
</bean>
<bean id="extractorExecutor" class="class.to.extractorExecutor">
<property name="strategies">
<list>
<item ref="strategy1" />
<item ref="strategy2" />
</list>
</property>
</bean>
エクストラクタは基本的に、次のようなインターフェイスを実装する一連のBeanをループします。
public interface ExtractStrategy {
/**
* null means skip this extractor and go to the next one.
*/
public Extracted extract(String data);
}
抽出機能では、次のことを行います。
for (ExtractorStrategy e : strategies) {
Extracted ex = e.extract(data);
if (ex != null) break;
}
Springはこれをリゾルバーチェーンパターンと呼び、一部の人々はこれを戦略パターンと呼びます。
次に、@digitaljoelが言ったようなXPathエクストラクタやRegexExtractorなどを作成できます。戦略を実行したい順序で配置します。
ヒューリスティックが必要なデータマイニングでは、このパターンを常に使用しています。厄介なHTML(他の人からのコメントで言及されている)を抽出するには、JerichoまたはJSoupをお勧めします(この場合、Jericho戦略を作成し、チェーンに追加するだけです)。