Advertisement
Guest User

hakija_nykyinen

a guest
Apr 3rd, 2015
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 6.96 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 = "aavikoitua"   //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.           if (otsikko(0)!='-') {
  39.             sana = otsikko
  40.           }
  41.         }
  42.       }
  43.       val seuraava = XML.load(to8(seuraava1.get)) \\ "a"
  44.       println(seuraava.size)
  45.       println("sana on : " + sana + " sana1 on : " + sana1)
  46.       if (sana1 == sana || sana(0)=='ö') {
  47.         seuraava1 = None
  48.       } else {
  49.         seuraava1 = Some(seuraava1.get.replaceAll(sana1,sana).replaceAll(sana1.toUpperCase(), sana.toUpperCase()))
  50.       }
  51.     }
  52.    
  53.     val tiedosto = new PrintWriter(tiedostonimi)
  54.     try {
  55.       for (n <- ab) {
  56.         tiedosto.println(n)
  57.       }
  58.     } finally {
  59.       tiedosto.close()
  60.     }
  61.      
  62.   }
  63.  
  64.   def haeNominit(luku: String, kirjoitus: String) {
  65.     //hakee nominit ja muodostaa niist� tekstitiedoston
  66.     val printattavat = ArrayBuffer[String]()
  67.    
  68.     val tiedosto = Source.fromFile(luku)
  69.     val rivit = tiedosto.getLines().toVector
  70.     val rivienMaara = rivit.size
  71.    
  72.     var counter = 0
  73.    
  74.     println("\n"+"ladattu internetist�"+"\n")
  75.     val ptiedosto = new PrintWriter(kirjoitus)
  76.     try {
  77.       for (a <- rivit) {
  78.         counter += 1
  79.         if (counter % (rivienMaara /100) == 0) {
  80.           println("" + counter / (rivienMaara/100) + " % ")
  81.         }
  82.         val riviN = a.split(" ")
  83.         if (riviN.size == 2) {
  84.           val speksit = this.haeNomini("http://en.wiktionary.org" + riviN(1))
  85.           var string = ""
  86.           speksit._1 match {
  87.             case "substantiivi" => string += "S:"
  88.             case "adjektiivi" => string += "A:"
  89.             case "pronomini" => string += "P:"
  90.             case "erisnimi" => string += "EN:"
  91.             case "numeraali" => string += "N:"
  92.             case _ => string += "M:"
  93.            
  94.           }
  95.           string += riviN(0)
  96.           if (speksit._2) string += ",K" else string += ",E"
  97.           if (speksit._3) string += ",Y" else string += ",N"
  98.           //println(string)
  99.           ptiedosto.println(string)
  100.         }
  101.        
  102.       }
  103.     } finally {
  104.       ptiedosto.close()
  105.     }
  106.    
  107.   }
  108.  
  109.   def haeVerbit(luku: String, kirjoitus: String) {
  110.     //hakee nominit ja muodostaa niist� tekstitiedoston
  111.     val printattavat = ArrayBuffer[String]()
  112.    
  113.     val tiedosto = Source.fromFile(luku)
  114.     val rivit = tiedosto.getLines().toVector
  115.     val rivienMaara = rivit.size
  116.    
  117.     var counter = 0
  118.    
  119.     println("\n"+"ladattu internetist�"+"\n")
  120.     val ptiedosto = new PrintWriter(kirjoitus)
  121.     val sTime = System.currentTimeMillis()
  122.     try {
  123.       for (a <- rivit) {
  124.         var askeinen = sTime
  125.         var nykyinen = System.currentTimeMillis()
  126.         counter += 1
  127.         if (counter % (rivienMaara /100) == 0) {
  128.           val prosentti = counter / (rivienMaara/100)
  129.           println("" + prosentti + " % ")
  130.           askeinen = nykyinen
  131.           nykyinen = System.currentTimeMillis()
  132.           val sekunnit = ((nykyinen-askeinen) * (100-prosentti) )/1000
  133.           println("aikaa jäljellä : " + sekunnit/60+ " min " + sekunnit % 60 + " s " )
  134.         }
  135.         val riviN = a.split(" ")
  136.         if (riviN.size == 2) {
  137.           val speksit = this.haeVerbi("http://en.wiktionary.org" + riviN(1))
  138.           var string = riviN(0)
  139.           string += ":V"
  140.           if (speksit._1) string += "K" else string += "E"
  141.           if (speksit._2) string += "Y" else string += "N"
  142.           //println(string)
  143.           ptiedosto.println(string)
  144.         }
  145.        
  146.       }
  147.     } finally {
  148.       ptiedosto.close()
  149.     }
  150.    
  151.   }
  152.  
  153.   def haeVerbi(sananUrl: String): (Boolean,Boolean) = {
  154.     var astevaihtelu = true
  155.     var yhdys = false
  156.     val osoitteenXML = XML.load(sananUrl).mkString.toLowerCase()
  157.     if (osoitteenXML.contains("no gradation")) {
  158.       astevaihtelu = false
  159.     }
  160.     if (osoitteenXML.contains("finnish compound words")) {
  161.       yhdys = true
  162.     }
  163.     (astevaihtelu,yhdys)
  164.    
  165.   }
  166.  
  167.  
  168.   def haeNomini(sananUrl: String) = {
  169.     var sanaluokka: Option[String] = None
  170.     var astevaihtelu = true
  171.     var yhdys = false
  172.     val osoitteenXML = XML.load(sananUrl).mkString.toLowerCase()
  173.     if (osoitteenXML.contains("finnish nouns")) {
  174.       sanaluokka = Some("substantiivi")
  175.     } else if (osoitteenXML.contains("finnish adjectives")) {
  176.       sanaluokka = Some("adjektiivi")
  177.     } else if (osoitteenXML.contains("finnish pronouns")) {
  178.       sanaluokka = Some("pronomini")
  179.     } else if (osoitteenXML.contains("finnish proper nouns")) {
  180.       sanaluokka = Some("erisnimi")
  181.     } else if (osoitteenXML.contains("finnish numerals")) {
  182.       sanaluokka = Some("numeraali")      
  183.     } else {
  184.       sanaluokka = Some("muu")
  185.     }
  186.     if (osoitteenXML.contains("no gradation")) {
  187.       astevaihtelu = false
  188.     }
  189.     if (osoitteenXML.contains("finnish compound words")) {
  190.       yhdys = true
  191.     }
  192.     (sanaluokka.get,astevaihtelu,yhdys)
  193.    
  194.   }
  195.  
  196.   def siisti(luku: String, kirjoitus: String) = { // siistii formaatin j�rkev�mm�ksi
  197.     val tiedosto = Source.fromFile(luku)
  198.     val rivit = tiedosto.getLines().toVector
  199.     val ptiedosto = new PrintWriter(kirjoitus)
  200.     try {
  201.       for (a <- rivit) {
  202.         val eroteltu = a.split(":") //sanaluokka - astevaihtelu/ei astevaihtelua - yhdyssana/normaali
  203.         if (eroteltu.size>0) {
  204.           if (eroteltu(0)=="EN") eroteltu(0) = "E"
  205.         }
  206.         println("kaljaa")
  207.         if (eroteltu.size==2) {
  208.           val eroteltu2 = eroteltu(1).split(",")
  209.           ptiedosto.println(eroteltu2(0)+":"+eroteltu(0)+eroteltu2(1)+eroteltu2(2))
  210.         }
  211.       }
  212.     } finally {
  213.       ptiedosto.close()
  214.     }
  215.   }
  216. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement