新词发现及Java和spark实现

基于Hadoop+Spark的旅游评论数据挖掘实战 文本挖掘技术通过自然语言处理(NLP)从非结构化数据中提取有价值信息,其核心原理包括特征提取、主题建模和情感分析。在分布式计算框架如Hadoop和Spark的支持下,可以实现TB级文本数据的高效处理。这种技术组合特别适合旅游行业评论分析,能自动识别游客关注焦点(如排队时长、卫生条件等)并量化满意度。通过LDA主题模型和领域适配的情感分析算法,系统可生成景区服务质量热点报告,为运营决策提供数据支撑。实际应用中,该方案曾帮助黄山景区将投诉率降低60%,展示了大数据与NLP结合的业务价值。 阅读详情

新词发现并不是一个新的课题,但最有意思的一点是如果采用无监督的算法,可以完全脱离人工的经验由算法自动找到有语意的“词语”,而不是胡乱拼凑的汉字片段(归因于算法的有效性和语料本身是由有意义的词语构成的)。本文参考了matrix67的一篇文章,互联网时代的社会语言学:基于SNS的文本数据挖掘,采用无监督方法来发现新词,基本原理就是通过N-gram找到可能的词,然后计算这些词的词频、紧密度和自由度,最终通过一组阈值得到,具体可以参考上文链接,原文解释的非常详细和深入浅出。ok,talk is cheap, 下面给出我的实现。

在matrix67 blog的基础上,根据具体业务进一步调整了新词发现算法,包括但不限于(等项目上线后会给出核心代码):

增加了对应词库中的已有词,常用高频词语,常用停用词 来剔除新词结果的无关词2. 去掉待处理语料中的垃圾语料和脏数据(广告等) 3. 词内compactness的定义改为对称条件概率(PMI)的定义(对长度为2以上的新词支持更好) 4. 如果首字为量词(个、件、次等),且左邻字大部分为数字(1、2、两等),则改词不作为新词 5. 计算新词得分score时综合考虑词频和紧密度(更偏向与紧密度,暂不考虑词外自由度,特征不鲁棒),更具score得到top N的新词6. 去掉新词结果中的语气叠词(呵呵,嘻嘻嘻,哈哈哈哈哈等) 7. 去掉新词结果中包含高频常用字(了,是、不,么等),且词频高,紧密度低 的词 8. 去掉包含2个以上的高频常用字(了,是、不,么等)的新词 考虑新词结果中父串(如‘西门庆’)、子串(门庆),若两者词频相近,则去子串保留父串;如果父串(如大野怪)、子串(‘野怪’)的词频不相近,则去父串保留子串。

package findNewWord_p;


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;


