SparkNLP的官方文档

1>sbt引入:

scala为2.11时   libraryDependencies += "com.johnsnowlabs.nlp" %% "spark-nlp" % "1.4.2"
scala为2.11之上时
libraryDependencies += "com.johnsnowlabs.nlp" % "spark-nlp_2.11" % "1.4.2"

2>maven引入: 

< dependency >
< groupId > com.johnsnowlabs.nlp </ groupId >
< artifactId > spark-nlp_2.11 </ artifactId >
< version > 1.4.2 </ version >
</ dependency >

3>直接下载jar包,然后运行:spark-submit --packages JohnSnowLabs:spark-nlp:1.4.2

或者提交程序时指定它的具体位置:spark-shell --jars spark-nlp.jar 

一、该库的主要内容:

  • 标记生成器

  • 规范化

  • 词干提取

  • Lemmatizer

  • 实体提取器

  • 日期提取器

  • Part of Speech Tagger

  • 命名实体识别

  • 句子边界检测

  • 情感分析

  • 拼写检查器

Spark ML提供了一套机器学习应用程序,它的逻辑由两个主要组件组成:估计器(Estimators)和 变换器(Transformers)。首先,有一个称为fit()的方法,将一段数据保存并传递给这样的应用程序,Transformer(一般是拟合过程的结果)将更改应用于目标数据集。这些组件已嵌入到适用于Spark NLP。

1.注释(Annotation)

注释是Spark-NLP操作结果的基本形式。它的结构是由:

  • annotatorType: 哪个注释器生成了这个注释

  • begin: 匹配的内容相对于原始文本的开始。

  • end: 匹配的内容相对于原始文本的结尾

  • metadata: 匹配结果的内容和附加信息

该对象在转换处理结束后由注释器自动生成。不需要手动参与。但为了有效地使用它,必须按照顺序理解。

2.注解器(Annotators)

注释器有两种形式

  • 注解器方法:代表Spark ML Estimator并需要一个训练stage。他们有一个称为fit(data)的函数,它根据一些数据来训练一个模型。他们生产第二种类型的注释器,它是一个注释器模型或转换器(transformer)。

  • Annotator模型:它们是spark模型或转换器(transformer),意味着它们具有一个transform(data)函数,它接受一个数据集并添加一个带有这个标注结果的列。所有转换器(transformer)都是附加的,这意味着它们附加到当前数据,决不会替换或删除以前的信息。

这两种形式的注释器都可以包含在Pipeline中,并且会自动按照提供的顺序遍历所有阶段并相应地转换数据。在fit()阶段之后,Pipeline变成了PipelineModel。无论是之前还是之后,可以随时保存到磁盘并重新从磁盘加载。

3.公共函数

setInputCols(column_names):获取此注释器所需的注释列名称

setOutputCol( column_name):定义包含此注释器结果的列的名称。使用此名称作为其他注释器的输入,需要注释这个注释器。

二、例子分析

1 注释器类型

每个注释器都有一个类型。这些共享类型的注释器可以互换使用,这意味着您可以在需要时使用它们中的任何一个。例如,当另一个注释器(如情感分析注释器)需要令牌类型注释器时,可以提供标normalized token或lemma,因为两者都是类型标记。

2 使用spark读入数据

我们例子测试采用的是spark-shell的方式,spark-2.1.1版本以上,本文采用的是spark2.1.2,scala版本2.11.8,启动:

spark-shell --jars /opt/jars/spark-nlp-1.2.3.jar

3.我们这里是先把数据赋值为名为data的变量

val data = spark.read.parquet("/opt/datas/*")

4 DocumentAssembler:获取数据

为何贯穿NLP处理过程,我们需要将原始数据进行标注。有一个特殊的transformer为我们做这件事情:DocumentAssembler,它会创建第一个类型为Document的注释,该注释会被以后的注解器使用。

import com.johnsnowlabs.nlp._
import com.johnsnowlabs.nlp.annotators._
import org.apache.spark.ml.Pipeline val documentAssembler = new DocumentAssembler()
.setInputCol("text")
.setOutputCol("document")

5 句子检测及分词

在这个快速的例子中,我们现在开始在每个文档行中标识句子。SentenceDetectorModel需要一个由DocumentAssembler输出提供的Document注释,它本身是一个Document类型标记。RegexTokenizer需要一个Document注释类型,这意味着它与DocumentAssemblerSentenceDetector输出一起工作,在这里,我们使用句子输出。

import com.johnsnowlabs.nlp.annotators.sbd.pragmatic.SentenceDetectorModel

val sentenceDetector = new SentenceDetectorModel()
.setInputCols(Array("document"))
.setOutputCol("sentence") val regexTokenizer = new RegexTokenizer()
.setInputCols(Array("sentence"))
.setOutputCol("token")

6 使用管道(pipeline)

现在我们要把所有这些放在一起并检索结果,我们使用Pipeline来做到这一点。我们还包含另一个特殊的变形器,称为“ Finisher”,以人类语言显示标记

val finisher = new Finisher()
.setInputCols("token")
.setCleanAnnotations(false) val pipeline = new Pipeline()
.setStages(Array(
documentAssembler,
sentenceDetector,
regexTokenizer,
finisher
)) pipeline
.fit(data)
.transform(data)
.show()

