Namazu-devel-ja(旧)


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

Re: [Q] weighting mechanism



たかくです。

# 以下の情報はどこかに書いてあったわけでなく、
# 私個人が適当にコードを読みながら理解しただけなので、
# 間違えている可能性があります。

<20000607012244Q.hideto-i@xxxxxxxxxxxxxx>の記事において
hideto-i@xxxxxxxxxxxxxxさんは書きました。
> 「重み付け」はどのようなメカニズムなのでしょうか?

mknmz 内部で使用している重みづけテキストは、

	"\x7f32\x7f bababa hogehoge \x7f/32\x7f"

	(重みの値 = 32, 実際のテキスト: "bababa hogehoge")

みたいな構造になってます。

# 個人的にはコードを読むときには適宜、
# 	"<32>bababa hogehoge</32>"
# のように読むようにしてます。(無理やり ^^;;)

ちなみに、
このような重みづけテキスト( $weighted_str )自体は、
filter/*.pl 中で作成されます。

例えば、メール用のフィルタ( filter/mailnews.pl )では、
Subjectヘッダに対して以下のように重みづけテキストを生成しています。
〜〜
        if ($line =~ s/^subject:\s*//i){
            $fields->{'title'} = $line;
            # Skip [foobar-ML:000] for a typical mailing list subject.
            # Practically skip first [...] for simple implementation.
            $line =~ s/^\[.*?\]\s*//;

            # Skip 'Re:'
            $line =~ s/\bre:\s*//gi;

            my $weight = $conf::Weight{'html'}->{'title'};
            $$weighted_str .= "\x7f$weight\x7f$line\x7f/$weight\x7f\n";
〜〜

最終的に、この重み付けテキストは

    $content .= $weighted_str;   # add weights

として、本文テキストとまとめて count_words() で処理されます。

元メールにある count_words() 中のコードは、
このまとめられた本文から上記の構造の重み付けテキストを切り出す部分です。
--
高久 雅生 || Masao Takaku
    mailto:masao@xxxxxxxxxx  http://cosmo.ulis.ac.jp/~masao/