文本学习迷你项目

文章目录
  1. 1. 项目简介
  2. 2. 项目准备
  3. 3. parseOutText()
  4. 4. 清除“签名文字”
  5. 5. 进行 TfIdf
  6. 6. 源码分享
  7. 7. 书签

项目简介

本节课开始,你使用大量监督式分类算法,根据作者来识别邮件。 在这些项目中,我们为你做了预处理,将输入邮件转换到 TfIdf 中,这样你就能向算法提供这些邮件了。 现在,你将自行完成预处理工作,以便你能从原始数据直接得到经过处理的特征。

你将得到两个文本文件:一个包含来自 Sara 的所有邮件,一个包含 Chris 的邮件。 你还将访问 parseOutText() 函数,该函数接受作为参数的已读邮件,并且返回包含邮件中所有(被词干化的)单词的字符串。

项目准备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 下载语料库
import nltk
nltk.download()

# 停止词
from nltk.corpus import stopwords
sw = stopwords.words('english')

print len(sw)

# 词干化
from nltk.stem.snowball import SnowballStemmer
stemmer = SnowballStemmer('english')
stemmer.stem('responsiveness')
stemmer.stem('responsivity')
stemmer.stem('unresponsive')

parseOutText()

你将从热身习题开始了解 parseOutText()。 前往工具目录并运行 parse_out_email_text.py,该程序包含 parseOutText() 和一封测试邮件,用以运行此函数。

parseOutText() 获得被打开的邮件,然后仅返回文字部分,除去了可能出现在邮件开头的元数据,接下来就是邮件正文了。 我们现在已经设置好了这一脚本,这样它就能将邮件正文打印到屏幕上,你运行 parseOutText() 时会得到怎样的正文?
答:Hi Everyone If you can read this message youre properly using parseOutText Please proceed to the next part of the project

在 parseOutText() 中,添加以下注释:

1
# words = text_string

增强 parseOutText() ,这样返回的字符串就有了所有因使用 SnowballStemmer(使用 nltk 包,可在 http://www.nltk.org/howto/stem.html 找到我发现有用的一些示例)而获得的词干化单词。

重新运行 parse_out_email_text.py,该程序将使用你更新的 parseOutText() 函数。你现在的输出是什么?
答:hi everyon if you can read this messag your proper use parseouttext pleas proceed to the next part of the project

提示:你需要将字符串分解成单个单词,词干化每个单词,然后再将所有单词重新组合成一个字符串。

清除“签名文字”

在 text_learning/vectorize_text.py 中,你将迭代所有来自 Chris 和 Sara 的邮件。 将每封已读邮件提供给 parseOutText() 并返回词干化的文本字符串。然后做以下两件事:

  • 删除签名文字(“sara”、“shackleton”、“chris”、“germani”——如果你知道为什么是“germani”而不是“germany”,你将获得加分)
  • 向 word_data 添加更新的文本字符串——如果邮件来自 Sara,向 from_data 添加 0(零),如果是 Chris 写的邮件,则添加 1。

完成此步骤后,你应该有两个列表:一个包含了每封邮件被词干化的正文,第二个应该包含用来编码(通过 0 或 1)谁是邮件作者的标签。

对所有邮件运行程序需要花一些时间(5 分钟或更长时间),所以我们添加了一个 temp_counter,将第 200 封之后的邮件切割掉。 当然,一切就绪后,你会希望对整个数据集运行程序。

在以下方框中,放入你得到的 word_data[152] 字符串。
答:tjonesnsf stephani and sam need nymex calendar

进行 TfIdf

使用 sklearn TfIdf 转换将 word_data 转换为 tf-idf 矩阵。删除英文停止词。

你可以使用 get_feature_names() 访问单词和特征数字之间的映射,该函数返回一个包含词汇表所有单词的列表。有多少不同的单词?
答:

你 TfId 中的单词编号 34597 是什么?
答:stephen

需要说明的是,如果问题是“单词编号 100 是什么”,我们肯定会查找对应 vocab_list[100] 的单词。有时候,零索引数组谈论起来非常不好理解。

源码分享

https://github.com/voidking/ud120-projects

书签

机器学习入门
https://cn.udacity.com/course/intro-to-machine-learning--ud120