public class findNewWord {
    public boolean if_remove_oldWors = true;// 是否在n-gram阶段就滤掉旧词
    public String str_in="我现在正在玩lol,现在战况激烈可能现在没办法抽空回复你";
    int space_num = 4;
    public int len_max = 4;
    double compactness_t = 1000;
    double flexible_t = 0.5;
    double wcount_t = 5;
    public HashMap<String,String> w_Map = new HashMap<String,String>();
    public HashMap<String,String> nw_Map = new HashMap<String,String>();
    public Set<String> wset = new HashSet<String>();
    public int str_len = str_in.length();
    public int game_id;
    public String date_time;
    //
    public static Set<String> foundWords = new HashSet<String>();
    public String cm = "99999999999999999";
    public int count_max = Integer.parseInt(cm.substring(0,space_num));
    //
    // 开始统计词信息
    public void wordStatics(){
        str_in = str_in.replaceAll("[^\u4E00-\u9FA5^a-z^A-Z^0-9^\\>]", "");//[^a-z^A-Z^0-9]
        str_len = str_in.length();
        if(str_len<2) return;


        // 初始化,减少包含检索
        String spacel = "                                  ";
        String info_ini = 0+",的:0"+spacel.substring(0,space_num-1)+",的:0"+spacel.substring(0,space_num-1);
        // n-gram (n=len_max)
        for(int i=0;i<str_len;i++){
            if(str_in.charAt(i)=='>') continue;
            int flag = 0;//判断是否遇到句尾
            for(int j=0;j<=len_max;j++){
                if(i+j+1>str_len) continue;
                String cur_w = str_in.substring(i, i+j+1);//当前词
                if(cur_w.charAt(cur_w.length()-1)=='>'){//当前词末尾已经是完结符,则其不构成一个词,不用统计
                    flag = 1;
                }
                if(flag == 1) continue;
                // 初始化
                wset.add(cur_w);
                w_Map.put(cur_w, info_ini);
            }
        }


        // 开始统计
        for(int i=0;i<str_in.length();i++){
            if(str_in.charAt(i)=='>') continue;
            int flag = 0;//判断是否遇到句尾 or 是旧词
            for(int j=0;j<=len_max;j++){
                if(i+j+1>str_len) continue;
                String cur_w = str_in.substring(i, i+j+1);//当前词
                if(cur_w.charAt(cur_w.length()-1)=='>'){//当前词末尾已经是完结符
                    flag = 1;
                }
                if(flag == 1) continue;
                //
                String info_all = w_Map.get(cur_w);
                String info[] = info_all.split(",");
                int num = Integer.parseInt(info[0])+1;
                //
                String left_w = "";
                if(i!=0 && str_in.charAt(i-1)!='>')  left_w += str_in.charAt(i-1);
                String right_w = "";
                if((i+j+1)<str_len && str_in.charAt(i+j+1)!='>')  right_w += str_in.charAt(i+j+1);
                //
                info_all = updateWordStatic(info_all, left_w, "left");
                info_all = updateWordStatic(info_all, right_w, "right");
                info_all = info_all.substring((info_all.indexOf(',', 0)));
                w_Map.put(cur_w, num+info_all);
                if(cur_w.equals("现在")){
                    //System.out.println(cur_w+"==>:"+num+","+left_w+","+right_w);
                }
            }
        }
    }
    // 更新词统计信息
    public String updateWordStatic(String str,String w_cur,String place){
        if(w_cur.length()<1) return str;
        String[] str_l = str.split(",");
        String spacel = "                                  ";
        if(place.equals("left")){
            int i_w = str_l[1].indexOf(w_cur+":");
            //如果找到
            if(i_w>0){
                int i_n = i_w + w_cur.length()+1;
                int i_b = i_n+space_num;


                int num_cur = Integer.parseInt(str_l[1].substring(i_n, i_n+space_num).replaceAll(" ", ""))+1;
                String nums = "                           ";
                nums = nums.substring(0,space_num);
                if(num_cur<count_max){
                    String num_t = num_cur +  "";
                    nums = num_t + nums.substring(num_t.length());
                }
                else num_cur=count_max;
                str = str_l[0] + ","+str_l[1].substring(0, i_w) 
                        + w_cur+":"+nums
                        +str_l[1].substring(i_b)+","+str_l[2];
            }
            // 如果没有
            else{


                str = str_l[0] + ","+str_l[1]+w_cur+":"+"1"+spacel.substring(0,space_num-1)
                        +","+str_l[2];
            }
        }
        if(place.equals("right")){
            int i_w = str_l[2].indexOf(w_cur+":");
            //如果找到
            if(i_w>0){
                int i_n = i_w + w_cur.length()+1;
                int i_b = i_n+space_num;


                int num_cur = Integer.parseInt(str_l[2].substring(i_n, i_n+space_num).replaceAll(" ", ""))+1;
                String nums = "                           ";
                nums = nums.substring(0,space_num);
                if(num_cur<count_max){
                    String num_t = num_cur +  "";
                    nums = num_t + nums.substring(num_t.length());
                }
                else num_cur=count_max;
                str = str_l[0] + ","+str_l[1]+","+str_l[2].substring(0, i_w) 
                        + w_cur+":"+nums
                        +str_l[2].substring(i_b);
            }
            // 如果没有
            else{
                str = str_l[0] + ","+str_l[1]
                        +","+str_l[2]+w_cur+":"+"1"+spacel.substring(0,space_num-1);
            }
        }
        return str;
    }
    // 计算词内凝固度、词外自由度 发现新词
    public HashMap<String,String> findWords() throws Exception{
        System.out.println("existing word num: "+foundWords.size());
        //
        for(String s:wset){
            if(s.length()>1 && s.replaceAll("[^\u4E00-\u9FA5]", "").length()>0){//[^a-z^A-Z^0-9]){
                // 计算词内凝固度
                String info[] = w_Map.get(s).split(",");
                double compact_score = Double.MAX_VALUE;
                Integer s0 = Integer.parseInt(info[0]);//词频
                for(int i=0;i<s.length()-1;i++){
                    // 计算词内凝固度
                    //如果能分成两半
                    if(wset.contains(s.substring(0, i+1)) & wset.contains(s.substring(i+1))){
                        double s1 = 1.0*Integer.parseInt(w_Map.get(s.substring(0, i+1)).split(",")[0]);//词频
                        double s2 = 1.0*Integer.parseInt(w_Map.get(s.substring(i+1)).split(",")[0]);//词频
                        double score_comp = s0*str_len*1.0/(s1*s2);//分母是随机组合的概率,比值越大越是人组的语意的词
                        //
                        compact_score = Math.min(compact_score, score_comp );
                    }
                }


                // 计算词外自由度
                double left_f = culWordsEtropy(info[1]);
                double right_f =culWordsEtropy(info[2]);
                double flexible = Math.min(left_f, right_f );


                // 如果满足条件就加入潜在新词
                if(compact_score>compactness_t 
                        && flexible>flexible_t 
                        && s0>wcount_t 
                        && (!foundWords.contains(s)))
                    nw_Map.put(s, s0+","+compact_score+","+flexible);
            }
        }
        return nw_Map;
    }


