Hadoop 实现 TF-IDF 计算

学习Hadoop 实现TF-IDF 算法,使用的是CDH5.13.1 VM版本,Hadoop用的是2.6.0的jar包,Maven中增加如下即可

 <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>2.6.0</version>
      <scope>provided</scope>
    </dependency>

  

代码如下:

package top.eviltuzki.tfidf;

import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

import java.io.*;
import java.util.*;

public class App extends Configured implements Tool {

    public int run(String[] strings) throws Exception {
        //第一个MR,计算IDF
        Job job = Job.getInstance(getConf());
        job.setJarByClass(App.class);
        job.setInputFormatClass(TextInputFormat.class);
        job.setOutputFormatClass(TextOutputFormat.class);

        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        job.setReducerClass(IdfReducer.class);
        job.setMapperClass(IdfMap.class);
        job.setNumReduceTasks(1);

        String[] args = new GenericOptionsParser(getConf(), strings).getRemainingArgs();
        FileInputFormat.setInputPaths(job,new Path(args[0]));
        FileOutputFormat.setOutputPath(job,new Path(args[1]));

        job.waitForCompletion(true);

        //第二个Map,计算TF以及TF-IDF
        Job job2 = Job.getInstance(getConf());
        job2.setJarByClass(App.class);
        job2.setInputFormatClass(TextInputFormat.class);
        job2.setOutputFormatClass(TextOutputFormat.class);

        job2.setMapOutputKeyClass(Text.class);
        job2.setMapOutputValueClass(DoubleWritable.class);

        job2.setMapperClass(TfMap.class);
        job2.setNumReduceTasks(0);

        args = new GenericOptionsParser(getConf(), strings).getRemainingArgs();
        FileInputFormat.setInputPaths(job2,new Path(args[0]));
        FileOutputFormat.setOutputPath(job2,new Path(args[2]));

        job2.waitForCompletion(true);

        return 0;

    }

    public static class IdfMap extends Mapper<LongWritable,Text,Text,IntWritable>{

        /**
         * 比较简单,就是进行WordCount的操作
         * @param key
         * @param value
         * @param context
         * @throws IOException
         * @throws InterruptedException
         */
        @Override
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            String[] words = value.toString().split(" ");
            Set<String> set = new HashSet<String>();
            for (String word : words) {
                if (word.length() > 1)
                    set.add(word);
            }
            for (String s : set) {
                context.write(new Text(s),new IntWritable(1));
            }
        }
    }

    public static class IdfReducer extends Reducer<Text,IntWritable,Text,FloatWritable>{
        @Override
        protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
            int sum =0 ;
            for (IntWritable value : values) {
                sum+=value.get();
            }
            float x =(float) ( 500.0 / sum+1);//比较笨了。。直接写死。。我这有500个样本,没想出来怎么读取数量。。。
            float log = (float) Math.log(x);
            context.write(key,new FloatWritable(log));
        }
    }

    public static class TfMap extends Mapper<LongWritable,Text,Text,DoubleWritable>{
        private Map<String,Double> map = new HashMap<>();

        @Override
        protected void setup(Context context) throws IOException, InterruptedException {
            FileSystem fs = FileSystem.get(context.getConfiguration());
            // 读取文件列表,不知道怎么加载路径了。。。就直接写死了。。。
            Path filePath =new Path("/user/zj/tfidf/jaroutput/part-r-00000");
            try (InputStream stream = fs.open(filePath)) {
                try (BufferedReader reader = new BufferedReader(new InputStreamReader(stream))) {
                    String line = "";
                    while ((line=reader.readLine())!=null){
                        String[] split = line.split("\t");
                        if(split.length == 2)
                            map.put(split[0],Double.parseDouble(split[1]));
                    }
                }
            }

        }
        @Override
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            String[] wordArray = value.toString().split(" ");
            List<String> words = new ArrayList<>();
            for (String s : wordArray) {
                if (s.length()>1)
                    words.add(s);
            }
            Map<String,Integer> res = new HashMap<>();
            for (String word : words) {
                if(res.containsKey(word))
                    res.put(word,res.get(word)+1);//计算本文的词频
                else
                    res.put(word,1);
            }
            for (Map.Entry<String, Integer> entry : res.entrySet()) {
                String key1 = entry.getKey();
                Integer value1 = entry.getValue();
                double tf = value1*1.0 /words.size();//这里计算的就是tf,tf = 本文中这个词的次数/总词数
                context.write(new Text(key1),new DoubleWritable(tf * map.get(key1)));//tf直接和idf相乘
            }
        }
    }

    public static void main(String[] args) throws Exception {
        Configured conf = new Configured();
        ToolRunner.run(new App(),args);
    }
}

  

