Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何使用JohnSnowLabs NLP拼写更正模块NorvigSweetingModel?_Scala_Apache Spark_Nlp_Apache Spark Ml_Johnsnowlabs Spark Nlp - Fatal编程技术网

Scala 如何使用JohnSnowLabs NLP拼写更正模块NorvigSweetingModel?

Scala 如何使用JohnSnowLabs NLP拼写更正模块NorvigSweetingModel?,scala,apache-spark,nlp,apache-spark-ml,johnsnowlabs-spark-nlp,Scala,Apache Spark,Nlp,Apache Spark Ml,Johnsnowlabs Spark Nlp,我正在检查约翰斯诺实验室的拼写检查 我在那里找到了Norvig的算法实现,示例部分只有以下两行: import com.johnsnowlabs.nlp.annotator.NorvigSweetingModel NorvigSweetingModel.pretrained() 如何在下面的数据帧(df)上应用此预训练模型来更正“名称”列的拼写 我已尝试按以下方式进行: val schk = NorvigSweetingModel.pretrained().setInputCols("name

我正在检查约翰斯诺实验室的拼写检查

我在那里找到了
Norvig
的算法实现,示例部分只有以下两行:

import com.johnsnowlabs.nlp.annotator.NorvigSweetingModel
NorvigSweetingModel.pretrained()
如何在下面的数据帧(
df
)上应用此预训练模型来更正“
名称
”列的拼写

我已尝试按以下方式进行:

val schk = NorvigSweetingModel.pretrained().setInputCols("names").setOutputCol("Corrected")

val cdf = schk.transform(df)
但是上面的代码给了我以下错误:

java.lang.IllegalArgumentException: requirement failed: Wrong or missing inputCols annotators in SPELL_a1f11bacb851. Received inputCols: names. Make sure such columns have following annotator types: token
  at scala.Predef$.require(Predef.scala:224)
  at com.johnsnowlabs.nlp.AnnotatorModel.transform(AnnotatorModel.scala:51)
  ... 49 elided

spark nlp
设计用于其自身的特定管道,不同变压器的输入列必须包含特殊元数据

异常已经告诉您,
NorvigSweetingModel
的输入应该标记化:

确保这些列具有以下注释器类型:标记

如果我没弄错的话,至少你会有汇编文档和标记在这里

import com.johnsnowlabs.nlp.DocumentAssembler
import com.johnsnowlabs.nlp.annotator.NorvigSweetingModel
import com.johnsnowlabs.nlp.annotators.Tokenizer
import org.apache.spark.ml.Pipeline

val df = Seq(Seq("abc", "cde"), Seq("eefg", "efa", "efb")).toDF("names")

val nlpPipeline = new Pipeline().setStages(Array(
  new DocumentAssembler().setInputCol("names").setOutputCol("document"),
  new Tokenizer().setInputCols("document").setOutputCol("tokens"),
  NorvigSweetingModel.pretrained().setInputCols("tokens").setOutputCol("corrected")
))
这样的
管道
可以在数据上应用,只需稍作调整-输入数据必须是
字符串
而不是
数组
*:

如果希望输出可以导出,则应使用
Finisher
扩展
管道

import com.johnsnowlabs.nlp.Finisher

new Finisher().setInputCols("corrected").transform(result).show

*根据
文档组装程序

可以读取字符串列或数组[String]

但在1.7.3中,它看起来并不实际:

df.transform(df => nlpPipeline.fit(df).transform(df)).show()
org.apache.spark.sql.AnalysisException:由于数据类型不匹配,无法解析“UDF(名称)”:参数1需要字符串类型,但是,“名称”是数组类型。;;
“项目[名称#62,UDF(名称#62)作为文件#343]
+-分析屏障
+-项目[名称为价值60#62]
+-LocalRelation[值#60]

如何获得拼写更正值。“更正”下的值为
[[token,0,3,eefg,[Session->1],[token,5,7,efa,[Session->1],[token,9,11,efb,[Session->1]].
是否执行此列表项,如[Session->1],是否有任何标准结构/含义?@user3243499如何获得拼写更正值-请检查
Finisher
部分。此列表中的每个项目,如[句子->1],是否有任何标准结构/含义?-这是元数据。它是
map
,因此结构不是固定的,但在本例中,它包含有关文档中句子形式的信息。
+------------+--------------------+--------------------+--------------------+
|       names|            document|              tokens|           corrected|
+------------+--------------------+--------------------+--------------------+
|     abc cde|[[document, 0, 6,...|[[token, 0, 2, ab...|[[token, 0, 2, ab...|
|eefg efa efb|[[document, 0, 11...|[[token, 0, 3, ee...|[[token, 0, 3, ee...|
+------------+--------------------+--------------------+--------------------+
import com.johnsnowlabs.nlp.Finisher

new Finisher().setInputCols("corrected").transform(result).show
 +------------+------------------+
 |       names|finished_corrected|
 +------------+------------------+
 |     abc cde|        [abc, cde]|
 |eefg efa efb|  [eefg, efa, efb]|
 +------------+------------------+
df.transform(df => nlpPipeline.fit(df).transform(df)).show()
org.apache.spark.sql.AnalysisException: cannot resolve 'UDF(names)' due to data type mismatch: argument 1 requires string type, however, '`names`' is of array<string> type.;;
'Project [names#62, UDF(names#62) AS document#343]
+- AnalysisBarrier
      +- Project [value#60 AS names#62]
         +- LocalRelation [value#60]