Thu, 27 Nov 97 14:30:12 +0900 頃の
Mail-Count: 05453
Subject: [ruby-list:5453] Re: Mail to HTML
についてのお話にて Shin-ichiro HARA さん曰く…
(S == Shin-ichiro HARA <sinara / blade.nagaokaut.ac.jp> さん)
>> ・メールの場合、References も In-Reply-To も付けてこない場合がある
>> ので、引用部を抽出して、マッチングをとる。
In article 05453, <199711270525.OAA02944 / blade.nagaokaut.ac.jp>
S> 私の所では Subject が Re: で始まると最も最近の「似ている」Subject
S> を持つものに繋げています。
この「似ている」ってどうやって判断しているのですか?
非常に興味があります.
手元でやっているスクリプトでのスレッドの判断は
Subject を MIME デコードしてから空白文字をすべて除去し
変な「Re: 」を整理し, さらに末尾の /\((was|Re:).*\)$/oi を
除去したものが一致しているときにだけ繋げるようにしています.
# 最重要なポイントは In-reply-to や Referneces です.
# これらがないものはスレッドに繋げていません.
>> ところで、引用部の抽出はどうやってなさってますか? 「>」や「|」など
>> だけをチェックするのは簡単ですが、「takagi> 」となっていたりする場合
>> もあるので、「複数の行に連続して先頭に同じ文字列がきている場合」とか
>> やんなきゃいけないなーなどと思ってましたが…。
S> そうなんですよ。引用が1行の時もあるし難しいです。結局、こちら
S> では「ちょーいいかげん」にやっています。例えば、最初の非空白の
S> 行が「です。」あるいは「と申します。」で終ると「名乗り」と判断
S> するとか。^^;;
わたしがやっている方法(といえるか?)は
非常に場当たり的なのですがおおざっぱには以下の通りです.
・/^(.{0,10}[>\|:}#]+\s*)+/ にマッチする行を除外する.
・それ以外の部分は 1)空行, 2)上のパターンにマッチした時
を区切りとして段落を形成する(物理的に一行にしちゃう.
要するに「段落\n段落\n…」という文字列作る).
・形成した段落の総量(上の文字列の長さ)が適当なサイズなったら
各段落に対して以下を適用しする.
# 空白文字の整理
gsub!(/[ \t]+/o, ' ')
# 定型句を取り除く
sub!(/^\s*.{0,20}(です|と申します|といいます)(。|.|.)?\s*$/o, '')
sub!(/^.+(返事です|reply\s*です|曰く)(。|.|,|…|.,)?\s*$/oi, '')
sub!(/^(#|#).*$/o, '')
# 定型ヘッダを取り除く
sub!(/^.*#{Subject_exclude}.*$/oi, '')
sub!(/^.*In .*(article|message).*$/oi, '')
sub!(/^.*[-.\w]+@[-\w]+\.[-\w]+.*$/io, '')
sub!(/^.*\d{1,2}:\d{1,2}:\d{1,2}.*$/, '')
・最後に適当な長さに切り詰める.
S> 凝り出すと面白いですよね。やまださんの、
…
S> まで解析できたら完璧?(^^)
実は最後まで引っ掛かったのが自分の定型ヘッダでした(^_^;)
で, 色々やってみた結果が上なんですが X-ML-Name: ruby-list,
X-Mail-Count: 05441 に上の処理を加えると
ちなみに昨夜の →netlab.co.jp は比較的空いていて
なにが違うだろう? RC5-64 でやり取りするキーはたかが
とかなってしまいます(^_^;;;) やっぱ引用符が難物ですね.
--
やまだ あきら (akira / linux.or.jp or akira / nurs.or.jp)
Linux 関連ページ <URL:http://www.netlab.co.jp/~akira/linux/>