整体实现算是比较简单,第一个MR计算idf,map是统计每个文档出现过的词,都记成1次,然后reducer统计所有的,这样就得到了每一个词的idf了

公式是idf=log(总文章数/(词出现的文章数+1))

第二个Map就计算tf ,既然得到了TF就直接将Tf-IDF一起计算了。。可是读idf的结果。。没找到好办法,直接写死了。。计算idf的总文章数也是笨的直接写死了 = =!

以后学会了怎么处理再改吧。。

读取文件的样本比较简单,经过简单处理,一行是一个新闻,进行了简单的分词处理,标点符号还有单个汉字之类的就直接过滤掉了(程序中有)

隐瞒 外星人 存在 受 质疑 ? 或 掌握 地外文明 搜狐 据 国外 媒体 报道 , 美国 国家 航空 航天局 ( ) 在 公众 眼中 是 一个 神秘 存在 , 该 机构 负责 太空 计划 并 拥有 最 先进 的 航空 航天 技术 , 不过 随着 太空 探索 的 不断 加深 , 公众 对 它 的 疑虑 也 日 益 俱 深 , 并 认为 他们 早已 与 外星人 有 了 联系 但 并 未 公开 。 公众 质疑 隐瞒 了 外星人 消息 世界 上 有 一些 机构 或者 组织 , 因 其 承担 的 工作 之 重要 , 以及 需要 的 专业 知识 之 精深 , 在 公众 眼中 总是 蒙 着 一 层 神秘 的 面纱 。 而 它们 对 公众 的 世界观 影响力 之 强 也 超乎 想象 。 美国 国家 航空 航天局 ( 简称 ) 就是 其中 一个 典型 的 例子 。 是 美国 负责 太空 计划 的 政府 机构 , 总部 位于 华盛顿 哥伦比亚特区 , 拥有 最 先进 的 航空 航天 技术 , 参与 了 美国 阿波罗 计划 、 航天飞机 发射 、 太阳系 探测 等 航天 工程 , 为 人类 探索 太空 做出 了 巨大 贡献 。 然而 伴随 着 太空 探索 深度 的 扩大 , 公众 对 它 的 疑虑 也 与 日 俱 深 。 公众 质疑 : 他们 早已 与 外星人 取得 了 联系 , 但 一直 没有 公开 美国 气象学家 斯考特 ? 斯蒂文斯 日前 指责 美国 国家 航空 航天局 向 公众 隐瞒 了 许多 由 太阳 轨道 望远镜 传回 地球 的 资料 , 其中 包括 有 可能 是 “ 外星 生命 ” 的 信息 。 这 成为 不曾 间断 的 对 质疑 的 又 一个 新鲜 声音 。 太阳 轨道 望远镜 是 一 项 由 美国 国家 航空 航天局 和 欧洲 空间 局 实施 的 联合 研究 计划 。 目前 , 其 所 处 位置 距离 地球 约 万 公里 , 主要 对 太阳 的 爆发 情况 、 太阳 表面 喷 出 物质 和 太阳 附近 的 彗星 进行 拍照 。 到 现在 为止 , 该 望远镜 拍摄 的 照片 数量 已 高达 数 万 张 。 其中 一些 据称 出现 了 “ 不明飞行物 ” 的 身影 。 但 要么 对 其 避而不谈 , 要么 就 解释 说是 数字 图像 在 传回 地球 的 过程 中 出现 了 差错 , 才 导致 照片 中 出现 奇特 的 物体 。 但 斯考特 ? 斯蒂文斯 指出 , 通过 分析 望远镜 传回 地球 的 所有 照片 资料 , 他 发现 在 不同 年份 拍摄 的 照片 上 都会 出现 完全 相同 的 不明 物体 。 斯考特 ? 斯蒂文斯 由此 断言 , 如果 这些 不明 物体 仅仅 是 偶然 的 干扰 因素 ( 如 宇宙 尘埃 或 残留 的 太阳 粒子 等 ) 造成 的 , 那么 它们 的 形状 和 尺寸 就 不 可能 总是 完全 一样 。 他 表示 这 有 可能 表明 在 太阳 的 周围 经常 有 不明飞行物 光顾 , 并且 不只 一 艘 , 而是 一个 完整 的 编队 。 “ 外星人 ” 正在 以 太阳 为 客体 开展 试验 , 并 试图 影响 太阳 的 活动 情况 。 其实 , 的 使命 和 愿景 当中 就 蕴含 了 “ 寻找 地 外 生命 ” 和 “ 星际 移民 ” 的 内容 。 而 长期 以来 , 都 有 科学家 和 普通 公众 质疑 对 公众 隐瞒 了 有关 地外文明 的 真相 , 更 有 人 指出 , 早已 与 “ 外星人 ” 取得 了 联系 , 但 出于 种种 原因 一直 没有 公开 。 年 发生 在 美国 的 阿诺德 空中 遭遇 飞碟 案 和 罗斯威尔 飞碟 坠毁 案 以及 此后 由 美国 军方 领导 的 专门 调查 现象 的 “ 蓝皮书 计划 ” 、 “ 号志 计划 ” 、 “ 新墨西哥州 怀特 沙漠 试验场 计划 ” 等 研究 活动 , 开创 了 现代 研究 的 新纪元 。 多年 来 全球 各地 收到 的 目击 案例 已 超过 万 起 , 其中 有数 十万 起 是 无法 用 自然 和 物理 现象 做出 合理 解释 的 , 人们 怀疑 它 是 一 种 超越 人类 文明 的 外星 智慧 生命 所为 。 美国 国家 射电 天文台 和 国家 航空 航天局 从 年 开始 进行 微波 监听 宇宙 文明 的 “ 奥兹 玛 计划 ” 和 “ 赛克 洛普 计划 ” 。 年月 和 年月 , 美国 先后 发射 了 先驱者 号 、 号 [| 宇宙 飞船 |] , 携带 地球人 给 外星人 的 一 封 自荐信 , 当中 镌刻 着 地球 和 太阳系 在 银河系 的 位置 , 地球人 男人 和 女人 的 形象 , 以及 表示 宇宙 间 最 丰富 的 物质 氢 的 分子 结构图 , 寄望 外星人 截获 此 信 。 到 深 空 去 探测 “ 地外文明 ” 的 存在 ? 时至 今日 , 已经 发展 成为 雇员 人数 约 万 的 大型 机构 , 年度 经费 超过 亿 美元 。 在 其 推进 的 众多 高 精 尖 项目 中 , “ 深 空 网络 ” 是 近期 的 一 大 热点 。 那么 , “ 深 空 网络 ” 到底 为 何物 ? 深 空 网络 ( , ) 是 一个 支持 星际 任务 、 无线电 通信 以及 利用 射电天文学 观察 探测 太阳系 和 宇宙 的 国际 天线 网络 , 它 是 地球 上 最大 也 是 最 敏感 的 科学 研究 用途 的 通信 系统 。 目前 深 空 网络 由 三 处 呈 度 分布 的 深 空 通信 设施 构成 , 一 处在 美国 加州 的 戈尔德斯通 , 处于 巴斯托 市 附近 的 莫哈维沙漠 之 中 ; 一 处 位于 西班牙 马德里 附近 ; 另 一 处 位于 澳大利亚 的 堪培拉 附近 。 这种 安排 使得 可以 连续 观察 地球 的 自转 的 过程 。 深 空 探测 的 一个 重要 用途 , 便 是 探索 地外文明 的 存在 。 分享
库克 : 最大压力 的 搜狐 事件 : 上周 三 , 苹果 股价 单 日 大跌 创 近 个 月 最低 , 按 当天 收盘价 计算 , 距离 月 创下 的 历史 高点 跌 去 了 逾 , 被 认为 已经 踏 上 了 熊 途 。 点评 : 我 想 库克 最近 一定 心情 不好 , 压力 很 大 。 因为 近 一 段 时间 来 , 糟糕 的 事情 一 件 接着 一 件 降临 到 苹果 头上 。 令 人 失望 的 开启 了 苹果 的 厄运 , 地图 门 、 高 管 下课 、 销售 不及 预期 , 重重 利空 叠加 之 下 , 郭台铭 的 一 句 “ 太 难 生产 了 , 我们 难以 满足 巨大 的 需求 ” , 就 成为 压垮 苹果 股价 的 最后 一 根 稻草 。 昔日 的 光环 已经 褪 尽 , 苹果 的 竞争力 和 创新力 正 遭受 前所未有 的 质疑 。 面临 掌舵 苹果 以来 的 最大 挑战 , 库克 能否 化 危 为 机 , 扭转 颓势 , 尚 不得而知 。 分享
单身贵族 也 有 品 热门 [| 数码 相机 |] 大 盘点 搜狐 数码 佳能 作为 升级 机型 , 在 诸多 细节 方面 做 了 改变 , 大幅 提升 了 对 焦 及 连 拍 性能 , 为 普及型 [| 数码 单反 相机 |] 定义 到 了 新 高度 。 新型 图像 感应器 有效像素 为 万 , 与 能 高效 处理 图像 并 控制 相机 功能 的 数字 影像 处理器 组合 , 实现 了 高画质 、 高感光度 低 噪 点 。 目前 , 佳能 报价 参数 图片 论坛 热门 软件 单机 的 最新 报价 为 元 。 重庆 掀 开 触控 新 篇章 佳能 仅 ▲ 佳能 从 外观 上 看 , 佳能 与 尺寸 重量 相差 不大 , 整体 外形尺寸 为 × × , 重 约 仅 机身 。 除了 按键 布局 基本 上 没有 变化 外 , 最大 的 改进 在于 它 采用 英寸 万 像素 可 [| 旋转 触摸屏 |] , 这 也 是 佳能 首次 将 触摸屏 设计 在 单反 上 , 配合 带来 高速 合 焦 , 可 实现 触摸 对 焦 、 触摸 快门 、 触摸 回放 功能 。 重庆 掀 开 触控 新 篇章 佳能 仅 ▲ 佳能 从 性能 上 看 , 佳能 搭载 规格 传感器 , 有效像素 达 万 。 配合 最新 型 处理器 , 实现 了 高画质 、 高感光度 低 噪 点 它 的 快门速度 为 秒 , 连 拍 速度 达 每 秒 张 , 感光度 范围 , 扩展 可 达 。 其 采用 中央 八 向 双十字 全 点 十字型 自动 对 焦 , 使 所有 自动 对 焦 区域 都 能 高精度 合 焦 。 追踪 动态 被 摄 体 持续 对 焦 的 人工智能 伺服 自动 对 焦 算法 得到 进化 , 性能 大幅 提高 。 重庆 掀 开 触控 新 篇章 佳能 仅 ▲ 佳能 编辑 点评 : 佳能 还 在 内置 相片 处理 方面 提供 给 用户 最大 的 选择 余地 , 不但 提供 了 拍摄 模式 , 还 增加 了 快速 连 拍 张 照片 合成 的 手持 夜景 模式 , 另外 相机 又 内置 了 一 系列 特效 滤镜 , 配合 屏 的 轻 触 设计 , 用户 可 更 方便 加入 不同 效果 , 输出 独 具 风格 的 照片 。 参考价格 元 我 也 要 打分 : 喜欢 一般 很 差 更 多 条 论坛 热贴 条 人 关注 分 上 一 页 下 一 页 文本 导航 第 页 尼康 第 页 佳能 套机 第 页 宾得 套机 第 页 徕卡 第 页 卡西欧 第 页 佳能 第 页 索尼 分享
索尼 美 上市 三防 设计 美元 起 搜狐 【 搜狐 数码 消息 】 月 日 消息 , 在 登录 欧洲 市场 个 月 之后 , 索尼 日前 已经 正式 于 美国 开 售 。 这 款 [| 三防 手机 |] 共有 黄 、 白 、 黑 三 种 颜色 选择 , 售价 也 因 机身 颜色 而 不同 , 分别 是 美元 、 美元 、 美元 ( 无 锁 机 ) 。 配置 方面 , 配备 了 英寸 ( ) 抗 划伤 无机 玻璃 显示屏 , 即使 屏幕 或 手指 沾 有 液体 , 仍 可 准确 跟踪 。 另外 , 机身 内部 采用 了 双核 芯片 , 内存 , 存储 空间 ( 支持 卡 拓展 ) , 万 [| 像素 摄像头 |] , [| 毫安 电池 |] 。 ( ) 分享
最新 研究 称 近 距 双子星 是 星云 奇特 喷射 流 来源 搜狐 【 搜狐 科学 消息 】 据 美国 太空 网站 报道 , 目前 , 科学家 最新 研究 表示 , 行星状星云 中 一对 彼此 环绕 的 恒星 作为 “ 宇宙 发电站 ” , 为 该 星云 壮观 喷射 流 提供 后方 能量 。 这 项 发现 揭晓 了 科学家 长期 置疑 “ 弗莱明 号 ” 行星状星云 的 喷射 流 形状 之 谜 , 这些 喷射 流 呈现 为 奇特 的 节 状 和 弯曲 结构 , 最新 研究 显示 这种 奇特 喷射 流 是 由 “ 发电站 ” 双子星 的 轨道 交互 作用 提供 动力 。 研究 报告 作者 、 智利 天文学家 亨利博芬 说 : “ 这 是 一 项 大型 天文 观测 研究 项目 , 用于 理解 奇特 、 非 对称 形状 的 行星状星云 。 ” 据 科学家 称 , 的 行星状星云 具有 不 平衡 结构 。 事实上 行星状星云 与 行星 没有 关系 , 它们 是 垂死 白矮星 生命 末期 阶段 。 博芬 研究 小组 使用 甚 大 望远镜 观测 “ 弗莱明 号 ” 行星状星云 , 据称 , 这 个 行星状星云 是 以 天文学家 威廉米娜 弗莱明 命名 , 她 于 年 在 哈佛大学 天文台 观测 发现 这 个 行星状星云 。 数 十年 以来 , 天文学家 一直 对 环绕 该 星云 周围 的 奇特 气体 迷惑不解 , 博芬 和 他 的 研究 同事 在 计算机 模拟 系统 上 结合 最新 观测 数据 , 证实 了 一对 白矮星 充当 着 “ 宇宙 发电站 ” 。 多数 双子星 轨道 周期 为数 百年 或者 数 千年 , 但是 “ 弗莱明 号 ” 行星状星云 的 光谱 数据 显示 其中 的 双子 恒星 运行 速度 更 快 , 快速 变化 的 光谱线 表明 这 对 恒星 轨道 周期 仅 为 天 。 博芬 说 : “ 这 是 一对 非常 接近 的 双子星 系统 。 ” 他 还 指出 , 其它 双子星 系统 中 也 发现 类似 的 轨道 周期 。 这 个 行星状星云 中 的 恒星 曾 共享 环绕 星云 的 气体 层 , 在 其它 双子星 系统 中 也 非常 普遍 。 然而 , 环绕 星云 的 气体 喷射 流 并 不是 当前 存在 。 这 项 研究 报告 现 发表 在 月 日 出版 的 《 科学 》 杂志 上 。 起初 , “ 弗莱明 号 ” 行星状星云 中 这 两 颗 恒星 相距甚远 , 较 大 的 恒星 逐渐 从 一 颗 红巨星 演变 为 体积 庞大 的 渐近 巨 支 星 , 此时 它 将 形成 数 百倍 太阳 直径 。 这 颗 超大 质量 恒星 释放 的 气体 流 之后 流向 体积 较 小 的 邻近 恒星 ― ― 一 颗 寒冷 的 白矮星 , 此时 气体 流 像 从 水龙头 中 释放 出来 一样 , 从 这 两 颗 恒星 向 外 喷射 。 博芬 称 , 这 只是 恒星 生命 历程 中 非常 短暂 的 一个 时期 , 仅 持续 年 。 随着 时间 的 流逝 , 巨大 的 恒星 失去 了 它们 的 气体 , 变成 了 一 颗 白矮星 。 气体 将 恒星 包裹 起来 , 推动 它们 逐渐 靠拢 在 一起 。 当 恒星 逐渐 接近 , 包裹 它们 的 气体 将 被 驱逐 , 该 气体 喷射 流 的 “ 水龙头 ” 也 将 关闭 。 博芬 研究 小组 认为 , 这种 现象 普遍 存在 于 行星状星云 中 的 双子星 系统 , 但 同时 强调 需要 更 多 的 观测 来 证实 这 一 理论 。 ( 卡麦拉 ) 分享

