Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα σας,

 

Προσπαθώ να φτιάξω μια function η οποία θα παίρνει σαν παράμετρο ένα κείμενο text και θα το κάνει "unify". Με τον όρο unify εννοώ πως είτε το text είναι το "Δώσε αριθμό" ή το "Δώσέ άρίθμό", το output θέλω να είναι το "dwse arithmo".

 

Ιδανικά θα ήθελα να μετατρέπει στο ίδιο output "dwse arithmo" και κείμενα με ορθογραφικά λάθη που όμως λογικά είναι το ίδιο, π.χ. "Δόσε αριθμό" αλλά αυτό ίσως να είναι δύσκολο στην ανάπτυξη και την εφαρμογή του.

 

Το όλο πράγμα θα χρησιμοποιηθεί για να προβλέπει λάθη χρηστών κατά την εισαγωγή δεδομένων στην βάση δεδομένων καθώς και για την επιστροφή ποικιλίας δεδομένων. Με άλλα λόγια όταν ο χρήστης δίνει σαν είσοδο "Αβέ", πρέπει να επιστρέφει και "Aβέ" και "Αβε" και "ΑβΕ" κτλπ κτλπ.

 

Δεν ξέρω αν ο τρόπος που σκέφτηκα είναι ο αποδοτικότερος; Έχετε να προτείνετε κάτι?

 

Ευχαριστώ πολύ!!!

Δημοσ.

Η μετατροπή είναι εύκολη, η πρόβλεψη και διόρθωση λαθών όμως δεν είναι απλό πράγμα... Σε τι γλώσσα το φτιάχνεις, μπορεί να υπάρχει ήδη κάποια βιβλιοθήκη για ορθογραφικό έλεγχο.

Δημοσ.

Παλιότερα είχα χρειαστεί την αφαίρεση τόνων η συνάρτηση σε python είναι

def remove_accents(input_str):
    nfkd_form = unicodedata.normalize('NFKD', input_str)
    return u"".join([c for c in nfkd_form if not unicodedata.combining(c)])


input_str='Καλημέρα τι κάνεις καλά είσαι;'
>>> remove_accents(input_str)
'Καλημερα τι κανεις καλα εισαι;'

Τη μετατροπή θα μπορούσες να την κάνεις με ένα dictionary όπου αντιστοιχεις τους ελληνικούς σε λατινικούς

και βάλε τη μετατροπή στην ίδια συνάρτηση δηλαδή