    // 计算词熵
    public double culWordsEtropy(String str){
        int sumc = 0;
        List<Integer> num_l =  new ArrayList<Integer>();
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)==':'){
                Integer temp = Integer.parseInt(str.substring(i+1, i+5).replaceAll(" ", ""));
                if(temp>0){
                    num_l.add(temp);
                    sumc += temp;
                }
            }
        }
        //
        double strEtropy = 0.0;
        for(Integer num:num_l){
            strEtropy += (-1.0) * (num*1.0/(sumc*1.0)) * (Math.log(num*1.0/(sumc*1.0)));
        }
        return strEtropy;
    }
    public static void saveStrCSV(String file, String conent) {
        BufferedWriter out = null;
        try {
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true)));
            out.write(conent+"\r\n");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String args[]) throws Exception{ 
        String dataPath = "D:/Java/西游记.txt";//西游记
        //
        InputStreamReader read = new InputStreamReader(new FileInputStream(dataPath),"gbk"); //,"gbk","UTF-8"
        @SuppressWarnings("resource")
        BufferedReader currBR = new BufferedReader(read);
        String tempCurrLine = "";
        String con = "";
        while ((tempCurrLine = currBR.readLine()) != null) {
            con +=tempCurrLine;
        }
        //
        findNewWord fnw = new findNewWord();
        fnw.str_in = con;
        fnw.wordStatics();
        HashMap<String,String> fw = fnw.findWords();
        System.out.println("\n\n\nnew words num: " + fw.size()); 
        //
        List<Map.Entry<String, String>> entryList = new ArrayList<Map.Entry<String, String>>(fw.entrySet());
        Collections.sort(entryList, new Comparator<Map.Entry<String, String>>() 
                {
                    @Override
                    public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
                        Integer num1 = Integer.parseInt(o1.getValue().split(",")[0]);
                        Integer num2 = Integer.parseInt(o2.getValue().split(",")[0]);
                        Double com1 = Double.valueOf(o1.getValue().split(",")[1]);
                        Double com2 = Double.parseDouble(o2.getValue().split(",")[1]);
                        //return com2.compareTo(com1);
                        return num2.compareTo(num1);
                    }
                });
        for (int i = 0; i < 300; ++i) {
            System.out.println(entryList.get(i).getKey()+"\t-->"+ entryList.get(i).getValue());
        }
    }

}

