03_training_1_TrainLemmatizerModelInItalian(Scala)
import com.johnsnowlabs.nlp.{DocumentAssembler, Finisher}
import com.johnsnowlabs.nlp.annotators.{Normalizer, Stemmer, Tokenizer}
import com.johnsnowlabs.nlp.annotator._
import com.johnsnowlabs.nlp.base._
import com.johnsnowlabs.nlp.util.io.ExternalResource

import com.johnsnowlabs.util.{Benchmark, PipelineModels, Version}
import org.apache.spark.ml.feature.NGram

import org.apache.spark.ml.Pipeline
import com.johnsnowlabs.nlp.{DocumentAssembler, Finisher} import com.johnsnowlabs.nlp.annotators.{Normalizer, Stemmer, Tokenizer} import com.johnsnowlabs.nlp.annotator._ import com.johnsnowlabs.nlp.base._ import com.johnsnowlabs.nlp.util.io.ExternalResource import com.johnsnowlabs.util.{Benchmark, PipelineModels, Version} import org.apache.spark.ml.feature.NGram import org.apache.spark.ml.Pipeline
%sh 
curl -O 'https://s3.amazonaws.com/auxdata.johnsnowlabs.com/public/resources/it/lemma/dxc.technology/lemma_italian.txt'
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 32 6739k 32 2198k 0 0 2657k 0 0:00:02 --:--:-- 0:00:02 2655k 100 6739k 100 6739k 0 0 6856k 0 --:--:-- --:--:-- --:--:-- 6855k
%sh
head lemma_italian.txt
abate -> abate abati abbacchiare -> abbacchiare abbacchi abbacchia abbacchiai abbacchiammo abbacchiamo abbacchian abbacchiando abbacchiano abbacchiante abbacchianti abbacchiar abbacchiaron abbacchiarono abbacchiasse abbacchiasser abbacchiassero abbacchiassi abbacchiassimo abbacchiaste abbacchiasti abbacchiata abbacchiate abbacchiati abbacchiato abbacchiava abbacchiavamo abbacchiavan abbacchiavano abbacchiavate abbacchiavi abbacchiavo abbacchierà abbacchierai abbacchieran abbacchieranno abbacchierebbe abbacchierebber abbacchierebbero abbacchierei abbacchieremmo abbacchieremo abbacchiereste abbacchieresti abbacchierete abbacchierò abbacchin abbacchino abbacchio abbacchiò abbacinare -> abbacinare abbacina abbacinai abbacinammo abbacinan abbacinando abbacinano abbacinante abbacinanti abbacinar abbacinaron abbacinarono abbacinasse abbacinasser abbacinassero abbacinassi abbacinassimo abbacinaste abbacinasti abbacinata abbacinate abbacinati abbacinato abbacinava abbacinavamo abbacinavan abbacinavano abbacinavate abbacinavi abbacinavo abbacinerà abbacinerai abbacineran abbacineranno abbacinerebbe abbacinerebber abbacinerebbero abbacinerei abbacineremmo abbacineremo abbacinereste abbacineresti abbacinerete abbacinerò abbacini abbaciniamo abbaciniate abbacinin abbacinino abbacino abbacinò abbagliante -> abbagliante abbaglianti abbagliare -> abbagliare abbagli abbaglia abbagliai abbagliammo abbagliamo abbaglian abbagliando abbagliano abbagliante abbaglianti abbagliar abbagliaron abbagliarono abbagliasse abbagliasser abbagliassero abbagliassi abbagliassimo abbagliaste abbagliasti abbagliata abbagliate abbagliati abbagliato abbagliava abbagliavamo abbagliavan abbagliavano abbagliavate abbagliavi abbagliavo abbaglierà abbaglierai abbaglieran abbaglieranno abbaglierebbe abbaglierebber abbaglierebbero abbaglierei abbaglieremmo abbaglieremo abbagliereste abbaglieresti abbaglierete abbaglierò abbaglin abbaglino abbaglio abbagliò abbaglio -> abbaglio abbagli abbaiare -> abbaiare abbai abbaia abbaiai abbaiammo abbaiamo abbaian abbaiando abbaiano abbaiante abbaianti abbaiar abbaiaron abbaiarono abbaiasse abbaiasser abbaiassero abbaiassi abbaiassimo abbaiaste abbaiasti abbaiata abbaiate abbaiati abbaiato abbaiava abbaiavamo abbaiavan abbaiavano abbaiavate abbaiavi abbaiavo abbaierà abbaierai abbaieran abbaieranno abbaierebbe abbaierebber abbaierebbero abbaierei abbaieremmo abbaieremo abbaiereste abbaieresti abbaierete abbaierò abbain abbaino abbaio abbaiò abbaino -> abbaino abbaini abbandonare -> abbandonare abbandona abbandonai abbandonammo abbandonan abbandonando abbandonano abbandonante abbandonanti abbandonar abbandonaron abbandonarono abbandonasse abbandonasser abbandonassero abbandonassi abbandonassimo abbandonaste abbandonasti abbandonata abbandonate abbandonati abbandonato abbandonava abbandonavamo abbandonavan abbandonavano abbandonavate abbandonavi abbandonavo abbandonerà abbandonerai abbandoneran abbandoneranno abbandonerebbe abbandonerebber abbandonerebbero abbandonerei abbandoneremmo abbandoneremo abbandonereste abbandoneresti abbandonerete abbandonerò abbandoni abbandoniamo abbandoniate abbandonin abbandonino abbandono abbandonò abbandonata -> abbandonata abbandonate
%fs ls "file:/databricks/driver"
file:/databricks/driver/conf/conf/4096
file:/databricks/driver/all.txt.gzall.txt.gz549750125
file:/databricks/driver/planning_neighborhoods.shpplanning_neighborhoods.shp214576
file:/databricks/driver/logs/logs/4096
file:/databricks/driver/release/release/4096
file:/databricks/driver/derby.logderby.log731
file:/databricks/driver/planning_neighborhoods.shp.xmlplanning_neighborhoods.shp.xml21958
file:/databricks/driver/TinyUppsalaCentrumWgot.osmTinyUppsalaCentrumWgot.osm812115
file:/databricks/driver/eventlogs/eventlogs/4096
file:/databricks/driver/UppsalaCentrumWgot.osmUppsalaCentrumWgot.osm7623610
file:/databricks/driver/SFNbhd/SFNbhd/4096
file:/databricks/driver/lemma_italian.txtlemma_italian.txt6900964
file:/databricks/driver/planning_neighborhoods.prjplanning_neighborhoods.prj567
file:/databricks/driver/T-driveTaxiTrajectories.zipT-driveTaxiTrajectories.zip153217794
file:/databricks/driver/yellow_tripdata_2015-07.csvyellow_tripdata_2015-07.csv1812530041
file:/databricks/driver/planning_neighborhoods.dbfplanning_neighborhoods.dbf1028
file:/databricks/driver/ganglia/ganglia/4096
file:/databricks/driver/planning_neighborhoods.sbnplanning_neighborhoods.sbn516
file:/databricks/driver/planning_neighborhoods.sbxplanning_neighborhoods.sbx164
file:/databricks/driver/neighborhoods.geojsonneighborhoods.geojson1500963
file:/databricks/driver/orig_planning_neighborhoods.ziporig_planning_neighborhoods.zip163771
file:/databricks/driver/library-install-logs/library-install-logs/4096
file:/databricks/driver/all.tsvall.tsv60947802
file:/databricks/driver/all.txtall.txt788763010
file:/databricks/driver/planning_neighborhoods.shxplanning_neighborhoods.shx396
val documentAssembler = new DocumentAssembler()
  .setInputCol("text")
  .setOutputCol("document")

