Χρήστης:Vanished user Xorisdtbdfgonugyfs/Gambas
Συνάρτηση η οποία διαβάζει το xml αρχείο και σε κάθε λήμμα καλεί μία άλλη. Στην καλούμενη συνάρτηση είναι γνωστά (γιατί είναι public) το λήμμα και το κείμενο οπότε μπορούμε να επεξεργαστούμε το κείμενο και να βρούμε ότι θέλουμε.
Βασική
επεξεργασίαPUBLIC prTrexonLimma AS STRING PUBLIC prTrexonLimmaSQL AS STRING PUBLIC prTrexonKeimeno AS STRING PUBLIC SUB Button1_Click() DIM prAnagnostis AS XmlReader DIM prCounterHere AS Integer DIM prTimePassedHere AS Integer DIM prdbfilename AS String DIM prXMLfilename AS String prdbfilename = "wiki.db" prXMLfilename = "latest.xml" IF NOT Exist(Application.path &/ prdbfilename) THEN Message.Info("db file not found. will be created!") prTempFile = OPEN Application.path & "/MakeData.sql" FOR CREATE PRINT #prTempFile, "create table wikipages (w_title text,w_lang text );create table wikitrans (t_word text,t_lang text );CREATE INDEX mainindex on wikipages (w_title ASC);CREATE INDEX wordindex on wikitrans (t_word ASC);" prTempFile.Close SHELL "sqlite3 " & Application.Path &/ prdbfilename & "<" & Application.path & "/MakeData.sql" WAIT ENDIF WITH pubConnToDB .Type = "sqlite3" .Name = Application.Path &/ prdbfilename END WITH prAnagnostis = NEW XmlReader TRY prAnagnostis.Open(prXMLfilename) IF ERROR THEN Message.Error("Error when trying to open the latest.xml file!") RETURN ENDIF TRY pubConnToDB.Exec("DELETE FROM wikipages;") IF ERROR THEN TextArea1.Text = TextArea1.Text & Chr(13) & "DELETE FROM wikipages; FAILED." & Chr(13) & error.Text END IF pubConnToDB.Exec("DELETE FROM wikitrans;") 'pubConnToDB.Exec("DELETE FROM unprocessed;") 'pubConnToDB.Exec("DELETE FROM specialpages;") 'pubConnToDB.Exec("DELETE FROM redirections;") mycounter = 0 prCounterHere = 0 prTimePassedHere = 0 DO WHILE TRUE 'refresh every 100 IF prTimePassedHere < prCounterHere - 99 THEN 'ενημέρωση του GUI για πόσα έχουν γίνει lblcounter2.text = prCounterHere lblcounter2.Refresh TextArea1.Refresh LangProblems.Refresh WAIT 0.1 prTimePassedHere = prCounterHere END IF TRY prAnagnostis.Read() IF prAnagnostis.Eof THEN BREAK 'για όση ώρα το όνομα του κόμβου δεν είναι page διάβαζε συνέχεια DO WHILE prAnagnostis.Node.Name <> "page" TRY prAnagnostis.Read() 'φυσικά αν για κάποιο λόγο φτάσεις στο τέλος βγες από το Loop. '(για να είμαστε εξασφαλισμένοι και να μην σκάει το πρόγραμμα) IF prAnagnostis.Eof THEN BREAK LOOP 'Αφού έφτασες εδώ πάει να πει ότι βρήκες έναν κόμβο με το όνομα page. 'Μέσα σε αυτόν τον κόμβο υπάρχουν άλλοι κόμβοι. 'Ας ψάξουμε για τον κόμβο title για να έχουμε τον τίτλο (της wiki σελίδας). 'Προφανώς είναι ο επόμενος κόμβος αλλά καλού κακού... DO WHILE prAnagnostis.Node.Name <> "title" TRY prAnagnostis.Read() IF prAnagnostis.Eof THEN BREAK LOOP 'Βάλε το όνομα-τίτλο της σελίδας σε μια τοπική μεταβλητή για να το έχουμε TRY prAnagnostis.Read() IF prAnagnostis.Eof THEN BREAK prTrexonLimma = prAnagnostis.Node.Value 'ετοίμασε και μία εκδοχή για SQL prTrexonLimmaSQL = Replace$(prTrexonLimma, "'", "''") 'αν θέλω σημείο debug σε μια λέξη ' IF prTrexonLimma = "pan" THEN ' Message.Info("ops") ' END IF 'πάμε να βρούμε το κείμενο της σελίδας του wiki που βρίσκεται στον κόμβο text DO WHILE prAnagnostis.Node.Name <> "text" TRY prAnagnostis.Read() IF prAnagnostis.Eof THEN BREAK LOOP 'φτάσαμε στον κόμβο text αλλά το πραγματικό περιεχόμενο είναι στο επόμενο διάβασμα TRY prAnagnostis.Read() IF prAnagnostis.Eof THEN BREAK 'βάλε το κείμενο σε μια τοπική μεταβλητή prTrexonKeimeno = prAnagnostis.Node.Value 'κάνε ότι θέλεις με αυτό το λήμμα processWordPage() prCounterHere = prCounterHere + 1 LOOP 'φυσικά κλείνουμε το αρχείο για να μην μείνει "ξεκρέμαστο" prAnagnostis.Close 'κλείνουμε και την public σύνδεση με τη βάση pubConnToDB.Commit pubConnToDB.close 'δείχνουμε στο χρήστη ότι τελείωσε TextArea1.Text = TextArea1.Text & Chr(13) & "ΤΕΛΟΣ" TextArea1.Refresh END
Επιμέρους
επεξεργασίαΠολωνικά χωρίς γένος
επεξεργασίαΑναζήτηση πολωνικών που δεν έχουν γένος.
PUBLIC SUB sCheckPlgenos() DIM prhPLstart AS Integer DIM prhPLkeimeno AS String DIM prhNextLangstart AS Integer DIM prhPLOYSstart AS Integer DIM prhNextReturn1 AS Integer 'μην ψάχνεις εκτός κύριου namespace IF String.InStr(prTrexonLimma, ":") THEN RETURN prhPLstart = String.InStr(prTrexonKeimeno, "=={{-pl-}}==") IF prhPLstart > 0 THEN prhNextReturn1 = String.InStr(prTrexonKeimeno, "\n", prhPLstart + 1) prhNextLangstart = String.InStr(prTrexonKeimeno, "=={{-", prhNextReturn1 + 1) IF prhNextLangstart > 0 THEN prhPLkeimeno = String.Mid(prTrexonKeimeno, prhNextReturn1 + 1, prhNextLangstart - prhNextReturn1) ELSE prhPLkeimeno = String.Mid(prTrexonKeimeno, prhNextReturn1 + 1) 'ας έχει και τα iw END IF prhPLOYSstart = String.InStr(prhPLkeimeno, "=={{ουσιαστικό|pl") IF prhPLOYSstart > 0 THEN 'βρήκαμε IF NOT fexeigenos(prhPLkeimeno, prhPLOYSstart) THEN txtT1.Text &= ", " & prTrexonLimma ' ή txtT1.Text &= "\n[[" & prTrexonLimma & "]]" 'αλλά αυτό γίνεται και με αναζήτηση και αντικατάσταση μετά στο gedit. 'Για την ώρα ας τα βλέπω όλα εύκολα. END IF prhPLOYSstart = String.InStr(prhPLkeimeno, "=={{κύριο όνομα|pl") IF prhPLOYSstart > 0 THEN 'βρήκαμε IF NOT fexeigenos(prhPLkeimeno, prhPLOYSstart) THEN txtT1.Text &= ", " & prTrexonLimma END IF prhPLOYSstart = String.InStr(prhPLkeimeno, "=={{πολυλεκτικός όρος|pl") IF prhPLOYSstart > 0 THEN 'βρήκαμε IF NOT fexeigenos(prhPLkeimeno, prhPLOYSstart) THEN txtT1.Text &= ", " & prTrexonLimma END IF END IF END PUBLIC FUNCTION fexeigenos(poioKeimeno AS String, poioStart AS Integer) AS Boolean DIM prhNextReturn1 AS Integer DIM prhNextReturn2 AS Integer DIM prhText AS String prhNextReturn1 = String.InStr(poioKeimeno, "\n", poioStart + 1) prhNextReturn2 = String.InStr(poioKeimeno, "\n", prhNextReturn1 + 1) 'θεωρητικά εδώ (ίσως) έχει το '''PAGENAME''' και το γένος 'αν όχι ας μπει έτσι κι αλλιώς στη λίστα για να το δώ 'μπορεί να γίνει πιο ακριβής έλεγχος για όλα τα πρότυπα (απλ, απληθ κλπ) 'και για το αν υπάρχει το '''PAGENAME''' ακριβώς από κάτω αλλά δεν είναι της παρούσης:-) prhText = String.Mid(poioKeimeno, prhNextReturn1, prhNextReturn2 - prhNextReturn1) IF String.InStr(prhText, "{{α") > 0 OR String.InStr(prhText, "{{θ") > 0 OR String.InStr(prhText, "{{ο") > 0 THEN RETURN TRUE ELSE RETURN FALSE END IF END
online
επεξεργασίαΓια online:
Αν υπάρχει ήχος στο Πολωνικό φτιάξε το ίδιο για το ελληνικό.
'Button5-κουμπάκι 'txtPoio - κουτί κειμένου (textBox) 'txtReturned - κουτί κειμένου (textArea) PUBLIC SUB Button5_Click() DIM prhReturnString AS String DIM prhString AS String 'δουλεύει μόνο με απλές λέξεις χωρίς κενά, αποστρόφους κλπ. 'και μόνο για λέξεις που έχουν ήχο το Pl-όνομαλήμματος.ogg prhString = "curl --retry 10 -s -f 'http://pl.wiktionary.org/w/api.php?action=query&prop=revisions&titles=" prhString &= txtPoio.Text prhString &= "&rvprop=user|content' |grep '{{audio|Pl-" prhString &= txtPoio.Text prhString &= ".ogg'" SHELL prhString TO prhReturnString IF String.Len(prhReturnString) > 0 THEN IF String.InStr(prhReturnString, "{{audio|Pl-" & txtPoio.Text) > 0 THEN txtReturned.Text = "==={{προφορά}}===\n:{{ήχος|Pl-" & txtPoio.Text & ".ogg|Ήχος}}" END IF END IF END
λέξεις ημέρας
επεξεργασίαΒρες λέξεις της ημέρας από επιλεγμένες
PUBLIC SUB Button8_Click() DIM xcounter AS Integer DIM prhEntoli AS String DIM prhReturnString AS String prLekseis.Clear prLekseis.add("διαβρώνω") '1 prLekseis.add("λαμβδακισμός") '2 prLekseis.add("προτίμηση") '3 prLekseis.add("καλικούτσα") '4 prLekseis.add("δυσμένεια") '5 prLekseis.add("ευχέρεια") '6 prLekseis.add("επαναπαύομαι") '7 prLekseis.add("λεπτοδουλειά") '8 prLekseis.add("λεμφαδένας") '9 prLekseis.add("κομποσχοίνι") '10 prLekseis.add("ανένδοτος") '11 prLekseis.add("βαρκαρόλα") '12 prLekseis.add("γαργαλητό") '13 prLekseis.add("ξεζαλίζω") '14 prLekseis.add("οργανόγραμμα") '15 prLekseis.add("παραίσθηση") '16 prLekseis.add("ροβόλημα") '17 prLekseis.add("στριφογυρίζω") '18 prLekseis.add("ταλάντωση") '19 prLekseis.add("υπαλληλίκι") '20 prLekseis.add("ψευτομάρτυρας") '21 prLekseis.add("χάντρα") '22 prLekseis.add("ημίλευκος") '23 prLekseis.add("σάκος") '24 prLekseis.add("σβουνιά") '25 prLekseis.add("φεγγαρόφωτος") '26 prLekseis.add("ζέβρα") '27 prLekseis.add("ηλιοτρόπιο") '28 prLekseis.add("θραύω") '29 prLekseis.add("ίνδαλμα") '30 prLekseis.add("μανεκέν") '31 FOR xcounter = 1 TO 31 prhEntoli = "curl --retry 10 -s -f 'http://el.wiktionary.org/w/api.php?action=query&prop=revisions&titles=Πρότυπο:ΛτΗ" prhEntoli &= xcounter prhEntoli &= "&format=xml&rvprop=user|content'" SHELL prhEntoli TO prhReturnString prhReturnString = fextractleksi(prhReturnString) prhEntoli = "curl --retry 10 -s -f 'http://el.wiktionary.org/w/api.php?action=query&prop=revisions&titles=" prhEntoli &= prhReturnString prhEntoli &= "&format=xml&rvprop=user|content'" SHELL prhEntoli TO prhReturnString IF String.InStr(prhReturnString, "λείπει ο ορισμός") < 1 THEN txtT1.Text &= "\n" & xcounter & "\t" & frandomleksi() END IF txtT1.Refresh WAIT 0.3 NEXT END PRIVATE FUNCTION fextractleksi(poioKeimeno AS String) AS String DIM prhString1 AS String DIM prhstring2 AS String prhString1 = mdlIlias.OCPRealSplit(poioKeimeno, "<rev user")[1] prhstring2 = Split(prhString1, ">")[1] prhString1 = Split(prhString2, "<")[0] RETURN prhString1 END PRIVATE FUNCTION frandomleksi() AS String DIM xcounter AS Integer DIM prhString AS String xcounter = Rnd(0, prLekseis.Count) prhString = prLekseis[xcounter] prLekseis.Remove(xcounter) RETURN prhString END
Υποκοριστικά
επεξεργασίαPUBLIC SUB bCreateIt_Click() DIM prhLemma AS String DIM prhklisi AS String DIM prhkat AS String DIM prhGenos AS String DIM prhTestMatch AS Boolean DIM prhReturnString AS String DIM prhString AS String DIM prhtayt AS String txtMoiazoun.Text = "" prhLemma = TextAreaaki.Text SELECT CASE String.Right(txtYpok.Text, 3) 'Κύριο όνομα; 'ζιλεδάκι-ζελεδάκι; 'γαϊδουράκι-γαϊδαράκος; 'Κατινάκι-Κατινούλα-Κατινίτσα CASE "άκι" prhklisi = "παιδάκι" 'πρότυπο κλίσης prhkat = "-άκι" 'κατάληξη υποκοριστικού prhGenos = "{{ο}}" 'γένος prhTestMatch = (mdlIlias.OCPkleidael(String.Left(txtYpok.Text, String.Len(txtYpok.Text) - 3)) = mdlIlias.OCPkleidael(String.Left(txtAplo.Text, String.Len(txtYpok.Text) - 3))) CASE "ύλα" 'προσοχή στα επίθετα -ούλης,-ούλα prhklisi = "πείνα" prhkat = "-ούλα" prhGenos = "{{θ}}" prhTestMatch = (mdlIlias.OCPkleidael(String.Left(txtYpok.Text, String.Len(txtYpok.Text) - 4)) = mdlIlias.OCPkleidael(String.Left(txtAplo.Text, String.Len(txtYpok.Text) - 4))) CASE "τσα" prhklisi = "πείνα" prhkat = "-ίτσα" prhGenos = "{{θ}}" 'μπορεί και να μπει στο κείμενο IF ChExeiOyla.Value = TRUE THEN IF txt_OULA.text = "" THEN txtMoiazoun.Text = "ΣΦΑΛΜΑ" RETURN ELSE prhtayt = txt_OULA.text prhLemma = TextAreaitsa.Text END IF END IF prhTestMatch = (mdlIlias.OCPkleidael(String.Left(txtYpok.Text, String.Len(txtYpok.Text) - 4)) = mdlIlias.OCPkleidael(String.Left(txtAplo.Text, String.Len(txtYpok.Text) - 4))) CASE ELSE txtMoiazoun.Text = "ΣΦΑΛΜΑ" RETURN END SELECT prhLemma = Replace(prhLemma, "##1##", txtAplo.Text) 'από που προέρχεται prhLemma = Replace(prhLemma, "##2##", String.Left(txtYpok.Text, String.Len(txtYpok.Text) - 1)) 'χωρίς την κατάληξη για την κλίση prhLemma = Replace(prhLemma, "##3##", mdlIlias.OCPkleidael(txtYpok.text)) 'κλείδα prhLemma = Replace(prhLemma, "##4##", prhkat) prhLemma = Replace(prhLemma, "##5##", prhklisi) prhLemma = Replace(prhLemma, "##6##", prhGenos) prhLemma = Replace(prhLemma, "##7##", prhtayt) TextAreaLemma.Text = prhLemma txtMoiazoun.Text = IIf(prhTestMatch, "οκ", "ΔΕΝ ΜΟΙΑΖΟΥΝ!!!!") 'δουλεύει μόνο με απλές λέξεις χωρίς κενά, αποστρόφους κλπ. prhString = "curl --retry 10 -s -f 'http://el.wiktionary.org/w/api.php?format=xml&action=query&prop=revisions&titles=" prhString &= txtYpok.Text prhString &= "&rvprop=user|content'" SHELL prhString TO prhReturnString 'μικρό μπέρδεμα με τα rev και τις αλλαγές από <text> σε <rev> prhReturnString = String.Left(prhReturnString, String.InStr(prhReturnString, "</rev>") - 1) prhReturnString = String.Mid(prhReturnString, 1 + String.InStr(prhReturnString, ">", String.InStr(prhReturnString, "<rev ") + 1)) TextAreainwiki.Text = prhReturnString END
Ελληνική κλείδα
επεξεργασίαPUBLIC FUNCTION OCPkleidael(poialeksi AS String) AS String DIM grChar1 AS String DIM grChar2 AS String DIM grChar1array AS NEW String[] DIM grChar2array AS NEW String[] DIM xcounter AS Integer DIM ycounter AS Integer DIM prhKleida AS String grChar1 = "Ά,Έ,Ή,Ί,Ό,Ύ,Ώ,ΐ,Α,Β,Γ,Δ,Ε,Ζ,Η,Θ,Ι,Κ,Λ,Μ,Ν,Ξ,Ο,Π,Ρ,Σ,Τ,Υ,Φ,Χ,Ψ,Ω,Ϊ,Ϋ,ά,έ,ή,ί,ΰ,α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,ς,σ,τ,υ,φ,χ,ψ,ω,ϊ,ϋ,ό,ύ,ώ,ἀ,ἁ,ἂ,ἃ,ἄ,ἅ,ἆ,ἇ,Ἀ,Ἁ,Ἂ,Ἃ,Ἄ,Ἅ,Ἆ,Ἇ,ἐ,ἑ,ἒ,ἓ,ἔ,ἕ,Ἐ,Ἑ,Ἒ,Ἓ,Ἔ,Ἕ,ἠ,ἡ,ἢ,ἣ,ἤ,ἥ,ἦ,ἧ,Ἠ,Ἡ,Ἢ,Ἣ,Ἤ,Ἥ,Ἦ,Ἧ,ἰ,ἱ,ἲ,ἳ,ἴ,ἵ,ἶ,ἷ,Ἰ,Ἱ,Ἲ,Ἳ,Ἴ,Ἵ,Ἶ,Ἷ,ὀ,ὁ,ὂ,ὃ,ὄ,ὅ,Ὀ,Ὁ,Ὂ,Ὃ,Ὄ,Ὅ,ὐ,ὑ,ὒ,ὓ,ὔ,ὕ,ὖ,ὗ,Ὑ,Ὓ,Ὕ,Ὗ,ὠ,ὡ,ὢ,ὣ,ὤ,ὥ,ὦ,ὧ,Ὠ,Ὡ,Ὢ,Ὣ,Ὤ,Ὥ,Ὦ,Ὧ,ὰ,ά,ὲ,έ,ὴ,ή,ὶ,ί,ὸ,ό,ὺ,ύ,ὼ,ώ,ᾀ,ᾁ,ᾂ,ᾃ,ᾄ,ᾅ,ᾆ,ᾇ,ᾈ,ᾉ,ᾊ,ᾋ,ᾌ,ᾍ,ᾎ,ᾏ,ᾐ,ᾑ,ᾒ,ᾓ,ᾔ,ᾕ,ᾖ,ᾗ,ᾘ,ᾙ,ᾚ,ᾛ,ᾜ,ᾝ,ᾞ,ᾟ,ᾠ,ᾡ,ᾢ,ᾣ,ᾤ,ᾥ,ᾦ,ᾧ,ᾨ,ᾩ,ᾪ,ᾫ,ᾬ,ᾭ,ᾮ,ᾯ,ᾰ,ᾱ,ᾲ,ᾳ,ᾴ,ᾶ,ᾷ,Ᾰ,Ᾱ,Ὰ,Ά,ᾼ,ῂ,ῃ,ῄ,ῆ,ῇ,Ὲ,Έ,Ὴ,Ή,ῌ,ῖ,ῗ,Ῐ,Ῑ,Ὶ,Ί,ῠ,ῡ,ῢ,ΰ,ῤ,ῥ,ῦ,ῧ,Ῠ,Ῡ,Ὺ,Ύ,Ῥ,ῲ,ῳ,ῴ,ῶ,ῷ,Ὸ,Ό,Ὼ,Ώ,ῼ,Ω" grChar2 = "α,ε,η,ι,ο,υ,ω,ι,α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,σ,τ,υ,φ,χ,ψ,ω,ι,υ,α,ε,η,ι,υ,α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,σ,σ,τ,υ,φ,χ,ψ,ω,ι,υ,ο,υ,ω,α,α,α,α,α,α,α,α,α,α,α,α,α,α,α,α,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,η,η,η,η,η,η,η,η,η,η,η,η,η,η,η,η,ι,ι,ι,ι,ι,ι,ι,ι,ι,ι,ι,ι,ι,ι,ι,ι,ο,ο,ο,ο,ο,ο,ο,ο,ο,ο,ο,ο,υ,υ,υ,υ,υ,υ,υ,υ,υ,υ,υ,υ,ω,ω,ω,ω,ω,ω,ω,ω,ω,ω,ω,ω,ω,ω,ω,ω,α,α,ε,ε,η,η,ι,ι,ο,ο,υ,υ,ω,ω,α,α,α,α,α,α,α,α,α,α,α,α,α,α,α,α,η,η,η,η,η,η,η,η,η,η,η,η,η,η,η,η,ω,ω,ω,ω,ω,ω,ω,ω,ω,ω,ω,ω,ω,ω,ω,ω,α,α,α,α,α,α,α,α,α,α,α,α,η,η,η,η,η,ε,ε,η,η,η,ι,ι,ι,ι,ι,ι,υ,υ,υ,υ,ρ,ρ,υ,υ,υ,υ,υ,υ,ρ,ω,ω,ω,ω,ω,ο,ο,ω,ω,ω,ω" grChar1array = Split(grChar1, ",") grChar2array = Split(grChar2, ",") FOR xcounter = 1 TO String.Len(poialeksi) FOR ycounter = 0 TO grChar1array.Count - 1 IF String.Mid(poialeksi, xcounter, 1) = grChar1array[ycounter] THEN prhKleida &= grChar2array[ycounter] BREAK END IF NEXT NEXT RETURN prhKleida END
σε -α μόνο με επίρρημα ή μόνο μορφή επιθέτου
επεξεργασίαIF NOT (String.Right(prTrexonLimma, String.Len("α")) = "α") THEN RETURN 0 IF String.InStr(prTrexonKeimeno, "={{επίρρημα|el}}=") > 0 XOR String.InStr(prTrexonKeimeno, "={{μορφή επιθέτου|el}}=") > 0 THEN IF String.InStr(prTrexonKeimeno, "={{επίρρημα|el}}=") > 0 THEN txtT1.Text &= "\nεπ-" & prTrexonLimma ELSE txtT1.Text &= "\nμε-" & prTrexonLimma END IF RETURN 1 END IF RETURN 0