基于Spark Mllib的Spark NLP库的更多相关文章

  1. Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .机器学习概念 1.1 机器学习的定义 在维基百科上对机器学习提出以下几种定义: l“机器学 ...

  2. Spark MLlib介绍

    Spark MLlib介绍 Spark之所以在机器学习方面具有得天独厚的优势,有以下几点原因: (1)机器学习算法一般都有很多个步骤迭代计算的过程,机器学习的计算需要在多次迭代后获得足够小的误差或者足 ...

  3. Spark MLlib机器学习

    前言 Spark MLlib是Spark对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器.

  4. 小记---------spark组件与其他组件的比较 spark/mapreduce ;spark sql/hive ; spark streaming/storm

    Spark与Hadoop的对比   Scala是Spark的主要编程语言,但Spark还支持Java.Python.R作为编程语言 Hadoop的编程语言是Java    

  5. spark MLlib实现的基于朴素贝叶斯(NaiveBayes)的中文文本自动分类

    1.自动文本分类是对大量的非结构化的文字信息(文本文档.网页等)按照给定的分类体系,根据文字信息内容分到指定的类别中去,是一种有指导的学习过程. 分类过程采用基于统计的方法和向量空间模型可以对常见的文 ...

  6. Spark MLlib LDA 基于GraphX实现原理及源代码分析

    LDA背景 LDA(隐含狄利克雷分布)是一个主题聚类模型,是当前主题聚类领域最火.最有力的模型之中的一个,它能通过多轮迭代把特征向量集合按主题分类.眼下,广泛运用在文本主题聚类中. LDA的开源实现有 ...

  7. Spark入门实战系列--8.Spark MLlib(下)--机器学习库SparkMLlib实战

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .MLlib实例 1.1 聚类实例 1.1.1 算法说明 聚类(Cluster analys ...

  8. 推荐系统那点事 —— 基于Spark MLlib的特征选择

    在机器学习中,一般都会按照下面几个步骤:特征提取.数据预处理.特征选择.模型训练.检验优化.那么特征的选择就很关键了,一般模型最后效果的好坏往往都是跟特征的选择有关系的,因为模型本身的参数并没有太多优 ...

  9. 基于Spark Mllib的文本分类

    基于Spark Mllib的文本分类 文本分类是一个典型的机器学习问题,其主要目标是通过对已有语料库文本数据训练得到分类模型,进而对新文本进行类别标签的预测.这在很多领域都有现实的应用场景,如新闻网站 ...

随机推荐

  1. Linux下ps -ef和ps aux的区别及格式详解-转

    原文:https://www.linuxidc.com/Linux/2016-07/133515.htm Linux下显示系统进程的命令ps,最常用的有ps -ef 和ps aux.这两个到底有什么区 ...

  2. java 集合存储对象且根据对象属性排序

    方法一:根据java1.8lambda表达式进行排序 Comparator<RateInfo> comparator = (t1, t2) -> t1.getRateCode().c ...

  3. RMQ—ST表

    RMQ(Range Minimum/Maximum Query),RMQ是一个求给定范围内最大最小值的问题.我们一般使用st算法来解决这类问题(Sparse Table).这个算法原理不难,主要是各种 ...

  4. python利用paramiko执行服务器命令

    话不多说直接上代码 封装连接 @staticmethod def connect(ip, server_user, server_port, server_path): ""&qu ...

  5. php连接数据库查询方法(还少一种pdo方法)

    <?php header("content-type:text/html;charset=utf-8"); $conn = mysql_connect("local ...

  6. 想真正了解JAVA设计模式看着一篇就够了。 详解+代码实例

    Java 设计模式   设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结 设计模式分为 23 种经典的模式,根据用途我们又可以分为三大类.分别是创建型模式.结构型模式和行为型模式 列举几种设 ...

  7. day18 15.自定义连接池

    我们写的是连接池吗?Connection对象绝对不能关.现在写的玩意不是连接池.因为现在讲的是JDBC,连接池也是JDBC里面的,人家那是SUN公司定义的标准.标准,你那不是标准.既然是标准,你做连接 ...

  8. Centos系统Python环境搭建和项目部署

    目录 一.Python 1. 源安装 Python3 2. SCL安装 Python3 3. 虚拟环境venv 4. 安装Flask 5. 安装gunicorn 二.安装Nginx 1. 安装Ngin ...

  9. Laravel Homestead: 403 forbidden on nginx, http://homestead.app访问不了

    起因:是因为Homestead.yaml 映射失败,一般是由于没有修改sites导致的, 正确的sites设置,类似于: 而很多人吧folders的配置看成是sites的配置了 解决方法: ①按照正确 ...

  10. 强强联合 阿里云 RDS for SQL Server 与 金蝶 K/3 WISE 产品实现兼容适配

    强强联合 阿里云 RDS for SQL Server 与 金蝶 K/3 WISE 产品实现兼容适配,原K/3 WISE用户通过简单配置就可以无缝搭配RDS SQL Server使用,不需再费时费力自 ...