Maven 打包之后运行

命令如下:

hadoop jar learn-1.0-SNAPSHOT.jar top.eviltuzki.tfidf.App /user/zj/tfidf/allcontent /user/zj/tfidf/jaroutput /user/zj/tfidf/finaloutput

输出结果就简单看一下吧 = =

[[email protected] tfidf]$ hadoop fs -cat /user/zj/tfidf/finaloutput/part-m-00000 |grep -v E| sort -k2 -rn |head -n 20
宋体    2.2809544503092782
宋体    1.3156868388809182
东北虎    0.7394429830508474
网盘    0.571717673015873
网盘    0.571717673015873
电视广告    0.5665861818181818
出货量    0.5347087089347079
黑色星期五    0.5342098285714285
雪豹    0.5053336216216217
红茶    0.4936592475247525
携程    0.47571826851851845
野生    0.47535620338983053
音乐    0.4412029517241379
角膜    0.43890478873239436
美食    0.4262510461538462
摇椅    0.42329096944444444
摇椅    0.42329096944444444
美景    0.4227268664556961
酷派    0.42054887452054796
朝鲜    0.4166495891891892

也不知道为啥会出现重复的,个人想法应该是多篇文章中统计出来的吧。。。但是分值都一样- -有点。。。额。。也许是重复的新闻也说不好。。。