但是如果文本文件容量进一步增大,就要分布式方式来计算了,毕竟基于原生的n-gram算法还是很吃内存的。由于公司相关的业务还在开发测试阶段,下面先就给出核心的代码片段。思路是从hdfs或者hive中取数据,将达文本切分成小文本,并利用上述算法在各个partitions中统计出新词,最后汇总各个partitions中的结果,collection到本地。这里吐槽一下spark的最常用的Dataset,Row支持很多的数据结构,但是对于map,只支持存储scala的mutable.Map,不支持可变的java map。折腾了好久,最后还是回到javaRDD来做了,或者Dataset

JavaRDD<Map<String, String>> statistic_info_pa = 
                content_no.javaRDD().mapPartitions( 
                //new Function2<Integer, Iterator<Integer>, Iterator<String>>()
                new FlatMapFunction<Iterator<Row>, Map<String,String>>() {
                    private static final long serialVersionUID = 1L;
                    @Override
                    public Iterator<Map<String, String>> call(Iterator<Row> v_in) throws Exception {
                        //
                        LinkedList<Map<String, String>> linkedList = new LinkedList<Map<String, String>>(); 
                        String str_in="";
                        while(v_in.hasNext()){
                            Row v1 = v_in.next();
                            String content = v1.getString(1).replaceAll("[^\u4E00-\u9FA5^a-z^A-Z^0-9]", "");
                            str_in = content;
                            //
                            NewWordsDiscovery fnw = new NewWordsDiscovery();
                            NewWordsDiscovery.foundWords = colIndexNew.getValue();
                            fnw.str_in = str_in;
                            fnw.wordStatics();
                            Map<String,String> fw = fnw.findWords();
                            // 每个partitions只取紧密度 top 1000
                            fw = NewWordsDiscovery.getTopNewWordsMapByCompactness(fw,1000);
                            linkedList.add(fw);
                        }
                        return linkedList.iterator();
                    }
                }
                );


    // 将所有新词取回本地并汇总
    List<Map<String,String>> fw_list = statistic_info_pa.collect(); 
    Map<String, String> fw_res = new HashMap<>();
    for(Map<String,String> hm:fw_list){
        Iterator<Entry<String,String>> entryIt = hm.entrySet().iterator();  
        while(entryIt.hasNext()){  
            Entry<String, String> entry = entryIt.next();  
            String w = entry.getKey();  
            if(notKouQiCi(w)){
                // 没有则添加
                if(!fw_res.containsKey(w)){
                    String info = entry.getValue(); 
                    fw_res.put(w, info);
                }
                // 否则合并
                else{
                    String info[] = entry.getValue().split(","); 
                    String info_0[] = fw_res.get(w).split(",");
                    Integer num1 = Integer.parseInt(info_0[0]);
                    Integer num2 = Integer.parseInt(info[0]);
                    Double com1 = Double.valueOf(info_0[1]);
                    Double com2 = Double.parseDouble(info[1]);
                    Double flex1 = Double.valueOf(info_0[2]);
                    Double flex2 = Double.parseDouble(info[2]);
                    fw_res.put(w, (num1+num2)+","+(com1+com2)+","+(flex1+flex2));
                }
            }
        }
    }

腾讯大数据开发实习三面复盘:真题解析与备考指南 大数据开发岗位考察的核心不仅是工具链的使用,更在于对底层原理的深度理解——从HDFS副本放置策略、Spark宽窄依赖与Stage划分,到Flink Checkpoint与反压传导机制,每一个环节都要求候选人能向下追问三层。扎实的原理功底支撑着真实场景中的工程决策:数据倾斜如何加盐打散,实时数仓链路如何选型,数据质量监控如何快速定位异常。腾讯大数据开发实习的三轮技术面,正是一张覆盖Java并发、大数据组件、数仓建模与场景设计的完整考卷。这份复盘从简历打磨、每轮真题到踩坑记录,逐条拆解大厂大数据岗位的备考路径与 阅读详情

相关推荐

基于Spark Streaming的新闻数据实时分析系统架构与实战

