Δεν είμαι και τόσο καλός με τα regex και αναρωτιέμαι αν μπορεί να γίνει το εξής.
Στα ελληνικά όταν γράφουμε ένα κείμενο και φτάνεις στο τέλος της γραμμής συνεχίζεις στην από κάτω γραμμή. Αν ωστόσο η λέξη δεν χωράει στην πρώτη γραμμή είτε την γράφεις ολόκληρη στην δεύτερη γραμμή είτε την χωρίζεις ανάμεσα στις δυο γραμμές με παύλα.
Ας υποθέσουμε ότι κάνουμε parse ένα pdf με κείμενο που ενδέχεται να περιέχει παύλες για το "σπάσιμο" των λέξεων μεταξύ των γραμμών. Δηλαδή όταν θα κρατάμε το κείμενο σε μια μεταβλητή (variable) θα περιέχει και τις παύλες μέσα.
Ας υποθέσουμε ότι θέλουμε να ψάξουμε κάποιες λέξεις-κλειδιά αν περιέχονται στο κείμενο.
Για παράδειγμα θέλουμε να βρούμε την λέξη "πολυκατοικία". Υπάρχει τρόπος να φτιάξουμε regex που να βρίσκει αυτή την λέξη ακόμα και αν παρεμβάλλεται παύλα σε οποιαδήποτε συλλαβή; Δηλαδή να κάνει match τα εξής:
1. πολυκατοικία
2. πο-λυκατοικία
3. πολυ-κατοικία
4. πολυκα-τοικία
5. πολυκατοι-κία
Στο παρόν σημείο δεν με απασχολούν οι διάφορες μορφές τις λέξεις κατά την κλίση της (πχ πολυκατοικιών).
Αν ενδιαφέρει, η γλώσσα προγραμματισμού είναι C++ (c++11) και με πρόσβαση σε boost και qt.
Εμφάνιση 1-15 από 17
-
02-11-18, 15:50 Regex για λέξεις με παύλες #1Κάνω προσπάθεια να βάζω ; αντι για ?
-
02-11-18, 18:46 Απάντηση: Regex για λέξεις με παύλες #2
βασικά μια εναλλακτική που θα πρότεινα είναι να ξεφορτωθείς αυτό το ενδεχόμενο κατά το parsing του κειμένου, έτσι ώστε να κάνεις search την κανονική λέξη. Ουσιαστικά βρίσκεις πότε το hyphen ακολουθείτε από το τέλος της γραμμής διαβάζεις την επόμενη λέξη τις ενώνεις, και βάζεις το τέλος της γραμμής αμέσως μετά, έτσι ψάχνεις κανονικά την λέξη και όχι όλα τα πιθανά ενδεχόμενα. Ένα παράδειγμα μπορείς να δεις εδώ https://stackoverflow.com/a/43667304/1476932, είναι σε python άλλα πιστεύω εύκολα μπορείς να το μετατρέψεις σε C++.
“The truth is rarely pure and never simple.”― Oscar Wilde
"A man lives three lifes...
The first, ends with the loss of naiveness,
the second, with the loss of innocence
and the third one with the loss of his soul itself.
It's inevitable that we go through all three." ― Dark
-
02-11-18, 21:46 Απάντηση: Regex για λέξεις με παύλες #3
Μπορεί και να έχεις δίκιο. Το είχα σκεφτεί και εγώ. Έχει σημασία το πως είναι "βαλμένο" το κείμενο. Δηλαδή αν στο τέλος της γραμμής που βλέπουμε εμείς οι άνθρωποι έχει πράγματι newline ('\n') χαρακτήρα ή αν απλά το πρόγραμμα που κάνει render το κείμενο αλλάζει γραμμή από μόνο του γιατί δεν χωράει άλλος χαρακτήρας.
Χμμ, θα πρέπει να δω πώς επιστρέφεται το κείμενο από το poppler.Κάνω προσπάθεια να βάζω ; αντι για ?
-
02-11-18, 21:46 Απάντηση: Regex για λέξεις με παύλες #4
Η παύλα (hyphen) είναι ένα πρόβλημα στην ανάλυση κειμένων. Αυτό που ανέφερε ο ThT είναι μία καλή λύση αλλιώς με RegEx μπορεί να καταλήξεις με λέξεις του στυλ "ΑθήναΘεσσαλονίκη".
Ψάξε γενικά για tokenizer και stemming (για μετά) για να δεις υλοποιήσεις όπως του lucene-solr για την υλοποίησή τους.
-
03-11-18, 15:01 Απάντηση: Regex για λέξεις με παύλες #5
Άρα δεν υπάρχει εύκολη λύση εφόσον δεν γίνεται αυτό που λέει ο ThT...
Κάνω προσπάθεια να βάζω ; αντι για ?
-
03-11-18, 19:15 Απάντηση: Regex για λέξεις με παύλες #6
-
05-11-18, 00:08 Απάντηση: Regex για λέξεις με παύλες #7
βασικά αν κατά το parsing δεν μπορείς να βρεις την αλλαγή γραμμής τότε όποια λύση και να επιλέξεις είναι ημίμετρο κατά την γνώμη μου (και δεν βλέπω άλλη εύκολή λύση), οπότε μετά εξαρτάται από 'σένα ποια λύση σε βολεύει να κανείς για το συγκεκριμένο application.
“The truth is rarely pure and never simple.”― Oscar Wilde
"A man lives three lifes...
The first, ends with the loss of naiveness,
the second, with the loss of innocence
and the third one with the loss of his soul itself.
It's inevitable that we go through all three." ― Dark
-
05-11-18, 02:28 Απάντηση: Regex για λέξεις με παύλες #8
Υπάρχουν και οι λύσεις λεξικού, που ψάχνεις αν το αποτέλεσμα της αφαίρεσης ανήκει σε κάποια λέξη ή όχι. Αυτό όμως προϋποθέτει και stemming για την λέξη ώστε να αφαιρέσεις τις καταλήξεις.
-
06-11-18, 21:02 Απάντηση: Regex για λέξεις με παύλες #9
Εχμ δεν ξερω αν λεω μπαρουφα αλλα ας πουμε ψαχνεις τη λεξη "κατι" . Δεν θα μπορουσε να γραφτει η λεξη "-κ-α-τ-ι-" , δηλαδη σαν να λεμε μετα απο καθε ψηφιο να κολλαει και ενα "-" . οποτε δεν σε νοιαζουν καν οι κανονες συλλαβισμου.
Για παραδειγμα το "Αθηνα-Θεσσαλονικη" θα ηταν "-Α-θ-η-ν-α-----Θ-ε-σ-σ-α-λ-ο-ν-ι-κ-η-" και το "κατι αλλο" να γραφτει "-κ-α-τ-ι-- --α-λ-λ-ο-". Στο Αθηνα-Θεσσαλονικη εχεις 5 παυλες τη μια μετα την αλλη (αναμεσα στην παυλα υπαρχουν δυο παυλες , καθε ψηφιο περικλειεται απο δυο παυλες, ενω στη δευτερη περιπτωση εχεις κενο ενδιαμεσα.
-κ-α----
-τ-ι- (Εδω αλλαζει γραμμη και εχεις 4 παυλες στη σειρα στην ιδια γραμμη.
Δεν εχω προσπαθησει να υλοποιησω κατι, αλλα ισως εχει καποια λογικη αυτο που γραφω.
- - - Updated - - -
Μπα βλακειες γραφω, το θεμα ειναι να καταλαβαινει οτι αλλαζει γραμμη ε?
-
07-11-18, 13:55 Απάντηση: Regex για λέξεις με παύλες #10
Στο regex pattern να προσθέτεις μία παύλα για κάθε γράμμα της λέξης που ψάχνεις, σαν π-?ο-?λ-?υ-?κ-?α-?τ-?ο-?ι-?κ-?ί-?α
Δες εδώ: https://regex101.com/r/PomnsY/1
-
07-11-18, 21:27 Απάντηση: Regex για λέξεις με παύλες #11
Έκανα μια μικρή έρευνα και βρήκα τα εξής συμπεράσματα.
(χωρίς να τα επιβεβαίωσω πλήρως με το poppler για pdf parsing).
Το σημάδι της παύλας αντιπροσωπεύεται με αρκετούς διαφορετικούς χαρακτήρες:
1. Τον κοινό χαρακτήρα "hyphen-minus" που υπάρχει και στο πληκτρολόγιο και έχει ASCII code 45 και unicode codepoint U+002D
Αυτόν τον χαρακτήρα παρατήρησα ότι βάζει το libreoffice στα pdf export
2. Τον χαρακτήρα "soft hyphen" με unicode codepoint U+00AD
Αυτόν τον χαρακτήρα παρατήρησα σε κάποια pdf από MS Office αν δεν κάνω λάθος
3. Τον χαρακτήρα hyphen σκέτο, από το hypen-minus, με unicode codepoint U+2010
Επίσης, από ότι κατάλαβα, μετά την παύλα θα έχει πάντα τον χαρακτήρα newline εφόσον τελειώνει εκεί η γραμμή.
Οπότε η λύση είναι να αφαιρέσεις από το string ((hyphen-minus + newline) && (soft hyphen + newline) && (hyphen + newline))
Είναι σχεδόν σίγουρο ότι μετά έχεις ολόκληρες λέξεις και ότι δεν ενώνεις κατά λάθος άσχετες λέξεις.
Βέβαια για να είσαι 100% σίγουρος πρέπει να κάνεις χρήση πιο εξελιγμένων τεχνικών (λεξικά, stemming κλπ). Εγώ για την χρήση που το θέλω καλύπτομαι απόλυτα με την μέθοδο που αναφέρω πιο πάνω.
- - - Updated - - -
Και επειδή το ξέχασα. Ένα σχετικό link για τα hyphen characters από wikipedia: https://en.wikipedia.org/wiki/Hyphen#In_computingΚάνω προσπάθεια να βάζω ; αντι για ?
-
17-11-18, 22:23 Απάντηση: Regex για λέξεις με παύλες #12
Δεν χρειάζεσαι regex για αυτό. Απλό split & search αρκεί.
Θα μπορούσες να ψάξεις αν οι δυο λέξεις που χωρίζονται με παύλα είναι τονισμένες (περιέχουν κάποιο απο τα άέίόύ).
Πχ στην περίπτωση Θεσσαλονίκη-Αθήνα και οι δύο έχουν τόνο. Το ίδιο με άλλες, άνω-κάτω κλπ.
Στην περίπτωση που σπάς την λέξη μόνο η μία έχει τόνο, πχ πολυ-κατοικία.
Πάλι θα έχεις κάποια false positives (πχ με λέξεις με δύο τόνους ή σε comments στο internet) αλλα σε ζητήματα φυσικής γλώσσας ποτέ δεν είσαι 100%. Επίσης μιλάς για PDFs που πιθανότατα θα χουν περάσει κάποιο proofing.
Τα λεξικά δεν θα δούλευαν τόσο καλά στα ελληνικά καθώς έχουμε μεγάλες και σύνθετες λέξεις, σε αντίθεση με τα αγγλικά (πχ στο πολυ-κατικοία είναι και οι δύο λέξεις)
Το newline σου δουλέυει σε δίστυλα;Τελευταία επεξεργασία από το μέλος Eruyome(MMXGN) : 17-11-18 στις 22:31.
-
26-11-18, 19:25 Απάντηση: Regex για λέξεις με παύλες #13
Βασικά αυτό που ήθελα να υλοποιήσω ήταν μια ιδέα με βάση τα pdf των ΦΕΚ από το Εθνικό Τυπογραφείο. Τα οποίο είναι δίστηλα.
Κοίτα τώρα τι παίζει με το pdf format από τα λίγα που κατάλαβα με το poppler. Το format αυτό δεν έχει concept του κειμένου, δηλαδή το πως ρέει φυσικά, πχ από τα αριστερά προς τα δεξιά. Αυτό που το απασχολεί είναι να αποτυπώνει τα glyphs στην τάδε θέση με τις τάδε ιδιότητες (από το τάδε font με τάδε μέγεθος).
Εσύ ή το library πρέπει να φτιάξεις heuristics για να καταλάβεις τα text sections και την σειρά τους. Πχ ένα section η στήλη στα αριστερά που συνεχίζει στην στήλη στα δεξιά (άλλο section) η οποία συνεχίζει στην αριστερή στήλη της επόμενης σελίδας και ούτω καθεξής.
Το poppler έχει 3 documented bindings τα οποία δεν προσφέρουν πολλές λειτουργίες και συνήθως δεν έχουν και το ίδιο progress. πχ το binding για glib προσφέρει περισσότερα API από τα άλλα 2.
Έχει και το δικό του -χωρίς binding- API το οποίο δεν είναι documented.
Δηλαδή πιάσε το αυτό και κούρευ' το.
Ευτυχώς το poppler έρχεται και με κάποια πολύ χρήσιμα utils προγράμματα.
Από αυτά μας ενδιαφέρει το "pdftotext". Αυτό στα ΦΕΚ ξεχωρίζει μια χαρά τις στήλες και φτιάχνει ένα ωραιότατο txt file. Και το καλό είναι ότι από μόνο του φαίνεται να βγάζει τα hyphens στο τέλος των σειρών.
Οπότε η ιδέα μου είναι υλοποιήσιμη πλέον με χρήση του pdftotext αλλά δεν έχω χρόνο να την ολοκληρώσω (πόσες ιδέες έχω αφήσει έτσι...)Κάνω προσπάθεια να βάζω ; αντι για ?
-
27-11-18, 14:49 Απάντηση: Regex για λέξεις με παύλες #14
-
27-11-18, 18:55 Απάντηση: Regex για λέξεις με παύλες #15
Αφού τα δεδομένα σου είναι από το εθνικό τυπογραφείο, γιατί δεν τα παίρνεις σε text μορφή αλλά μπλέκεις με pdf;
- - - Updated - - -
Αν βάλεις απλά να σου φέρει όλα τα ΦΕΚ (πχ τεύχος Α) σου εμφανίζει μόνο το κουμπί για pdf. Αν βάλεις λέξεις κλειδιά όμως σου εμφανίζει για τα ίδια ΦΕΚ και το txt.
- - - Updated - - -
Από τα ΦΕΚ του 1992 υπάρχει η αναζήτηση...
Παρόμοια Θέματα
-
Wind:Αλλαγές σε πακέτα ομιλίας συμβολαίου κινητής ιδιωτών και Καρτοσύνδεσης για κλήσεις με προορισμό την Μεγάλη Βρετανία
Από nnn στο φόρουμ ΕιδήσειςΜηνύματα: 1Τελευταίο Μήνυμα: 13-09-18, 04:23 -
Ζητώ Iphone 7/8 για ανταλλαγή με OP5 JCC+ 8/128
Από automatix στο φόρουμ ΖήτησηΜηνύματα: 0Τελευταίο Μήνυμα: 23-03-18, 18:40 -
Αγορά αριθμομηχανής για υπολογισμούς με μιγαδικούς
Από HugeG στο φόρουμ Εκτός θέματοςΜηνύματα: 4Τελευταίο Μήνυμα: 06-03-18, 22:22 -
Κομισιόν: απαιτούνται πρόσθετες προσπάθειες από τα μέσα κοινωνικής δικτύωσης για συμμόρφωση με τους κανόνες της Ε.Ε.
Από nnn στο φόρουμ ΕιδήσειςΜηνύματα: 1Τελευταίο Μήνυμα: 16-02-18, 03:51 -
Προσωρινή διακοπή των Spectre και Meltdown patches για Windows με επεξεργαστές AMD
Από nnn στο φόρουμ ΕιδήσειςΜηνύματα: 50Τελευταίο Μήνυμα: 15-01-18, 21:11
Bookmarks