利用TF-IDF建立一个文档恢复系统

来源:互联网 发布:java内存泄露定位 编辑:程序博客网 时间:2024/06/08 09:15

为什么在导入数据时,使用sframe框架呢?
SFrame中的数据在GraphLabServer 中以列优先的方式存储,并且存储在持久性存储媒介(例如磁盘)中,避免了被内存大小所限制。 SFrame中的每一列都是一个大小不可变的SArray,但是SFrame可以通过增加或者减少列来轻松地改变。
一个SFrame基本上表现为SArray的一个有序dict
1.挖掘一下数据集的含义,查看这个数据集包含什么
2.统计量:
(1)查看其中一个单词“奥巴马”的文章的单词统计,使用graphlab中自带的词汇统计函数统计每个单词的词频
(2)统计出来的词频数比较杂乱,对这些数量进行排序。对字典计数,一列是单词,另一列是计数。
使用了stack()函数,这个函数将SFrame字典中的一列取出,然后和另外几列放在一起。(在我们的例子中,一列单词,另一列是计数)。
通过stack 字典被放入列表中分成了两列,但是没有进行排序,下面就进行排序(调用sort函数)
(3)通过sort函数排序之后,发现排序排出的词汇最多的单词,比如 the a 等,大多数都是一些无用的单词,那么需要用TF-IDF进行转化,筛选
(4)首先要计算整个文章的tf-idf,计算出整个文集中每个单词的数目(就是对整个文档中的每个单词涉及到的文章进行单词计数)
(5)Python中直接有?tf-idf这个函数,可以直接进行计算?出来的是一个tf-idf的字典形式
(6)注意,当老师对奥巴马的tf-idf值进行造表并排序时,使用的代码时仅仅一行代码进行排序,将其分开存储到Word和tf-idf两列(仅仅使用了一行代码,就是取出来再进行调用函数,查看其使用技巧),可以看到使用tf-idf计算出来的文章关键词都和奥巴马有着紧密的联系
3.手动计算距离
计算克林顿和奥巴马之间的相似度,调用了distance函数,使用cosine来计算相似度。看看奥巴马的tf-idf和克林顿的tf-idf之间的距离是否很小,很小表示其相似程度高(使用贝克汉姆来进行对比)
4.使用近邻模型计算两者之间的距离(建模)
我们还是使用graphlab中的叫做nearest_neighbors的离线模型来计算,返回值使用label来定义,返回最近邻居的真实标签label也就是那个人的名字
(1)使用knnmodel中的query方法,也就是使用query函数(调用这个函数,可以直观的显示出一个表格,表格中有相关的从上到下的距离排列

原创粉丝点击