2

私は、機械学習アルゴリズムを使用して、選択した電子メールを重要または重要でないものとしてラベル付け (または分類) することを最終的な目的として、Python でコード化された優先電子メール受信トレイに取り組んできました。背景情報から始めて、質問に移ります。

これまで、メールからデータを抽出し、それを処理して最も重要なものを発見するコードを開発してきました。これは、次の電子メール機能を使用して実現されます。

  • 送信者アドレス頻度
  • スレッド アクティビティ
  • 受信日 (返信間隔)
  • 本文/件名の一般的な単語

私が現在持っているコードは、その重要性に基づいて各電子メールにランキング (または重み付け) (値 0.1-1) を適用し、次に「重要」または「重要でない」のいずれかのラベルを適用します (この場合、これはちょうど 1 または0)。ランクが 0.5 を超えると、優先順位が与えられます。このデータは CSV ファイルに保存されます (以下を参照)。

     From           Subject       Body        Date          Rank    Priority 
     test@test.com  HelloWorld    Body Words  10/10/2012    0.67    1
     rest@test.com  ByeWorld      Body Words  10/10/2012    0.21    0
     best@test.com  SayWorld      Body Words  10/10/2012    0.91    1
     just@test.com  HeyWorld      Body Words  10/10/2012    0.48    0
     etc        …………………………………………………………………………

2 セットの電子メール データがあります (1 つのトレーニングと 1 つのテスト)。上記は私のトレーニング メール データに適用されます。テストデータの重要性を予測できるように、学習アルゴリズムをトレーニングしようとしています。

これを行うために、私は SCIKIT と NLTK の両方を見てきました。しかし、チュートリアルで学んだ情報をプロジェクトに転送して実装するのに問題があります。どの学習アルゴリズムを使用するかについて、特に要件はありません。これは、以下を適用するのと同じくらい簡単ですか? もしそうなら、どのように?

   X, y = email.data, email.target

   from sklearn.svm import LinearSVC
   clf = LinearSVC()

   clf = clf.fit(X, y)

   X_new = [Testing Email Data]

   clf.predict(X_new)
4

3 に答える 3

4

最も簡単な (おそらく最速ではない) 解決策 (*) は、scikit-learn の を使用することDictVectorizerです。まず、Python のcsvモジュールを使用して各サンプルを読み込み、優先順位を分けながら、dict含まれるペアを作成します。(feature, value)

# UNTESTED CODE, may contain a bug or two; also, you need to decide how to
# implement split_words
datareader = csv.reader(csvfile)
dicts = []
y = []

for row in datareader:
    y.append(row[-1])
    d = {"From": row[0]}
    for word in split_words(row[1]):
        d["Subject_" + word] = 1
    for word in split_words(row[2]):
        d["Body_" + word] = 1
    # etc.
    dicts.append(d)

# vectorize!
vectorizer = DictVectorizer()
X_train = vectorizer.fit_transform(dicts)

X_trainこれでy、scikit-learn 分類器にフィードできる疎行列ができました。

注意してください:

  1. 目に見えないデータを予測したい場合は、同じ手順とまったく同じvectorizerオブジェクトを適用する必要があります。test_dictsつまり、上記のループを使用してオブジェクトを構築する必要がありますX_test = vectorizer.transform(test_dicts)

  2. 優先度を直接予測したいと仮定しました。代わりに「ランク」を予測することは、分類の問題ではなく、回帰の問題になります。一部の scikit-learn 分類子には、predict_proba電子メールが重要である確率を生成するメソッドがありますが、それらをランク付けしてトレーニングすることはできません。

(*) 私は scikit-learn の作成者であるDictVectorizerため、これは公平なアドバイスではありません。それは馬の口からですが:)

于 2013-02-05T17:35:05.830 に答える
0

Another library you may want to take a look at: http://pypi.python.org/pypi/textmining/1.0 (I've used it in the past)

于 2013-02-06T21:50:38.953 に答える
0

電子メールからデータを抽出し、それを処理して最も重要なデータを検出するコードをどのように開発したかを説明できますか?

送信者 アドレス 頻度 スレッド アクティビティ 受信日 (返信間の時間) 本文/件名の一般的な単語

于 2013-03-30T18:29:55.777 に答える