Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: PDF ファイルをページごとに分割



>はイマイチなので、早いところファイル入出力を抽象化してこういった要求に
>も柔軟に対応できるようにしたいところです。2.1 matter ですかね。

こんな感じですか?(まだ甘い?)

既存のインデックスを開いてファイルをひとつだけ追加して
インデックスと閉じる
(PDFファイルなど追加ページが複数になる可能性も当然あり)
namazuIndex   *index             = NULL;
namazuEntry   *new_entry         = NULL;
GList         *entry_list        = NULL;
GList         *li                = NULL;/* イテレータ */
gchar         *doc_uri           = "~/hoge.txt";
gchar         *index_uri         = "/usr/var/index";

index = namazu_index_open(index_uri);
filter_func = resource_mmagic(doc_uri);
/*リソースの内容を調べてフィルタ関数を選択*/
new_entry_list = filter_func(doc_uri);
/*
filter_funcでページ分割,テキストの正規化
(インデックスのターゲット文字コードへの変換等),
重みづけ処理、フィールド解析
必要に応じてresource_mmagic,filter_funcも再起的に実行
retrun は GListへのポインタ(namazuEntryのリスト)
*/
for(li = entry_list; li != null;li = li->next){
    namazu_index_add_entry(index,li->data)
}
g_list_foreach(entry_list,(GFunc)namazu_entry_list_free,NULL);
g_list_free(entry_list);
namazu_index_close(index);


データ構造
struct namazuEntry{
  GList      *field;        /*namazuEntryFieldのリスト*/
  GList      *body_order;   /*namazuEntryBodyのリスト*/
  GList      *body_noorder; /*namazuEntryBodyのリスト*/
  gchar      *uri;
  gchar      *source_uri;
/* 例えば
 uri        = "http://www.namazu.org/intex.html#mige"
 source_uri = "http://www.namazu.org/intex.html",
とか
 uri        = "/home/hoge/hoge.pdf#page=10"
 source_uri = "/home/hoge/hoge.pdf",
*/
};
struct namazuEntryField{
  gchar *name;
  GList *value_list;
};
struct namazuEntryBody{
  gchar *word;
  guint *weight;
};