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        …………………………………………………………………………

我有两组电子邮件数据(一组培训,一组测试)。以上适用于我的培训电子邮件数据。我现在正在尝试训练一种学习算法,以便我可以预测测试数据的重要性。

为此,我一直在研究 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's 的作者DictVectorizer,所以这不是公正的建议。不过,这是从马的嘴里说的:)

于 2013-02-05T17:35:05.830 回答
0

您可能想查看的另一个库:http: //pypi.python.org/pypi/textmining/1.0 (我过去曾使用过它)

于 2013-02-06T21:50:38.953 回答
0

您能否演示如何开发代码以从电子邮件中提取数据并对其进行处理以发现最重要的数据。

发件人 地址 频率 线程 活动 收到日期(回复之间的时间) 正文/主题中的常用词

于 2013-03-30T18:29:55.777 回答