val sentenceDetector = new SentenceDetector()
.setInputCols(Array("document"))
.setOutputCol("sentence")

val tokenizer = new Tokenizer()
.setInputCols(Array("sentence"))
.setOutputCol("token")

val normalizer = new Normalizer()
  .setInputCols("token")
  .setOutputCol("normal")

val lemmatizer = new Lemmatizer() 
    .setInputCols("normal")
    .setOutputCol("lemma")
    .setDictionary(
      ExternalResource(
        path = "file:/databricks/driver/lemma_italian.txt",
        readAs = "LINE_BY_LINE",
        Map("valueDelimiter" -> "\\s+" , "keyDelimiter" -> "->" )
      )
    )

val pipeline = new Pipeline()
.setStages(Array(
  documentAssembler,
  sentenceDetector,
  tokenizer,
  normalizer,
  lemmatizer
))

val pipeLineModelNLP = Benchmark.time("Time to train model") {
  pipeline.fit(Seq.empty[String].toDF("text"))
}
Time to train model: 10.595582466sec documentAssembler: com.johnsnowlabs.nlp.DocumentAssembler = document_a33dd74b1733 sentenceDetector: com.johnsnowlabs.nlp.annotators.sbd.pragmatic.SentenceDetector = SENTENCE_98872f9f071a tokenizer: com.johnsnowlabs.nlp.annotators.Tokenizer = REGEX_TOKENIZER_d16c7378e0df normalizer: com.johnsnowlabs.nlp.annotators.Normalizer = NORMALIZER_11be16d47e15 lemmatizer: com.johnsnowlabs.nlp.annotators.Lemmatizer = LEMMATIZER_802f4b8eb592 pipeline: org.apache.spark.ml.Pipeline = pipeline_56c964f91ba5 pipeLineModelNLP: org.apache.spark.ml.PipelineModel = pipeline_56c964f91ba5
val testDataset = List(
    "Finchè non avevo la linea ADSL di fastweb potevo entrare nel router e configurare quelle pochissime cose configurabili (es. nome dei device), da ieri che ho avuto la linea niente è più configurabile...", 
    " L'uomo è insoddisfatto del prodotto.", 
    " La coppia contenta si abbraccia sulla spiaggia.")
    .toDF("text")
testDataset: org.apache.spark.sql.DataFrame = [text: string]
pipeLineModelNLP.transform(testDataset).select($"token.result".as("tokens")).show(1, false)
pipeLineModelNLP.transform(testDataset).select($"normal.result".as("normalized")).show(1, false)
pipeLineModelNLP.transform(testDataset).select($"lemma.result".as("lemmatized")).show(1, false)

+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |tokens | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |[Finchè, non, avevo, la, linea, ADSL, di, fastweb, potevo, entrare, nel, router, e, configurare, quelle, pochissime, cose, configurabili, (, es, ., nome, dei, device, ), ,, da, ieri, che, ho, avuto, la, linea, niente, è, più, configurabile, ., ., .]| +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ only showing top 1 row +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |normalized | +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |[Finchè, non, avevo, la, linea, ADSL, di, fastweb, potevo, entrare, nel, router, e, configurare, quelle, pochissime, cose, configurabili, es, nome, dei, device, da, ieri, che, ho, avuto, la, linea, niente, è, più, configurabile]| +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ only showing top 1 row +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |lemmatized | +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |[Finchè, non, avere, la, lineare, ADSL, di, fastweb, potere, entrare, nel, router, e, configurare, quello, pochissime, cosa, configurabile, es, nome, dio, device, da, ieri, che, avere, avere, la, lineare, niente, essere, molto, configurabile]| +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ only showing top 1 row