原文地址:https://www.cnblogs.com/eviltuzki/p/8284672.html

时间: 2024-10-03 14:38:11

Hadoop 实现 TF-IDF 计算的相关文章

使用sklearn进行中文文本的tf idf计算

Created by yinhongyu at 2018-4-28 email: [email protected] 使用jieba和sklearn实现了tf idf的计算 import jieba import jieba.posseg as pseg from sklearn import feature_extraction from sklearn.feature_extraction.text import TfidfTransformer from sklearn.feature_e

关于使用Filter减少Lucene tf idf打分计算的调研

将query改成filter,lucene中有个QueryWrapperFilter性能比较差,所以基本上都需要自己写filter,包括TermFilter,ExactPhraseFilter,ConjunctionFilter,DisjunctionFilter. 这几天验证下来,还是or改善最明显,4个termfilter,4508个返回结果,在我本机上性能提高1/3.ExactPhraseFilter也有小幅提升(5%-10%). 最令人不解的是and,原来以为跟结果数和子查询数相关,但几

tf–idf算法解释及其python代码实现(下)

tf–idf算法python代码实现 这是我写的一个tf-idf的核心部分的代码,没有完整实现,当然剩下的事情就非常简单了,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四句话,每句表示一个文档 copus=['我正在学习计算机','它正在吃饭','我的书还在你那儿','今天不上班'] 由于中文需要分词,jieba分词是python里面比较好用的分词工具,所以选用jieba分词,文末是jieba的链接.首先对文档进行分词: i