实时数据处理是应对海量、高速数据挑战的核心技术,其原理在于对连续到达的数据流进行即时计算与分析,而非传统的批量处理。这项技术的价值在于能够实现业务指标的秒级甚至毫秒级反馈,为决策提供即时依据。在应用场景上,实时处理广泛用于监控告警、实时推荐、舆情分析等领域。本文聚焦于一个典型的实时分析系统案例,深入探讨了如何利用Spark Streaming构建新闻网大数据实时分析平台。系统集成了Kafka作为高吞吐数据管道,并采用Redis和HDFS实现多级存储策略,有效支撑了热点话题发现与实时可视化等核心功能。

weixin_34160277的博客 352

新词发现

挖掘新词的传统方法是,先对文本进行分词,然后猜测未能成功匹配的剩余片段就是新词。这似乎陷入了一个怪圈:分词的准确性本身就依赖于词库的完整性,如果词库中根本没有新词,我们又怎么能信任分词结果呢?此时,一种大胆的想法是,首先不依赖于任何已有的词库,仅仅根据词的共同特征,将一段大规模语料中可能成词的文本片段全部提取出来,不管它是新词还是旧词。然后,再把所有抽出来的词和已有词库进行比较,不就能找出新词了吗...

sinat_33731745的博客 3384

新词发现方法

不错的新词发现方法,利用了pat-array, 倒排索引

几种新词发现思路

下面的方法都是用于构建新的词库,将新的词库跟常用词库进行对比,删掉常见词,就可以得到新词了。 一、基于频次、凝聚度、自由度的分词。 频次:就是字或词在整个语料中出现的次数。在整个 2400 万字的数据中,“电影”一共出现了 2774 次,2774就是频次。 凝聚度:就是两个词单独出现的概率乘积和它们一起出现的概率的大小对比。在整个 2400 万字的数据中,“电影”一共出现了 2774 次,出现的概率约为 0.000113 。“院”字则出现了 4797 次,出现的概率约为 0.0001969 。如果两者

qq_33391629的博客 1720

java使用Nagao算法实现新词发现、热门词的挖掘

主要介绍了java使用Nagao算法实现新词发现、热门词的挖掘的思路和详细代码,需要的朋友可以参考下

IBM X3650 M4做raid阵列

步骤1.开机出现此界面,同时按ctrl键和h键,进入IBM X3650 M4配置raid界面。 【注】不知道是不是因为我的服务器长期闲置,按键ctrl键和h键居然无法进入raid配置界面。这时候,我们可以进bios同样可以进入raid配置界面。如果你按ctrl键和h键就可以直接进入raid配置界面,那么请忽略此段,直接看步骤2 开机,按键F1,选中system setting ,接着选中Adapters and UEFI Drivers ...

ani5565的博客 2万+

新词发现简介

原文链接:https://blog.youkuaiyun.com/weixin_43378396/article/details/103848628 新词发现是 NLP 的基础任务之一,通过对已有语料进行挖掘,从中识别出新词。新词发现也可称为未登录词识别,严格来讲,新词是指随时代发展而新出现或旧

古月哲亭 1923

dpdk 源码分析 rte_ring

rte_ring源码分析

qq_40843445的博客 929

基于spark的新词发现模型

package com.icklick.spark.wordSegment import org.apache.log4j.{ Level, Logger } import org.apache.spark.{ SparkConf, SparkContext } import com.iclick.spark.wordSegment.util.CounterMap import scala.c

luoyexuge的专栏 3724

OpenCLI入门:让任何网站变成你的命令行工具(超详细版)

最有用的工具,往往是最简单的。 opencli就是这样。 它不会帮你写代码,不会帮你做决策,但它能把200+个平台装进你的命令行。 让你用最简单的方式,获取最丰富的数据。

weixin_66295112的博客 2088

HUMAnN 3.0 (alpha)安装及使用

文章目录简介安装数据库下载运行参考 简介 安装 conda install humann humann_test (~1 minute) 数据库下载 humann_databases --download chocophlan full /path/to/databases --update-config yes humann_databases --download uniref uniref90_diamond /path/to/databases --update-config yes humann_

dys的博客 9503

spark发现新词