return u"".join([latiniko[c] for c in nfkd......._
Έχει λίγο δουλεία με τα δύο γράμματα ει οι ου ντ μπ κλπ που μεταφράζονται σε ένα 
εκεί νομίζω θα χρειαστείς regular expressions
  • Like 1
Δημοσ.

Το όλο πράγμα θα χρησιμοποιηθεί για να προβλέπει λάθη χρηστών κατά την εισαγωγή δεδομένων στην βάση δεδομένων καθώς και για την επιστροφή ποικιλίας δεδομένων. Με άλλα λόγια όταν ο χρήστης δίνει σαν είσοδο "Αβέ", πρέπει να επιστρέφει και "Aβέ" και "Αβε" και "ΑβΕ" κτλπ κτλπ.

 

Δεν ξέρω αν ο τρόπος που σκέφτηκα είναι ο αποδοτικότερος; Έχετε να προτείνετε κάτι?

 

Γιατί όμως έχεις μπλέξει τα greeklish στην κουβέντα; Δηλαδή στο σενάριο που έχεις στο μυαλό σου, τι θα άλλαζε αν το "Δώσε" και το "Δώσέ" και το "ΔΩςΕ" τα έκανες όλα "δοσε" αντί για "dwse"?

 

Βασικά πρέπει να πεις τελείως ξεκάθαρα ποιός είναι ο σκοπός, αλλιώς μπερδεύεις χωρίς λόγο το πρόβλημα που θες να λύσεις με τη λύση που σου έρχεται (και μπορεί να είναι τελείως λάθος). Πώς θα προβλέπει λάθη χρηστών και θα επιστρέφει ποικιλία δεδομένων δηλαδή; Τι τεχνολογίες χρησιμοποιείς γι' αυτή τη διαδικασία;

Δημοσ.

Αν κατάλαβα και από το username σου με python θες να το κάνεις. Πρέπει πρώτα να ψαχτείς με regular expressions για να παίρνεις και τους τονισμένους χαρακτήρες σε απλούς χωρίς τόνο και αφού το κάνεις, τα μετατρέπεις σε lowercase και τα αντιστοιχείς με ένα λεξικό.

Δημοσ.

Αν κατάλαβα και από το username σου με python θες να το κάνεις. Πρέπει πρώτα να ψαχτείς με regular expressions για να παίρνεις και τους τονισμένους χαρακτήρες σε απλούς χωρίς τόνο και αφού το κάνεις, τα μετατρέπεις σε lowercase και τα αντιστοιχείς με ένα λεξικό.

Hey hey τα μεγάλα πνεύματα συναντώνται.

greek_to_latin={'α': 'a', 'β': 'v', 'γ': 'g', 'δ': 'd', 'ε': 'e', 'ζ': 'z',
                'η': 'h', 'θ': 'th', 'ι': 'i', 'κ': 'k', 'λ': 'l', 'μ': 'm',
                'ν': 'n', 'ξ': 'j', 'ο': 'o', 'π': 'p', 'ρ': 'r', 'σ': 's',
                'τ': 't', 'υ': 'y', 'φ': 'f', 'χ': 'ch', 'ψ': 'ps', 'ω': 'w',
                'Α': 'A', 'Β': 'V', 'Γ': 'G', 'Δ': 'D', 'Ε': 'E', 'Ζ': 'Z',
                'Η': 'H', 'Θ': 'TH', 'Ι': 'I', 'Κ': 'K', 'Λ': 'L', 'Μ': 'M',
                'Ν': 'N', 'Ξ': 'J', 'Ο': 'O', 'Π': 'P', 'Ρ': 'R', 'Σ': 'S',
                'Τ': 'T', 'Υ': 'Y', 'Φ': 'F', 'Χ': 'X', 'Ψ': 'PS', 'Ω': 'W'}


def translate(input_str):
    nfkd_form = unicodedata.normalize('NFKD', input_str)
    return u"".join([greek_to_latin.get(c) if c in greek_to_latin else c for c in nfkd_form if not unicodedata.combining(c)])



translate('Αν κατάλαβα και από το username σου με python θες να το κάνεις. 
Πρέπει πρώτα να ψαχτείς με regular expressions για να παίρνεις και τους 
τονισμένους χαρακτήρες σε απλούς χωρίς τόνο και αφού το κάνεις, 
τα μετατρέπεις σε lowercase και τα αντιστοιχείς με ένα λεξικό.')

'An katalava kai apo to username soy me python theς na to kaneiς. 
Prepei prwta na psachteiς me regular expressions gia na pairneiς kai toyς 
tonismenoyς charakthreς se aployς chwriς tono kai afoy to kaneiς, 
ta metatrepeiς se lowercase kai ta antistoicheiς me ena lejiko.'
>>> 


Έχει και ένας φίλος εδώ μια version αλλά είναι λίγο πολύπλοκη

https://github.com/gschizas/RomanizePython

  • Like 2
Δημοσ.

Γιατί όμως έχεις μπλέξει τα greeklish στην κουβέντα; Δηλαδή στο σενάριο που έχεις στο μυαλό σου, τι θα άλλαζε αν το "Δώσε" και το "Δώσέ" και το "ΔΩςΕ" τα έκανες όλα "δοσε" αντί για "dwse"?

 

Βασικά πρέπει να πεις τελείως ξεκάθαρα ποιός είναι ο σκοπός, αλλιώς μπερδεύεις χωρίς λόγο το πρόβλημα που θες να λύσεις με τη λύση που σου έρχεται (και μπορεί να είναι τελείως λάθος). Πώς θα προβλέπει λάθη χρηστών και θα επιστρέφει ποικιλία δεδομένων δηλαδή; Τι τεχνολογίες χρησιμοποιείς γι' αυτή τη διαδικασία;

 

Καμία ιδιαίτερη διαφορά πέρα από το ότι αν ο άλλος εισάγει greeklish θα του επιστρέψει επίσης το σωστό αποτέλεσμα(μάλλον... :-D  :-D ). Ο σκοπός είναι να αυξήσω την αποδοτικότητα της εφαρμογής όσον'αφορά την αναζήτηση. Να μην χρειάζεται ο χρήστης να εισάγει επακριβώς το περιεχόμενο ενός τίτλου για να το επιστρέψει το αντίστοιχο ή τα αντίστοιχα rows. Έχω έναν πίνακα με 3 columns(id, title, περιεχόμενο).

 

Είμαι νέος στο backend development και ακόμα μαθαίνω τα εργαλεία. Ίσως να υπάρχει κάτι έτοιμο και δεν το ξέρω. Προς το παρόν δουλεύω με Python και Flask/Django.

 

Ευχαριστώ πολύ για τα snippets!

Δημοσ.

@k33theod
ξέχασες το "ς".

@Pythonista

αν το κλειδί είναι ο τίτλος τότε μπορείς να τον κάνεις χωρίς φωνήεντα με κεφαλαία, και μετά μετατροπή με λατινικούς χαρακτήρες. Στην αναζήτηση μπορείς να τσεκάρεις τα φωνήεντα, σε ελληνικά κεφαλαία αν είναι κατά ένα επιτρεπτό ποσοστό ίδια. Ίσως και το τελικό ς να το αφαιρέσεις τελείως από το κλειδί, και να βολεύει!

Δημοσ. (επεξεργασμένο)

@k33theod

ξέχασες το "ς".

Αυτή είναι η free edition στην κανονική με συνδρομή το έχω διορθώσει :-)   Έχω βάλει και το υ να αντιστοιχείζεται με u και όχι y

Επεξ/σία από k33theod
  • Like 2

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...