zoukankan      html  css  js  c++  java
  • Hanlp分词1.7版本在Spark中分布式使用记录

     

    新发布1.7.0版本的hanlp自然语言处理工具包差不多已经有半年时间了,最近也是一直在整理这个新版本hanlp分词工具的相关内容。不过按照当前的整理进度,还需要一段时间再给大家详细分享整理的内容。昨天正好看到的这篇关于关于1.7.0版本hanlp分词在spark中的使用介绍的文章,顺便分享给大家一起学习一下!

     

    以下为分享的文章内容:

    HanLP分词,如README中所说,如果没有特殊需求,可以通过maven配置,如果要添加自定义词典,需要下载“依赖jar包和用户字典".

    直接"java xf hanlp-1.6.8-sources.jar" 解压源码,把源码加入工程(依赖本地jar包,有些麻烦,有时候到服务器有找不到jar包的情况)

    按照文档操作,在Spark中分词,默认找的是本地目录,所以如果是在driver中分词是没有问题的。但是如果要分布式分词,是要把词典目录放在HDFS上面,因为这样每台机器才可以访问到 【参考代码】

    最好把新增词典放在首位,第一次使用时,HanLP会把新增txt文件,生成bin文件,这个过程比较慢。但是只需要跑一次,它会把bin文件写到HDFS路径上面,第二次以后速度就快一些了。

    注意到issue中说,只可以在mapPartition中使用。

    参考scala代码

    class HadoopFileIoAdapter extends IIOAdapter {

      override def create(path: String): java.io.OutputStream = {

        val conf: Configuration = new Configuration()

        val fs: FileSystem = FileSystem.get(URI.create(path), conf)

        fs.create(new Path(path))

      }

      override def open(path: String): java.io.InputStream = {

        val conf: Configuration = new Configuration()

        val fs: FileSystem = FileSystem.get(URI.create(path), conf)

        fs.open(new Path(path))

      }

    }

    def myfuncPerPartition_ ( iter : Iterator [String] ) : Iterator[(Int, mutable.Buffer[String])]  = {

          println("run in partition")

          val keyWordNum = 6

          HanLP.Config.IOAdapter = new HadoopFileIoAdapter

          val ret = iter.filter(_.split(",",2).length==2)

            .map(line=>(line.split(",",2)(1).trim.hashCode, HanLP.extractKeyword(line.split(",",2)(0),keyWordNum)

              .map(str=>str.filterNot(stopChar.contains(_))).filter(w=>(w.length>1 || ( w.length==1 && white_single_word.contains(w(0))) ))

              .filterNot(stopWords.contains(_)).take(keyWordNum).distinct))

          ret

        }

    //调用

    raw_data.repartition(100).mapPartitions(myfuncPerPartition_)

    ---------------------

  • 相关阅读:
    leetcode 576. Out of Boundary Paths 、688. Knight Probability in Chessboard
    leetcode 129. Sum Root to Leaf Numbers
    leetcode 542. 01 Matrix 、663. Walls and Gates(lintcode) 、773. Sliding Puzzle 、803. Shortest Distance from All Buildings
    leetcode 402. Remove K Digits 、321. Create Maximum Number
    leetcode 139. Word Break 、140. Word Break II
    leetcode 329. Longest Increasing Path in a Matrix
    leetcode 334. Increasing Triplet Subsequence
    leetcode 403. Frog Jump
    android中webView加载H5,JS不能调用问题的解决
    通过nginx中转获取不到IP的问题解决
  • 原文地址:https://www.cnblogs.com/adnb34g/p/10509753.html
Copyright © 2011-2022 走看看