Advertisement
Guest User

nigo

a guest
Mar 28th, 2015
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 5.08 KB | None | 0 0
  1. package hakija
  2.  
  3. import scala.collection.mutable.ArrayBuffer
  4. import scala.xml
  5. import java.io.PrintWriter
  6. import scala.xml.XML
  7. import scala.io.Source
  8.  
  9. object Hakija {
  10.  
  11.  
  12.   def to8(s: String): String = {
  13.     s.replaceAll("ä","auml&").replaceAll("ö","ouml&").replaceAll("Ä","Auml&").replaceAll("Ö","Ouml&")
  14.   }
  15.  
  16.   def haeLinkitLuokasta(osoite: String, tiedostonimi: String) = {
  17.     //hakee tietystä wiktionary-luokasta sanalistan ja linkit artikkeleihin
  18.     val ab = ArrayBuffer[String]()
  19.    
  20.     var seuraava1: Option[String] = Some(osoite)
  21.     var sana = "aakkonen"   //muista vaihtaa tämä muuttuja ennen hakemista ENSIMMÄISEKSI SANAKSI
  22.      
  23.     var sana1 = sana  //sana1 on sivun ensimmäinen sana, josta tarkastetaan, onko sivulla uusia sanoja.
  24.     // viimeisellä luokan sivulla on yleensä vain yksi sana, joka on edelliseltä sivulta, jolloin
  25.     // sana1 on sama kuin viimeisin tallennettu sana, jolloin looppi pysähtyy.
  26.     while (seuraava1 != None) {
  27.       sana1 = sana
  28.      
  29.       println(seuraava1.get)
  30.       val osoitteenXML = XML.load(to8(seuraava1.get)) \\ "li"
  31.  
  32.       for (a <- osoitteenXML) {
  33.         val otsikko = (a \ "a" \ "@title").toString()
  34.         val linkki = (a \ "a" \ "@href").toString
  35.        
  36.         if (!(linkki.contains(" ") || otsikko.contains(" ")) && linkki != "" && otsikko != "" && !(otsikko.contains("Wiktionary"))) {
  37.           ab += (otsikko+ " " + linkki)
  38.           sana = otsikko
  39.         }
  40.       }
  41.       val seuraava = XML.load(to8(seuraava1.get)) \\ "a"
  42.       println(seuraava.size)
  43.       println("sana on : " + sana + " sana1 on : " + sana1)
  44.       if (sana1 == sana || sana == "öylättilautanen") {
  45.         seuraava1 = None
  46.       } else {
  47.         seuraava1 = Some(seuraava1.get.replaceAll(sana1,sana).replaceAll(sana1.toUpperCase(), sana.toUpperCase()))
  48.       }
  49.     }
  50.    
  51.     val tiedosto = new PrintWriter(tiedostonimi)
  52.     try {
  53.       for (n <- ab) {
  54.         tiedosto.println(n)
  55.       }
  56.     } finally {
  57.       tiedosto.close()
  58.     }
  59.      
  60.   }
  61.  
  62.   def haeNominit(luku: String, kirjoitus: String) {
  63.     //hakee nominit ja muodostaa niistä tekstitiedoston
  64.     val printattavat = ArrayBuffer[String]()
  65.    
  66.     val tiedosto = Source.fromFile(luku)
  67.     val rivit = tiedosto.getLines().toVector
  68.     val rivienMaara = rivit.size
  69.    
  70.     var counter = 0
  71.    
  72.     println("\n"+"ladattu internetistä"+"\n")
  73.     val ptiedosto = new PrintWriter(kirjoitus)
  74.     try {
  75.       for (a <- rivit) {
  76.         counter += 1
  77.         if (counter % (rivienMaara /100) == 0) {
  78.           println("" + counter / (rivienMaara/100) + " % ")
  79.         }
  80.         val riviN = a.split(" ")
  81.         if (riviN.size == 2) {
  82.           val speksit = this.haeNomini("http://en.wiktionary.org" + riviN(1))
  83.           var string = ""
  84.           speksit._1 match {
  85.             case "substantiivi" => string += "S:"
  86.             case "adjektiivi" => string += "A:"
  87.             case "pronomini" => string += "P:"
  88.             case "erisnimi" => string += "EN:"
  89.             case "numeraali" => string += "N:"
  90.             case _ => string += "M:"
  91.            
  92.           }
  93.           string += riviN(0)
  94.           if (speksit._2) string += ",K" else string += ",E"
  95.           if (speksit._3) string += ",Y" else string += ",N"
  96.           //println(string)
  97.           ptiedosto.println(string)
  98.         }
  99.        
  100.       }
  101.     } finally {
  102.       ptiedosto.close()
  103.     }
  104.    
  105.   }
  106.  
  107.   def haeNomini(sananUrl: String) = {
  108.     var sanaluokka: Option[String] = None
  109.     var astevaihtelu = true
  110.     var yhdys = false
  111.     val osoitteenXML = XML.load(sananUrl).mkString.toLowerCase()
  112.     if (osoitteenXML.contains("finnish nouns")) {
  113.       sanaluokka = Some("substantiivi")
  114.     } else if (osoitteenXML.contains("finnish adjectives")) {
  115.       sanaluokka = Some("adjektiivi")
  116.     } else if (osoitteenXML.contains("finnish pronouns")) {
  117.       sanaluokka = Some("pronomini")
  118.     } else if (osoitteenXML.contains("finnish proper nouns")) {
  119.       sanaluokka = Some("erisnimi")
  120.     } else if (osoitteenXML.contains("finnish numerals")) {
  121.       sanaluokka = Some("numeraali")      
  122.     } else {
  123.       sanaluokka = Some("muu")
  124.     }
  125.     if (osoitteenXML.contains("no gradation")) {
  126.       astevaihtelu = false
  127.     }
  128.     if (osoitteenXML.contains("finnish compound words")) {
  129.       yhdys = true
  130.     }
  131.     (sanaluokka.get,astevaihtelu,yhdys)
  132.    
  133.   }
  134.  
  135.   def siisti(luku: String, kirjoitus: String) = { // siistii formaatin järkevämmäksi
  136.     val tiedosto = Source.fromFile(luku)
  137.     val rivit = tiedosto.getLines().toVector
  138.     val ptiedosto = new PrintWriter(kirjoitus)
  139.     try {
  140.       for (a <- rivit) {
  141.         val eroteltu = a.split(":") //sanaluokka - astevaihtelu/ei astevaihtelua - yhdyssana/normaali
  142.         if (eroteltu.size>0) {
  143.           if (eroteltu(0)=="EN") eroteltu(0) = "E"
  144.         }
  145.         println("kaljaa")
  146.         if (eroteltu.size==2) {
  147.           val eroteltu2 = eroteltu(1).split(",")
  148.           ptiedosto.println(eroteltu2(0)+":"+eroteltu(0)+eroteltu2(1)+eroteltu2(2))
  149.         }
  150.       }
  151.     } finally {
  152.       ptiedosto.close()
  153.     }
  154.   }
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement