karabouzouk... Δημοσ. 16 Σεπτεμβρίου 2011 Δημοσ. 16 Σεπτεμβρίου 2011 Χαιρετώ everybody..! Πιστεύω όλοι έχετε ακούσει για το προγραμματάκι αυτό που στην ουσία σε βοηθάει να πληκτρολογήσεις σε οθόνες αφής χωρίς να είναι απαραίτητο να αγγίξεις ακριβώς πάνω στο γράμμα που θέλεις κάθε φορά αλλά το υπολογίζει με βάσει τις αποστάσεις που θα είχαν τα γράμματα σε ένα qwerty πληκτρολόγιο. Ελπίζω να έγινα κατανοητός αλλά αν όχι ένα και ένα insomnia link θα σας πείσει..! Λοιπόν θέλω να ακούσω απόψεις για το πώς θα μπορούσε να υλοποιηθεί κάτι τέτοιο (στο qt ας πούμε αν και δε νομίζω ότι έχει σημασία προς το παρόν) σαν γενικότερο σκεπτικό αλλά και αν έχουν γίνει και άλλες τέτοιες προσπάθειες από κάποιον από σας ή έχετε δει κάπου. Θα ποστάρω και δικές μου ιδέες για το πώς το σκέφτομαι εγώ αλλά πρώτον δεν θέλω να σας επηρεάσω και δεύτερον πρέπει να σκεφτώ κάποιες λεπτομέρειες ακόμη για τον τρόπο που έχω στο μυαλό μου..! Ευχαριστώ εκ των προτέρων..!
Directx Δημοσ. 16 Σεπτεμβρίου 2011 Δημοσ. 16 Σεπτεμβρίου 2011 Κατά την γνώμη μου και δίχως να έχω ασχοληθεί με το ζήτημα αυτό καθ' εαυτό, θεωρώ ότι όλα αυτά τα συστήματα πρόβλεψης λέξεων έχουν τις ρίζες τους στην φιλοσοφία του παλιού, καλού Τ9. Δηλαδή διατηρούν ένα λεξικό όπου κάθε λέξη αντιστοιχεί σε μια ή περισσότερες συμβολοσειρές (κάποιο HASH κλπ). Έτσι από ότι βλέπω στο κινητό μου: Οι λέξεις "Ελλάδα, Δεκάδα, Άλλαζα .." προτείνονται αν γράψεις "Δκαδα" (το HASH μας), και με βάση αυτό συνυπολογίζοντας στατιστικά την συχνότητα των πιο κοινών λέξεων κάθε γλώσσας κάνουν τις προτάσεις τους (στην περίπτωση του λεξικού μου, πρώτη υποψήφια λέξη είναι η "Ελλάδα"). Ύστερα κρατώντας, για παράδειγμα, ποία προτεινόμενη λέξη επέλεξε τελικά ο χρήστης αυξάνουν την συχνότητα της ώστε η λέξη αυτή να εμφανίζεται στα πρώτα - πρώτα αποτελέσματα την επόμενη φορά βελτιώνοντας την ευστοχία του συστήματος. Αυτή την λογική πάνω - κάτω την περνάς σε κάθε άλλο σύστημα τελικά, είτε πρόκειται για οπτικό πληκτρολόγιο είτε για NUMPAD κλπ. Από εκεί και πέρα μπορείς να υπολογίσεις στατιστικά την παρέκκλιση (εδώ είναι το ζουμί -ο αλγόριθμος) των συμβολοσειρών ώστε ακόμα και αν γράφει κάποιος "σαχλαμάρες" το σύστημα να ευστοχεί τηρουμένων των αναλογιών όσο μπορεί προς αυτό που επιθυμούσε να γράψει τελικά ο χρήστης. Υ.Γ. Όλα αυτά βέβαια τα γράφω με κάθε επιφύλαξη διότι αν και με έχει προβληματίσει παλαιότερα το ζήτημα, δεν έχω ασχοληθεί με την υλοποίηση του.
karabouzouk... Δημοσ. 17 Σεπτεμβρίου 2011 Μέλος Δημοσ. 17 Σεπτεμβρίου 2011 Κατά την γνώμη μου και δίχως να έχω ασχοληθεί με το ζήτημα αυτό καθ' εαυτό, θεωρώ ότι όλα αυτά τα συστήματα πρόβλεψης λέξεων έχουν τις ρίζες τους στην φιλοσοφία του παλιού, καλού Τ9. Δηλαδή διατηρούν ένα λεξικό όπου κάθε λέξη αντιστοιχεί σε μια ή περισσότερες συμβολοσειρές (κάποιο HASH κλπ). Έτσι από ότι βλέπω στο κινητό μου: Οι λέξεις "Ελλάδα, Δεκάδα, Άλλαζα .." προτείνονται αν γράψεις "Δκαδα" (το HASH μας), και με βάση αυτό συνυπολογίζοντας στατιστικά την συχνότητα των πιο κοινών λέξεων κάθε γλώσσας κάνουν τις προτάσεις τους (στην περίπτωση του λεξικού μου, πρώτη υποψήφια λέξη είναι η "Ελλάδα"). Ύστερα κρατώντας, για παράδειγμα, ποία προτεινόμενη λέξη επέλεξε τελικά ο χρήστης αυξάνουν την συχνότητα της ώστε η λέξη αυτή να εμφανίζεται στα πρώτα - πρώτα αποτελέσματα την επόμενη φορά βελτιώνοντας την ευστοχία του συστήματος. Αυτή την λογική πάνω - κάτω την περνάς σε κάθε άλλο σύστημα τελικά, είτε πρόκειται για οπτικό πληκτρολόγιο είτε για NUMPAD κλπ. Από εκεί και πέρα μπορείς να υπολογίσεις στατιστικά την παρέκκλιση (εδώ είναι το ζουμί -ο αλγόριθμος) των συμβολοσειρών ώστε ακόμα και αν γράφει κάποιος "σαχλαμάρες" το σύστημα να ευστοχεί τηρουμένων των αναλογιών όσο μπορεί προς αυτό που επιθυμούσε να γράψει τελικά ο χρήστης. Υ.Γ. Όλα αυτά βέβαια τα γράφω με κάθε επιφύλαξη διότι αν και με έχει προβληματίσει παλαιότερα το ζήτημα, δεν έχω ασχοληθεί με την υλοποίηση του. Στο δεύτερο video αυτής της σελίδας προσπαθεί τουλάχιστον να εξηγήσει τη διαφορά αυτής της εφαρμογής από το γνωστό Τ9.. που στην ουσία είναι ότι το blindtype υπολογίζει το γράμμα που θέλεις να πατήσεις λαμβάνοντας υπόψη τη θέση αλλά και την απόστασή του σημείου που αγγίζεις από τα επόμενα και προηγούμενα γράμματα/σημεία όπως θα ήταν αν πληκτρολογούσες σε ένα φυσικό πληκτρολόγιο.. Το τ9 σε μένα τουλάχιστον σε κάποια λίγο παλιότερα κινητά που χρησιμοποιώ ακόμα λαμβάνουν υπ' όψιν μόνο τα τρία/τέσσερα γράμματα που έχει πάνω το κάθε πλήκτρο που πατάω για να υπολογίσουν τις πιθανές λέξεις.. πχ αν πατήσω "δκαδα" (35232) που λες δεν έχει προτεινόμενες λέξεις.. αν πατήσω "Ελλάδα" (355232) η μόνη προτεινόμενη είναι .."Ελλάδα". Συμφωνώ μαζί σου όσον αφορά τα περί στατιστικών για καλύτερη ευστοχία στις προτεινόμενες λέξεις αλλά πιστεύω κατάλαβες σε τι πρόβλημα προσπαθώ να βρω λύση..! Ευχαριστώ για την απάντηση σου!
Directx Δημοσ. 17 Σεπτεμβρίου 2011 Δημοσ. 17 Σεπτεμβρίου 2011 Πράγματι μου ξέφυγε το δεύτερο 5, όμως όλα εξαρτώνται από την υλοποίηση έκαστου λεξικού και συστήματος ανεύρεσης, έτσι στο κινητό τελευταίας γενιάς μου (HTC Desire Z) ο λεξάριθμος 35232 στο Virtual Numpad της συσκευής επιστρέφει τα αποτελέσματα που προανέφερα, ο δε 355232 επιστρέφει επίσης αποτελέσματα (διαφορετικά αλλά με την λέξη Ελλάδα συμπεριλαμβανομένης -πιθανόν λόγο εκπαίδευσης πλέον). Από εκεί και πέρα, πράγματι δυο παλαιότερες συσκευές μου (SE & NOKIA) στο 355232 επιστρέφουν μόνο την λέξη "Ελλάδα" ενώ στο 35232 προσπαθούν να "χτίσουν" λέξη. Πάντως αμφότερα τα λεξικά των συσκευών τελικά ανιχνεύουν την επιθυμητή λέξη οπότε ο χρήστης μένει ικανοποιημένος -η δουλειά γίνεται με απλά λόγια. Από εκεί και πέρα, αν θες κάτι σαν αυτό: http://www.youtube.com/watch?v=Gteelo-rVM4 Το οποίο πιάνει α)το σημείο εισόδου του χρήστη σε κάθε "πλήκτρο" και β)επιστρέφει ταυτόχρονα το ID (πχ. 1..12) του πλήκτρου αυτού, θα χρειασθεί να μελετήσεις για αρχή τα mouse events του QT (το οποίο σου δίνει έτοιμα πολλά κόλπα σχετικά με αποστάσεις -πχ. Manhattan Length- που θα σου χρειασθούν και για ορισμένα ειδικά gestures, όπως επανάληψη χαρακτήρα κλπ που υλοποιεί το σύστημα που σε ενδιαφέρει). Όμως καθώς δεν δουλεύω πια με QT (με ενδιέφερε για SYMBIAN προγραμματισμό αλλά πλέον έχω μεταβεί σε Android) δεν μπορώ να σε βοηθήσω περαιτέρω στο αμιγώς τεχνικό τμήμα. Το πρόγραμμα που σου δείχνω το έγραψα σε C++ Builder και ήταν υπόθεση 1 ώρας περίπου -μια γρήγορη και πολύ απλή εφαρμογή για να δω ως ένα σημείο το τεχνικό της υπόθεσης σε ένα απλούστατο keyboard -όχι QWERTY. Τέλος, όσον αφορά το λεξικό με τις αποστάσεις κλπ εδώ πρέπει να ασχοληθείς με λεξικογραφικές αναλύσεις κάθε γλώσσας ώστε να στήσεις ένα μοντέλο (κάπου εκεί είναι το ουσιαστικό μυστικό, τα υπόλοιπα είναι σχετικά απλά) αλλά "το πως" είναι κάτι που μάλλον προστατεύεται από κάποια πατέντα και δεν νομίζω να το πει κανείς από τους κατασκευαστές... Καλή συνέχεια!
karabouzouk... Δημοσ. 17 Σεπτεμβρίου 2011 Μέλος Δημοσ. 17 Σεπτεμβρίου 2011 Πάντως αμφότερα τα λεξικά των συσκευών τελικά ανιχνεύουν την επιθυμητή λέξη οπότε ο χρήστης μένει ικανοποιημένος -η δουλειά γίνεται με απλά λόγια. Ναι απλά τα συγκεκριμένα λεξικά που αναφέρεις βασίζονται στα πλήκτρα που πατάς για να προβλέψουν τη λέξη ενώ αυτό που σου έδειξα είναι κάτι σαν να βασίζεται στη "διαδρομή" που ακολουθείς πάνω στο πληκτρολόγιο και γι αυτό ίσως είναι πιο ανεκτικό σε λάθος πατήματα πλήκτρων, γιατί δεν τον ενδιαφέρουν τα πλήκτρα αλλά ο μπούσουλας.. Από εκεί και πέρα, αν θες κάτι σαν αυτό: http://www.youtube.com/watch?v=Gteelo-rVM4 Το οποίο πιάνει α)το σημείο εισόδου του χρήστη σε κάθε "πλήκτρο" και β)επιστρέφει ταυτόχρονα το ID (πχ. 1..12) του πλήκτρου αυτού, θα χρειασθεί να μελετήσεις για αρχή τα mouse events του QT (το οποίο σου δίνει έτοιμα πολλά κόλπα σχετικά με αποστάσεις -πχ. Manhattan Length- που θα σου χρειασθούν και για ορισμένα ειδικά gestures, όπως επανάληψη χαρακτήρα κλπ που υλοποιεί το σύστημα που σε ενδιαφέρει). Εντάξει δε με ενδιαφέρει ακριβώς το σημείο εισόδου σε κάθε πλήκτρο αλλά το σημείο που πατάει ο χρήστης στο εικονικό πληκτρολόγιο.. Όσο για τα mouse events κλπ έχω κατανοήσει πως χρησιμοποιούνται από προηγούμενα προγράμματα και δε νομίζω να είναι πρόβλημα. Όμως καθώς δεν δουλεύω πια με QT (με ενδιέφερε για SYMBIAN προγραμματισμό αλλά πλέον έχω μεταβεί σε Android) δεν μπορώ να σε βοηθήσω περαιτέρω στο αμιγώς τεχνικό τμήμα. Το πρόγραμμα που σου δείχνω το έγραψα σε C++ Builder και ήταν υπόθεση 1 ώρας περίπου -μια γρήγορη και πολύ απλή εφαρμογή για να δω ως ένα σημείο το τεχνικό της υπόθεσης σε ένα απλούστατο keyboard -όχι QWERTY. Πιστεύω όσον αφορά το γενικότερο σκεπτικό που θέλω να αναλύσω για αρχή δεν υπάρχει θέμα με την γλώσσα που θα χρησιμοποιηθεί για την τελική υλοποίηση! Πληροφοριακά και χωρίς να το έχω δοκιμάσει ο ίδιος το Qt έχει γίνει πλέον port και για Android λειτουργικά (που και για μένα αυτά είναι ο στόχος) αλλά αν υλοποιηθεί κάποιος αλγόριθμος που να είναι αποδοτικός το πέρασμα στη Java δε νομίζω να είναι μεγάλο πρόβλημα! Τέλος, όσον αφορά το λεξικό με τις αποστάσεις κλπ εδώ πρέπει να ασχοληθείς με λεξικογραφικές αναλύσεις κάθε γλώσσας ώστε να στήσεις ένα μοντέλο (κάπου εκεί είναι το ουσιαστικό μυστικό, τα υπόλοιπα είναι σχετικά απλά) αλλά "το πως" είναι κάτι που μάλλον προστατεύεται από κάποια πατέντα και δεν νομίζω να το πει κανείς από τους κατασκευαστές... Καλή συνέχεια! Όντως εδώ είναι το ζουμί της υπόθεσης.. τι εννοείς όταν λες "λεξικογραφικές αναλύσεις κάθε γλώσσας..? Και εννοείται ότι δεν περιμένω να βρώ τον έτοιμο κώδικα κάπου...!! Ένας τρόπος που σκέφτομαι είναι να κρατάω από κάθε σημείο την θέση του σχετικά με το προηγούμενο και μετά να υπολογίζω προσεγγιστικά τι γράμμα ήθελε να πατήσει ο χρήστης.. δλδ έχω σημείο1 -> σημείο2 (δεξιά, απόσταση χ, μοίρες ψ) -> σημείο3 (αριστερά, απόσταση χ2, μοίρες ψ2)........ εννοώντας δεξιά από το προηγούμενο, τόση απόσταση και προς αυτή την κατεύθυνση. (το δεξιά-αριστερά είναι περιττό αν χρησιμοποιηθεί σωστά η διεύθυνση πχ 150 μοίρες, αλλά το έγραψα για να γίνω πιο κατανοητός). Σε καμιά 20αριά μέρες που απολύομαι(από το μπουρδέλο που λέγεται Ελλ. στρατός) θα αρχίσω κάποια υλοποίηση αλλά μέχρι τότε θέλω να έχω καταλήξει σε μια πιθανή λύση..! Να σαι καλά!
Directx Δημοσ. 17 Σεπτεμβρίου 2011 Δημοσ. 17 Σεπτεμβρίου 2011 Ναι απλά τα συγκεκριμένα λεξικά που αναφέρεις βασίζονται στα πλήκτρα που πατάς για να προβλέψουν τη λέξη ενώ αυτό που σου έδειξα είναι κάτι σαν να βασίζεται στη "διαδρομή" που ακολουθείς πάνω στο πληκτρολόγιο και γι αυτό ίσως είναι πιο ανεκτικό σε λάθος πατήματα πλήκτρων, γιατί δεν τον ενδιαφέρουν τα πλήκτρα αλλά ο μπούσουλας.. Προσωπικά θεωρώ ότι είναι θέμα λεξικού (άλλωστε το λεξικό του DZ μου είναι αρκετά ανεκτικό), κάθε σημείο κατά την γνώμη μου εκτός από "νεκρό" μπορεί να είναι και ένα "πλήκτρο", εσύ με βάση το που έχεις χτυπήσει υπολογίζεις την πιθανότητα να θέλει το W αντί του Q ή του E αντί του R ο χρήστης, συνυπολογίζοντας και τις υπόλοιπες ποσοστώσεις βγάζεις συμπέρασμα από έναν πίνακα συχνοτήτων (πράμα που μας πάει στο τελικό σου ερώτημα για την "λεξικογραφική" ανάλυση) για το ποίες είναι οι πιθανές ή πιθανή προς σύνταξη λέξη. Πιστεύω όσον αφορά το γενικότερο σκεπτικό που θέλω να αναλύσω για αρχή δεν υπάρχει θέμα με την γλώσσα που θα χρησιμοποιηθεί για την τελική υλοποίηση! Απλά στο ανέφερα διότι παλαιότερα είχα αναρτήσει QT κώδικα για ένα άλλο σου ερώτημα. Πληροφοριακά και χωρίς να το έχω δοκιμάσει ο ίδιος το Qt έχει γίνει πλέον port και για Android λειτουργικά[..] Δεν είναι ακόμα έτοιμο για σοβαρή εργασία. Και εννοείται ότι δεν περιμένω να βρώ τον έτοιμο κώδικα κάπου...!! Δεν είναι θέμα κώδικα αλλά μεθοδολογίας - θα πρέπει να αποδείξεις (αν κάποτε χρειασθεί) ότι η μεθοδολογία σου διαφέρει από την πατενταρισμένη. Όντως εδώ είναι το ζουμί της υπόθεσης.. τι εννοείς όταν λες "λεξικογραφικές αναλύσεις κάθε γλώσσας..? Ένας τρόπος που σκέφτομαι είναι να κρατάω από κάθε σημείο την θέση του σχετικά με το προηγούμενο και μετά να υπολογίζω προσεγγιστικά τι γράμμα ήθελε να πατήσει ο χρήστης.. δλδ έχω σημείο1 -> σημείο2 (δεξιά, απόσταση χ, μοίρες ψ) -> σημείο3 (αριστερά, απόσταση χ2, μοίρες ψ2)........ εννοώντας δεξιά από το προηγούμενο, τόση απόσταση και προς αυτή την κατεύθυνση. (το δεξιά-αριστερά είναι περιττό αν χρησιμοποιηθεί σωστά η διεύθυνση πχ 150 μοίρες, αλλά το έγραψα για να γίνω πιο κατανοητός).[..] Σε πολύ γενικές γραμμές με την έκφραση αυτή εννοώ την ανάλυση των χαρακτηριστικών μιας γλώσσας, τις συχνότητες των γραμμάτων των λέξεων της, το μέγεθος κάθε λέξης, τις ρίζες κάθε λέξης, τις συνηθισμένες αποκλίσεις στον τρόπο γραφής τους, τον υπολογισμό των πιο συνηθισμένων άρα και πιο πιθανών λέξεων ή εκφράσεων, τις ομόηχες λέξεις, κανόνες τονισμού όπου χρειάζεται κλπ. Και τούτα με τρόπο τέτοιο που να δουλεύουν σε διάφορες γλώσσες όχι απαραίτητα Ινδοευρωπαϊκές (ή Ελληνικές -για να μην έχουμε flame με διάφορους γλωσσολόγους ). Με όλα αυτά (ίσως και με ..λιγότερα από αυτά ;-)) μπορείς να έχεις μια καλή ιδέα για το τι θέλει να γράψει ο χρήστης έστω και αν πατά στο περίπου τα γράμματα του πληκτρολογίου του. Καλή τύχη στην προσπάθεια σου, και καλός πολίτης!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.