From: akira yamada Date: 1997-11-27T16:09:14+09:00 Subject: [ruby-list:5463] Re: Mail to HTML 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 さん) >> ・メールの場合、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 関連ページ