packagecom.icklick.spark.wordSegment importorg.apache.log4j.{Level,Logger} importorg.apache.spark.{SparkConf,SparkContext} importcom.iclick.spark.wordSegment.util.CounterMap i...

weixin_30839881的博客 223

论文精读-ReTransformer ReRAM-based Processing-in-MemoryArchitecture for Transformer Acceleration

Transformer已经成为一种流行的深度神经网络(DNN)模型,用于神经语言处理(NLP)应用,并在神经机器翻译、实体识别等方面表现出优异的性能。然而,其在自回归解码器中的规模化点积注意机制在推理过程中带来了性能瓶颈。Transformer也是计算和内存密集型的,需要硬件加速解决方案。

a284365的博客 1922

基于Spark上的中文分词算法的实现

此篇文章只是一份普通的实验报告,同时会对Jcseg中文分词使用进行分享。 实现目的 学习编写Spark程序,对中文文档分词词频的统计分析。 实现原理 实现步骤 (1)Jcseg分词 官方首页:https://code.google.com/p/jcseg/ 下载地址:https://code.google.com/p/jcseg/downloads/l

nuoyahadili8的博客 1万+

使用lighttpd和开发板进行交互

本文介绍了如何在嵌入式开发板上使用Lighttpd Web服务器实现硬件交互功能。主要内容包括:Lighttpd通过CGI程序间接控制硬件的基本原理;lighttpd.conf配置文件的详细解析;开发板文件目录结构设计;用C语言编写控制GPIO的CGI程序示例;网页调用CGI实现按钮触发控制的HTML代码;常见问题调试建议。最后通过效果图展示了网页按钮点击后成功控制LED灯的实际效果,验证了Lighttpd+CGI方案在嵌入式设备Web控制中的可行性。

m0_49476241的博客 1423

OCS2 入门教程(一)

OCS2 是专为切换系统优化控制(ptimalontrol forwitchedystems,OCS2)定制的 C++ 工具箱。该工具箱提供以下算法的高效实现:SLQ:连续时间域约束 DDPiLQR:离散时域约束 DDPSQP:基于 HPIPM 的多重打靶算法IPM: 基于非线性内点法的多重搜索算法SLP:基于 PIPG 的顺序线性规划算法OCS2 通过增强拉格朗日法(Augmented Lagrangian)或松弛障碍法(relaxed barrier methods)处理一般路径约束。

机器人控制与仿真应用 7835

Hanlp分词器(通过spark)

这里主要是对内容数据进行标签处理 这里我们是用分词器是HanLP HanLP是哈工大提供的一种中文分词的工具,因为他支持Java API 这里我们使用spark + hanlp进行中文分词 1、准备工作 ##1. 在hdfs创建目录用于存放hanlp的数据 [root@hadoop ~]# hdfs dfs -mkdir -p /common/nlp/data ##2. 将hanlp的工具上传到服务器的指定位置 ##3. 解压到当前目录 [root@hadoop soft]# tar -zxvf ha.

li1579026891的博客 1967

python批量调用大模型API:多线程和异步协程

本文介绍了利用多线程技术批量调用大模型API的实现方法。核心是通过并发请求提高处理效率,主要采用线程池管理并发数量、结果聚合等技术。文章提供了一个完整的Python实现示例,包含APIBatchCaller类及其single_api_call和batch_call方法,详细解析了并发控制、错误处理等关键点,并给出了使用注意事项,包括并发数设置、重试策略和超时处理等。该方案特别适合IO密集型任务,能显著提升批量API调用的效率。

Cachel Wood的博客 759

基于Spark与NLP的模糊文本信息抽取实战:从非结构化数据到结构化查询

在大数据与人工智能领域,非结构化文本处理是核心挑战之一,其关键在于如何将海量、杂乱的文本信息转化为机器可理解和处理的结构化数据。其基本原理通常涉及自然语言处理技术,通过分词、实体识别、特征提取等步骤,将文本转化为向量或标签。这项技术的价值在于能够从社交媒体、用户反馈等渠道中自动化地挖掘关键信息,极大提升数据利用效率和决策支持能力。其典型应用场景包括舆情监控、智能客服、推荐系统和知识图谱构建。本文聚焦于利用Apache Spark分布式计算框架结合NLP技术,构建一个可扩展的文本分析管道,通过模拟从“广州bf