[Elasticsearch] 控制相关度 (四) - 忽略TF/IDF

本章翻译自Elasticsearch官方指南的Controlling Relevance一章. 忽略TF/IDF 有时我们不需要TF/IDF.我们想知道的只是一个特定的单词是否出现在了字段中.比如我们正在搜索度假酒店,希望它拥有的卖点越多越好: WiFi 花园(Garden) 泳池(Pool) 而关于度假酒店的文档类似下面这样: { "description": "A delightful four-bedroomed house with ... " } 可以使用

tf–idf算法解释及其python代码实现(上)

tf–idf算法解释 tf–idf, 是term frequency–inverse document frequency的缩写,它通常用来衡量一个词对在一个语料库中对它所在的文档有多重要,常用在信息检索和文本挖掘中. 一个很自然的想法是在一篇文档中词频越高的词对这篇文档越重要,但同时如果这个词又在非常多的文档中出现的话可能就是很普通的词,没有多少信息,对所在文档贡献不大,例如‘的’这种停用词.所以要综合一个词在所在文档出现次数以及有多少篇文档包含这个词,如果一个词在所在文档出现次数很多同时整个

Elasticsearch学习之相关度评分TF&amp;IDF

relevance score算法,简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度 Elasticsearch使用的是 term frequency/inverse document frequency算法,简称为TF/IDF算法 Term frequency(TF):搜索文本中的各个词条在field文本中出现了多少次,出现次数越多,就越相关 Inverse document frequency(IDF):搜索文本中的各个词条在整个索引的所有文档中出现了多少次,出现的

