SparkNLP的官方文档html
1>sbt引入:python
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引入: shell
< 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
apache
或者提交程序时指定它的具体位置:spark-shell --jars spark-nlp.jar
标记生成器机器学习
规范化maven
词干提取函数
Lemmatizer学习
实体提取器测试
日期提取器spa
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注释类型,这意味着它与DocumentAssembler或SentenceDetector输出一块儿工做,在这里,咱们使用句子输出。
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()