weixin_34377919的博客 553

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

JAVA方向的大数据包含啥内容?

近几年来,大数据机器学习和数据挖掘的并行化算法研究成为大数据领域一个较为重要的研究热点。早几年国内外研究者和业界比较关注的是在 Hadoop 平台上的并行化算法设计。然而, HadoopMapReduce 平台由于网络和磁盘读写开销大,难以高效地实现需要大量迭代计算的机器学习并行化算法。随着 UC Berkeley AMPLab 推出的新一代大数据平台 Spark 系统的出现和逐步发展成熟,近年来国内外开始关注在 Spark 平台上如何实现各种机器学习和数据挖掘并行化算法设计。

dearmite的专栏 926

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java 编写代码_如果您在2015年编写过Java代码-这是您不容错过的趋势

这篇文章最初发表在Takipi博客上 -Java和Scala异常分析和性能监控。 去年我们有机会遇到的最有趣趋势的实用概述 与将其保持在较高水平的许多其他年末摘要不同,我们将进行更实际的操作,而无需诉诸流行语 。 好吧,没有太多*流行语。 与往常一样,对我们来说,最重要的收获是您的意见-我们很乐意听取您的意见并了解您的重点。 1. Java Java Jing Jing Jing ...

125

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Spark学习笔记】ansj词性说明

背景 Ansj 是一个开源的 Java 中文分词工具,基于中科院的 ICTCLAS 中文分词算法,比其他常用的开源分词工具(如mmseg4j)的分词准确率更高。工具支持词性标注,所以就可以依据词性进行分词结果的过滤。 **词性介绍 ** 1. 名词 (1个一类,7个二类,5个三类) 名词分为以下子类: n 名词 nr 人名 nr1 汉语姓氏 nr2 汉语名字 nrj 日语人名 nrf 音译人名 n...

不可能打工的博客 374

计算机毕业设计hadoop+spark+kafka+hive视频弹幕情感分析 视频推荐系统 视频大数据分析 大数据毕业设计(源码+LW文档+PPT+讲解)

计算机毕业设计hadoop+spark+kafka+hive视频弹幕情感分析 视频推荐系统 视频大数据分析 大数据毕业设计(源码+LW文档+PPT+讲解)

全网计算机/大数据辅导(自媒体)道祖第一人、全网粉丝100W+,专注于大学生项目实战开发,讲解,毕业答疑辅导,高校老师/讲师/同行合作。以及产品测评宣传、工具推广等合作。同时招收学生代理、校园代理。 833

计算机毕业设计hadoop+spark+kafka+hive微博舆情预警系统 微博推荐系统 微博大数据分析 大数据毕业设计(源码+LW文档+PPT+讲解)

计算机毕业设计hadoop+spark+kafka+hive微博舆情预警系统 微博推荐系统 微博大数据分析 大数据毕业设计(源码+LW文档+PPT+讲解)

全网计算机/大数据辅导(自媒体)道祖第一人、全网粉丝100W+,专注于大学生项目实战开发,讲解,毕业答疑辅导,高校老师/讲师/同行合作。以及产品测评宣传、工具推广等合作。同时招收学生代理、校园代理。 1147

使用 rkt 原生运行 Docker 容器镜像:docker:// 拉取、ACI 转换与运行实战

rkt(容器运行时,pod-native 引擎)内置了对 Docker 容器镜像的**原生获取与运行支持**:无需安装 Docker 客户端,即可通过 `docker://` 前缀从 Docker Hub 或任意兼容 registry 拉取镜像并直接运行。本文以仓库文档 [Documentation/running-docker-images.md](https://link.gitcode.co

gitblog_01200的博客 513
上一篇: 学习大数据的第一步-搭建Scala开发环境,以及使用Intellij IDEA开发Scala程序
下一篇: Oracle 统计量NO_INVALIDATE参数配置(上)
thy822
博客等级 码龄19年 313粉丝 294原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值