55.TF/IDF算法

主要知识点: TF/IDF算法介绍 查看es计算_source的过程及各词条的分数 查看一个document是如何被匹配到的 一.算法介绍 relevance score算法,简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度.Elasticsearch使用的是 term frequency/inverse document frequency算法,简称为TF/IDF算法 1.Term frequency 搜索文本中的各个词条在field文本中出现了多少次,出现次数越多,

25.TF&IDF算法以及向量空间模型算法

主要知识点: boolean model IF/IDF vector space model 一.boolean model 在es做各种搜索进行打分排序时,会先用boolean model 进行初步的筛选,boolean model类似and这种逻辑操作符,先过滤出包含指定term的doc.must/must not/should(过滤.包含.不包含 .可能包含)这几种情况,这一步不会对各个doc进行打分,只分过滤,为下一步的IF/IDF算法筛选数据. 二.TF/IDF 这一步就是es为boo

文本分类学习(三) 特征权重(TF/IDF)和特征提取

上一篇中,主要说的就是词袋模型.回顾一下,在进行文本分类之前,我们需要把待分类文本先用词袋模型进行文本表示.首先是将训练集中的所有单词经过去停用词之后组合成一个词袋,或者叫做字典,实际上一个维度很大的向量.这样每个文本在分词之后,就可以根据我们之前得到的词袋,构造成一个向量,词袋中有多少个词,那这个向量就是多少维度的了.然后就把这些向量交给计算机去计算,而不再需要文本啦.而向量中的数字表示的是每个词所代表的权重.代表这个词对文本类型的影响程度. 在这个过程中我们需要解决两个问题:1.如何计算出适

使用solr的函数查询,并获取tf*idf值

1. 使用函数df(field,keyword) 和idf(field,keyword). http://118.85.207.11:11100/solr/mobile/select?q={!func}product%28idf%28title,%E9%97%AE%E9%A2%98%29,tf%28title,%E9%97%AE%E9%A2%98%29%29&fl=title,score,product%28idf%28title,%E9%97%AE%E9%A2%98%29,tf%28title