0

Outlookに最大2万通の電子メールでいっぱいのかなり大きなアカウントがあり、それらの電子メールから電話番号を抽出する必要があります。

メールの例は次のとおりです。

From: Amy Schwartz <amy@blahdyblah.com>

Dear Anatoliy, 
I want you to do blahdy blahdy blah.

Amy Schwartz
(347) 555-1212 <---- I want this
Blahdy Blah Company

アイデアは、すべての電子メールを調べて、正規表現を介して最後の電話番号を照合し、次の形式でリストをエクスポートすることです。

  • 名前:「From」フィールドからの名前
  • Eメール:「From」フィールドからのEメール
  • 電話:メールテキストで一致した最後の電話番号

これを行う方法について何かアイデアはありますか?

更新:事前に構築されたソリューションは見つかりませんでしたが、これを使用して自分自身をハッキングしています。codeTwoOutlookExpress。任意の電子メールフィールド(本文、HTML本文、from、from name)をCSVにエクスポートできます。少し遅いです(Win7VMを実行しているi7iMacで3秒のメッセージ)。しかし、それは機能します:)そして、そこから、おそらくデータベースに入れて、正規表現の魔法を実行します。完了したら後処理します。

4

1 に答える 1

0

理解した。Node.js スクリプトの作成方法を知っていれば、非常に簡単です (ただし、Bash で作成できると確信しています)。

1) Outlook Exportプラグインを使用して、すべてのメールを CSV にエクスポートします。メールが最初の列、名前が 2 番目の列、本文 (テキスト) が 3 番目の列であることを確認してください。

2) メールの CSV と同じディレクトリに Node JS で次のスクリプトを記述します。

var fs = require('fs');
var csv = require('csv');
csv()
    .from.stream(fs.createReadStream(__dirname+'/data.csv'))
    .to.path(__dirname+'/out.csv')
    .transform( function(row){
      var match = row[2].match(/(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})/);
        return '"' + row[0] + '","' + row[1] + '","' + (match ? match[0] : '') + '"\n';
    })
    .on('error', function(error){
      console.log(error.message);
    });

を使用して実行しnode script.jsます。

以上です!非常に高速に実行されます (2 万通のメールで約 20 秒)。

何か提案があれば教えてください (または、これをダウンロード可能な実行可能ファイルにパッケージ化してください)。

于 2013-03-22T01:37:38.830 に答える