spark 新闻相识度计算

原创 2016年06月02日 10:49:58
/**
  * Created by zxl on 2016/5/5.
  * 余弦相识度计算
  */

import java.sql.{Connection, DriverManager, ResultSet}
import java.text.SimpleDateFormat
import java.util.Date
;
import kafka.serializer.StringDecoder
import kafka.producer._
import org.apache.log4j.{Level, Logger}
import org.apache.spark._
import org.apache.spark.ml.feature.{HashingTF, IDF, Tokenizer}
import org.apache.spark.mllib.classification.NaiveBayes
import org.apache.spark.mllib.linalg.{Vector, Vectors,SparseVector =>SV}
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.sql.Row
import org.apache.spark.streaming._
import org.apache.spark.streaming.kafka._
import org.apache.spark.sql.Row;

object Cossimi {
  case class RawDataRecord(category:String,text:String)
  def main(args: Array[String]) {
    val sparkConf = new SparkConf().setAppName("cos")
    val sc = new SparkContext(sparkConf)

    val sqlContext = new org.apache.spark.sql.SQLContext(sc)
    import sqlContext.implicits._
    Logger.getRootLogger.setLevel(Level.ERROR)
    var srcRDD = sc.textFile("/home/spark/art.txt").map {
      x =>
        var data = x.split(",")
        RawDataRecord(data(0), data(1))
    }

    var trainingDF = srcRDD.toDF()
    trainingDF.take(2).foreach(println);
    var tokenizer = new Tokenizer().setInputCol("text").setOutputCol("words")
    var wordsData = tokenizer.transform(trainingDF)

    println("output1")

    //===============hashing tf =============
    var hashingTF = new HashingTF().setNumFeatures(500000).setInputCol("words").setOutputCol("rawFeatures")
    
    var featurizedData = hashingTF.transform(wordsData)
    
    var idf = new IDF().setInputCol("rawFeatures").setOutputCol("features")
    var idfModel = idf.fit(featurizedData)

    
    val rescaledData = idfModel.transform(featurizedData)
    //val content_list = collection.mutable.ListBuffer[String]()
    val content_list = rescaledData.select($"category", $"features").collect().toList

    println("out put 2")
   
    val docSims = rescaledData.select($"category", $"features").map {
      case Row(id1, idf1) =>
        import breeze.linalg._
        val sv1 = idf1.asInstanceOf[SV]
        val bsv1 = new SparseVector[Double](sv1.indices, sv1.values, sv1.size)
        content_list.filter(_(0) != id1).map { case Row(id2, idf2) =>
            val sv2 = idf2.asInstanceOf[SV]
            val bsv2 = new SparseVector[Double](sv2.indices, sv2.values, sv2.size)
            val cosSim = bsv1.dot(bsv2).asInstanceOf[Double] / (norm(bsv1) * norm(bsv2))
            (id1, id2, cosSim)
        }
    }
    //docSims.take(5).foreach(println)
    println("insert mysql ......")
    docSims.foreach{
      cos_list =>
        cos_list.sortWith( _._3 >_._3).take(5).foreach{
          x =>
            val news_id = x._1
            val t_id = x._2
            val value = x._3
            insert_sim(news_id.toString,t_id.toString,value)
        }
    }
    sc.stop()
  }
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

基于LR的新闻多分类(基于spark2.1.0, 附完整代码)

自从引进DataFrame之后,spark在ml方面,开始使用DataFrame作为RDD的上层封装,以屏蔽RDD层次的复杂操作,对应用开发者提供简单的DataFrame,以减少开发量。本文以最新的s...

C#计算字符串相识度

计算字符串相识度

最近在做这方面的应用,把我找到的资料贴出来,有需要的人可以参考参考。 1.编辑距离(Levenshtein Distance) 编辑距离就是用来计算从原串(s)转换到目标串(t)所需要的最少的插入...

计算两段文本的相识度

package com.wlkj.test;import java.text.NumberFormat; import java.util.Locale;public class SimilarTes...

相识度判断

  • 2014-07-11 10:06
  • 1.02MB
  • 下载

文本相识度算法(余弦相似性、简单共有词、编辑距离、SimHash、汉明距离、Jaccard相似性系数、欧几里得距离、曼哈顿距离 )

文本相似度计算在信息检索、数据挖掘、机器翻译、文档复制检测等领域有着广泛的应用。 比如舆论控制,我们假设你开发了一个微博网站,并且已经把世界上骂人的句子都已经收录进了数据库,那么当一个用户发微博...

使用Spark MLlib 完成新闻自动分类

写在前面最近学习了一点文本挖掘相关知道,刚刚接触到一点皮毛,刚好学了点Spark,所有就找个了小例子玩了一下,算法和实现都不太难,比较适合看公式一脸蒙逼,无聊想来点实际性Demo玩一下基本流程如图所示...

使用Spark完成基于TF-IDF特征的新闻热点聚类

写在前面互联网各个地方时时刻刻都在发生着这样或者那样的事件,如果使用人工去观察根本无法全文们的知晓哪地方发生了什么热点事件,做为主流媒体更喜欢第一时间得知热点事件的发生,好及时的紧靠热点。舆情监控的目...

李滔搜狐大数据之Spark广告和新闻推荐

广告和新闻推荐--它们相似点是都可以看做一个点击率估计任务。根据用户的属性,估计一下哪个广告,哪个新闻用户可能点击,把这个可能点击的推荐给用户。  为了完成这个点击率预估,我们一般会收集...

【总结】搜狐基于Spark的新闻和广告推荐

原文:http://www.csdn.net/article/1970-01-01/2825353 摘要:对一个媒体网站来讲,一个比较重要的任务就是获取用户对于不同类型文章的兴趣分布。用户的兴趣分布会...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)