[ Index ] |
PHP Cross Reference of Joomla 4.2.2 documentation |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * @package Joomla.Administrator 5 * @subpackage com_finder 6 * 7 * @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org> 8 * @license GNU General Public License version 2 or later; see LICENSE.txt 9 * 10 * The Greek stemmer was adapted for Joomla! 4 by Nicholas K. Dionysopoulos <[email protected]>. This is 11 * derivative work, based on the Greek stemmer for Drupal, see 12 * https://github.com/magaras/greek_stemmer/blob/master/mod_stemmer.php 13 */ 14 15 namespace Joomla\Component\Finder\Administrator\Indexer\Language; 16 17 use Joomla\Component\Finder\Administrator\Indexer\Language; 18 19 // phpcs:disable PSR1.Files.SideEffects 20 \defined('_JEXEC') or die; 21 // phpcs:enable PSR1.Files.SideEffects 22 23 /** 24 * Greek language support class for the Finder indexer package. 25 * 26 * @since 4.0.0 27 */ 28 class El extends Language 29 { 30 /** 31 * Language locale of the class 32 * 33 * @var string 34 * @since 4.0.0 35 */ 36 public $language = 'el'; 37 38 /** 39 * Method to construct the language object. 40 * 41 * @since 4.0.0 42 */ 43 public function __construct($locale = null) 44 { 45 // Override parent constructor since we don't need to load an external stemmer 46 } 47 48 /** 49 * Method to tokenise a text string. It takes into account the odd punctuation commonly used in Greek text, mapping 50 * it to ASCII punctuation. 51 * 52 * Reference: http://www.teicrete.gr/users/kutrulis/Glosika/Stixi.htm 53 * 54 * @param string $input The input to tokenise. 55 * 56 * @return array An array of term strings. 57 * 58 * @since 4.0.0 59 */ 60 public function tokenise($input) 61 { 62 // Replace Greek calligraphic double quotes (various styles) to dumb double quotes 63 $input = str_replace(['“', '”', '„', '«' ,'»'], '"', $input); 64 65 // Replace Greek calligraphic single quotes (various styles) to dumb single quotes 66 $input = str_replace(['‘','’','‚'], "'", $input); 67 68 // Replace the middle dot (ano teleia) with a comma, adequate for the purpose of stemming 69 $input = str_replace('·', ',', $input); 70 71 // Dot and dash (τελεία και παύλα), used to denote the end of a context at the end of a paragraph. 72 $input = str_replace('.–', '.', $input); 73 74 // Ellipsis, two styles (separate dots or single glyph) 75 $input = str_replace(['...', '…'], '.', $input); 76 77 // Cross. Marks the death date of a person. Removed. 78 $input = str_replace('†', '', $input); 79 80 // Star. Reference, supposition word (in philology), birth date of a person. 81 $input = str_replace('*', '', $input); 82 83 // Paragraph. Indicates change of subject. 84 $input = str_replace('§', '.', $input); 85 86 // Plus/minus. Shows approximation. Not relevant for the stemmer, hence its conversion to a space. 87 $input = str_replace('±', ' ', $input); 88 89 return parent::tokenise($input); 90 } 91 92 /** 93 * Method to stem a token. 94 * 95 * @param string $token The token to stem. 96 * 97 * @return string The stemmed token. 98 * 99 * @since 4.0.0 100 */ 101 public function stem($token) 102 { 103 $token = $this->toUpperCase($token, $wCase); 104 105 // Stop-word removal 106 $stop_words = '/^(ΕΚΟ|ΑΒΑ|ΑΓΑ|ΑΓΗ|ΑΓΩ|ΑΔΗ|ΑΔΩ|ΑΕ|ΑΕΙ|ΑΘΩ|ΑΙ|ΑΙΚ|ΑΚΗ|ΑΚΟΜΑ|ΑΚΟΜΗ|ΑΚΡΙΒΩΣ|ΑΛΑ|ΑΛΗΘΕΙΑ|ΑΛΗΘΙΝΑ|ΑΛΛΑΧΟΥ|ΑΛΛΙΩΣ|ΑΛΛΙΩΤΙΚΑ|' 107 . 'ΑΛΛΟΙΩΣ|ΑΛΛΟΙΩΤΙΚΑ|ΑΛΛΟΤΕ|ΑΛΤ|ΑΛΩ|ΑΜΑ|ΑΜΕ|ΑΜΕΣΑ|ΑΜΕΣΩΣ|ΑΜΩ|ΑΝ|ΑΝΑ|ΑΝΑΜΕΣΑ|ΑΝΑΜΕΤΑΞΥ|ΑΝΕΥ|ΑΝΤΙ|ΑΝΤΙΠΕΡΑ|ΑΝΤΙΣ|ΑΝΩ|ΑΝΩΤΕΡΩ|ΑΞΑΦΝΑ|' 108 . 'ΑΠ|ΑΠΕΝΑΝΤΙ|ΑΠΟ|ΑΠΟΨΕ|ΑΠΩ|ΑΡΑ|ΑΡΑΓΕ|ΑΡΕ|ΑΡΚ|ΑΡΚΕΤΑ|ΑΡΛ|ΑΡΜ|ΑΡΤ|ΑΡΥ|ΑΡΩ|ΑΣ|ΑΣΑ|ΑΣΟ|ΑΤΑ|ΑΤΕ|ΑΤΗ|ΑΤΙ|ΑΤΜ|ΑΤΟ|ΑΥΡΙΟ|ΑΦΗ|ΑΦΟΤΟΥ|ΑΦΟΥ|' 109 . 'ΑΧ|ΑΧΕ|ΑΧΟ|ΑΨΑ|ΑΨΕ|ΑΨΗ|ΑΨΥ|ΑΩΕ|ΑΩΟ|ΒΑΝ|ΒΑΤ|ΒΑΧ|ΒΕΑ|ΒΕΒΑΙΟΤΑΤΑ|ΒΗΞ|ΒΙΑ|ΒΙΕ|ΒΙΗ|ΒΙΟ|ΒΟΗ|ΒΟΩ|ΒΡΕ|ΓΑ|ΓΑΒ|ΓΑΡ|ΓΕΝ|ΓΕΣ||ΓΗ|ΓΗΝ|ΓΙ|ΓΙΑ|' 110 . 'ΓΙΕ|ΓΙΝ|ΓΙΟ|ΓΚΙ|ΓΙΑΤΙ|ΓΚΥ|ΓΟΗ|ΓΟΟ|ΓΡΗΓΟΡΑ|ΓΡΙ|ΓΡΥ|ΓΥΗ|ΓΥΡΩ|ΔΑ|ΔΕ|ΔΕΗ|ΔΕΙ|ΔΕΝ|ΔΕΣ|ΔΗ|ΔΗΘΕΝ|ΔΗΛΑΔΗ|ΔΗΩ|ΔΙ|ΔΙΑ|ΔΙΑΡΚΩΣ|ΔΙΟΛΟΥ|ΔΙΣ|' 111 . 'ΔΙΧΩΣ|ΔΟΛ|ΔΟΝ|ΔΡΑ|ΔΡΥ|ΔΡΧ|ΔΥΕ|ΔΥΟ|ΔΩ|ΕΑΜ|ΕΑΝ|ΕΑΡ|ΕΘΗ|ΕΙ|ΕΙΔΕΜΗ|ΕΙΘΕ|ΕΙΜΑΙ|ΕΙΜΑΣΤΕ|ΕΙΝΑΙ|ΕΙΣ|ΕΙΣΑΙ|ΕΙΣΑΣΤΕ|ΕΙΣΤΕ|ΕΙΤΕ|ΕΙΧΑ|ΕΙΧΑΜΕ|' 112 . 'ΕΙΧΑΝ|ΕΙΧΑΤΕ|ΕΙΧΕ|ΕΙΧΕΣ|ΕΚ|ΕΚΕΙ|ΕΛΑ|ΕΛΙ|ΕΜΠ|ΕΝ|ΕΝΤΕΛΩΣ|ΕΝΤΟΣ|ΕΝΤΩΜΕΤΑΞΥ|ΕΝΩ|ΕΞ|ΕΞΑΦΝΑ|ΕΞΙ|ΕΞΙΣΟΥ|ΕΞΩ|ΕΟΚ|ΕΠΑΝΩ|ΕΠΕΙΔΗ|ΕΠΕΙΤΑ|ΕΠΗ|' 113 . 'ΕΠΙ|ΕΠΙΣΗΣ|ΕΠΟΜΕΝΩΣ|ΕΡΑ|ΕΣ|ΕΣΑΣ|ΕΣΕ|ΕΣΕΙΣ|ΕΣΕΝΑ|ΕΣΗ|ΕΣΤΩ|ΕΣΥ|ΕΣΩ|ΕΤΙ|ΕΤΣΙ|ΕΥ|ΕΥΑ|ΕΥΓΕ|ΕΥΘΥΣ|ΕΥΤΥΧΩΣ|ΕΦΕ|ΕΦΕΞΗΣ|ΕΦΤ|ΕΧΕ|ΕΧΕΙ|' 114 . 'ΕΧΕΙΣ|ΕΧΕΤΕ|ΕΧΘΕΣ|ΕΧΟΜΕ|ΕΧΟΥΜΕ|ΕΧΟΥΝ|ΕΧΤΕΣ|ΕΧΩ|ΕΩΣ|ΖΕΑ|ΖΕΗ|ΖΕΙ|ΖΕΝ|ΖΗΝ|ΖΩ|Η|ΗΔΗ|ΗΔΥ|ΗΘΗ|ΗΛΟ|ΗΜΙ|ΗΠΑ|ΗΣΑΣΤΕ|ΗΣΟΥΝ|ΗΤΑ|ΗΤΑΝ|ΗΤΑΝΕ|' 115 . 'ΗΤΟΙ|ΗΤΤΟΝ|ΗΩ|ΘΑ|ΘΥΕ|ΘΩΡ|Ι|ΙΑ|ΙΒΟ|ΙΔΗ|ΙΔΙΩΣ|ΙΕ|ΙΙ|ΙΙΙ|ΙΚΑ|ΙΛΟ|ΙΜΑ|ΙΝΑ|ΙΝΩ|ΙΞΕ|ΙΞΟ|ΙΟ|ΙΟΙ|ΙΣΑ|ΙΣΑΜΕ|ΙΣΕ|ΙΣΗ|ΙΣΙΑ|ΙΣΟ|ΙΣΩΣ|ΙΩΒ|ΙΩΝ|' 116 . 'ΙΩΣ|ΙΑΝ|ΚΑΘ|ΚΑΘΕ|ΚΑΘΕΤΙ|ΚΑΘΟΛΟΥ|ΚΑΘΩΣ|ΚΑΙ|ΚΑΝ|ΚΑΠΟΤΕ|ΚΑΠΟΥ|ΚΑΠΩΣ|ΚΑΤ|ΚΑΤΑ|ΚΑΤΙ|ΚΑΤΙΤΙ|ΚΑΤΟΠΙΝ|ΚΑΤΩ|ΚΑΩ|ΚΒΟ|ΚΕΑ|ΚΕΙ|ΚΕΝ|ΚΙ|ΚΙΜ|' 117 . 'ΚΙΟΛΑΣ|ΚΙΤ|ΚΙΧ|ΚΚΕ|ΚΛΙΣΕ|ΚΛΠ|ΚΟΚ|ΚΟΝΤΑ|ΚΟΧ|ΚΤΛ|ΚΥΡ|ΚΥΡΙΩΣ|ΚΩ|ΚΩΝ|ΛΑ|ΛΕΑ|ΛΕΝ|ΛΕΟ|ΛΙΑ|ΛΙΓΑΚΙ|ΛΙΓΟΥΛΑΚΙ|ΛΙΓΟ|ΛΙΓΩΤΕΡΟ|ΛΙΟ|ΛΙΡ|ΛΟΓΩ|' 118 . 'ΛΟΙΠΑ|ΛΟΙΠΟΝ|ΛΟΣ|ΛΣ|ΛΥΩ|ΜΑ|ΜΑΖΙ|ΜΑΚΑΡΙ|ΜΑΛΙΣΤΑ|ΜΑΛΛΟΝ|ΜΑΝ|ΜΑΞ|ΜΑΣ|ΜΑΤ|ΜΕ|ΜΕΘΑΥΡΙΟ|ΜΕΙ|ΜΕΙΟΝ|ΜΕΛ|ΜΕΛΕΙ|ΜΕΛΛΕΤΑΙ|ΜΕΜΙΑΣ|ΜΕΝ|ΜΕΣ|' 119 . 'ΜΕΣΑ|ΜΕΤ|ΜΕΤΑ|ΜΕΤΑΞΥ|ΜΕΧΡΙ|ΜΗ|ΜΗΔΕ|ΜΗΝ|ΜΗΠΩΣ|ΜΗΤΕ|ΜΙ|ΜΙΞ|ΜΙΣ|ΜΜΕ|ΜΝΑ|ΜΟΒ|ΜΟΛΙΣ|ΜΟΛΟΝΟΤΙ|ΜΟΝΑΧΑ|ΜΟΝΟΜΙΑΣ|ΜΙΑ|ΜΟΥ|ΜΠΑ|ΜΠΟΡΕΙ|' 120 . 'ΜΠΟΡΟΥΝ|ΜΠΡΑΒΟ|ΜΠΡΟΣ|ΜΠΩ|ΜΥ|ΜΥΑ|ΜΥΝ|ΝΑ|ΝΑΕ|ΝΑΙ|ΝΑΟ|ΝΔ|ΝΕΐ|ΝΕΑ|ΝΕΕ|ΝΕΟ|ΝΙ|ΝΙΑ|ΝΙΚ|ΝΙΛ|ΝΙΝ|ΝΙΟ|ΝΤΑ|ΝΤΕ|ΝΤΙ|ΝΤΟ|ΝΥΝ|ΝΩΕ|ΝΩΡΙΣ|ΞΑΝΑ|' 121 . 'ΞΑΦΝΙΚΑ|ΞΕΩ|ΞΙ|Ο|ΟΑ|ΟΑΠ|ΟΔΟ|ΟΕ|ΟΖΟ|ΟΗΕ|ΟΙ|ΟΙΑ|ΟΙΗ|ΟΚΑ|ΟΛΟΓΥΡΑ|ΟΛΟΝΕΝ|ΟΛΟΤΕΛΑ|ΟΛΩΣΔΙΟΛΟΥ|ΟΜΩΣ|ΟΝ|ΟΝΕ|ΟΝΟ|ΟΠΑ|ΟΠΕ|ΟΠΗ|ΟΠΟ|' 122 . 'ΟΠΟΙΑΔΗΠΟΤΕ|ΟΠΟΙΑΝΔΗΠΟΤΕ|ΟΠΟΙΑΣΔΗΠΟΤΕ|ΟΠΟΙΔΗΠΟΤΕ|ΟΠΟΙΕΣΔΗΠΟΤΕ|ΟΠΟΙΟΔΗΠΟΤΕ|ΟΠΟΙΟΝΔΗΠΟΤΕ|ΟΠΟΙΟΣΔΗΠΟΤΕ|ΟΠΟΙΟΥΔΗΠΟΤΕ|ΟΠΟΙΟΥΣΔΗΠΟΤΕ|' 123 . 'ΟΠΟΙΩΝΔΗΠΟΤΕ|ΟΠΟΤΕΔΗΠΟΤΕ|ΟΠΟΥ|ΟΠΟΥΔΗΠΟΤΕ|ΟΠΩΣ|ΟΡΑ|ΟΡΕ|ΟΡΗ|ΟΡΟ|ΟΡΦ|ΟΡΩ|ΟΣΑ|ΟΣΑΔΗΠΟΤΕ|ΟΣΕ|ΟΣΕΣΔΗΠΟΤΕ|ΟΣΗΔΗΠΟΤΕ|ΟΣΗΝΔΗΠΟΤΕ|' 124 . 'ΟΣΗΣΔΗΠΟΤΕ|ΟΣΟΔΗΠΟΤΕ|ΟΣΟΙΔΗΠΟΤΕ|ΟΣΟΝΔΗΠΟΤΕ|ΟΣΟΣΔΗΠΟΤΕ|ΟΣΟΥΔΗΠΟΤΕ|ΟΣΟΥΣΔΗΠΟΤΕ|ΟΣΩΝΔΗΠΟΤΕ|ΟΤΑΝ|ΟΤΕ|ΟΤΙ|ΟΤΙΔΗΠΟΤΕ|ΟΥ|ΟΥΔΕ|ΟΥΚ|ΟΥΣ|' 125 . 'ΟΥΤΕ|ΟΥΦ|ΟΧΙ|ΟΨΑ|ΟΨΕ|ΟΨΗ|ΟΨΙ|ΟΨΟ|ΠΑ|ΠΑΛΙ|ΠΑΝ|ΠΑΝΤΟΤΕ|ΠΑΝΤΟΥ|ΠΑΝΤΩΣ|ΠΑΠ|ΠΑΡ|ΠΑΡΑ|ΠΕΙ|ΠΕΡ|ΠΕΡΑ|ΠΕΡΙ|ΠΕΡΙΠΟΥ|ΠΕΡΣΙ|ΠΕΡΥΣΙ|ΠΕΣ|ΠΙ|' 126 . 'ΠΙΑ|ΠΙΘΑΝΟΝ|ΠΙΚ|ΠΙΟ|ΠΙΣΩ|ΠΙΤ|ΠΙΩ|ΠΛΑΙ|ΠΛΕΟΝ|ΠΛΗΝ|ΠΛΩ|ΠΜ|ΠΟΑ|ΠΟΕ|ΠΟΛ|ΠΟΛΥ|ΠΟΠ|ΠΟΤΕ|ΠΟΥ|ΠΟΥΘΕ|ΠΟΥΘΕΝΑ|ΠΡΕΠΕΙ|ΠΡΙ|ΠΡΙΝ|ΠΡΟ|' 127 . 'ΠΡΟΚΕΙΜΕΝΟΥ|ΠΡΟΚΕΙΤΑΙ|ΠΡΟΠΕΡΣΙ|ΠΡΟΣ|ΠΡΟΤΟΥ|ΠΡΟΧΘΕΣ|ΠΡΟΧΤΕΣ|ΠΡΩΤΥΤΕΡΑ|ΠΥΑ|ΠΥΞ|ΠΥΟ|ΠΥΡ|ΠΧ|ΠΩ|ΠΩΛ|ΠΩΣ|ΡΑ|ΡΑΙ|ΡΑΠ|ΡΑΣ|ΡΕ|ΡΕΑ|ΡΕΕ|ΡΕΙ|' 128 . 'ΡΗΣ|ΡΘΩ|ΡΙΟ|ΡΟ|ΡΟΐ|ΡΟΕ|ΡΟΖ|ΡΟΗ|ΡΟΘ|ΡΟΙ|ΡΟΚ|ΡΟΛ|ΡΟΝ|ΡΟΣ|ΡΟΥ|ΣΑΙ|ΣΑΝ|ΣΑΟ|ΣΑΣ|ΣΕ|ΣΕΙΣ|ΣΕΚ|ΣΕΞ|ΣΕΡ|ΣΕΤ|ΣΕΦ|ΣΗΜΕΡΑ|ΣΙ|ΣΙΑ|ΣΙΓΑ|ΣΙΚ|' 129 . 'ΣΙΧ|ΣΚΙ|ΣΟΙ|ΣΟΚ|ΣΟΛ|ΣΟΝ|ΣΟΣ|ΣΟΥ|ΣΡΙ|ΣΤΑ|ΣΤΗ|ΣΤΗΝ|ΣΤΗΣ|ΣΤΙΣ|ΣΤΟ|ΣΤΟΝ|ΣΤΟΥ|ΣΤΟΥΣ|ΣΤΩΝ|ΣΥ|ΣΥΓΧΡΟΝΩΣ|ΣΥΝ|ΣΥΝΑΜΑ|ΣΥΝΕΠΩΣ|ΣΥΝΗΘΩΣ|' 130 . 'ΣΧΕΔΟΝ|ΣΩΣΤΑ|ΤΑ|ΤΑΔΕ|ΤΑΚ|ΤΑΝ|ΤΑΟ|ΤΑΥ|ΤΑΧΑ|ΤΑΧΑΤΕ|ΤΕ|ΤΕΙ|ΤΕΛ|ΤΕΛΙΚΑ|ΤΕΛΙΚΩΣ|ΤΕΣ|ΤΕΤ|ΤΖΟ|ΤΗ|ΤΗΛ|ΤΗΝ|ΤΗΣ|ΤΙ|ΤΙΚ|ΤΙΜ|ΤΙΠΟΤΑ|ΤΙΠΟΤΕ|' 131 . 'ΤΙΣ|ΤΝΤ|ΤΟ|ΤΟΙ|ΤΟΚ|ΤΟΜ|ΤΟΝ|ΤΟΠ|ΤΟΣ|ΤΟΣ?Ν|ΤΟΣΑ|ΤΟΣΕΣ|ΤΟΣΗ|ΤΟΣΗΝ|ΤΟΣΗΣ|ΤΟΣΟ|ΤΟΣΟΙ|ΤΟΣΟΝ|ΤΟΣΟΣ|ΤΟΣΟΥ|ΤΟΣΟΥΣ|ΤΟΤΕ|ΤΟΥ|ΤΟΥΛΑΧΙΣΤΟ|' 132 . 'ΤΟΥΛΑΧΙΣΤΟΝ|ΤΟΥΣ|ΤΣ|ΤΣΑ|ΤΣΕ|ΤΥΧΟΝ|ΤΩ|ΤΩΝ|ΤΩΡΑ|ΥΑΣ|ΥΒΑ|ΥΒΟ|ΥΙΕ|ΥΙΟ|ΥΛΑ|ΥΛΗ|ΥΝΙ|ΥΠ|ΥΠΕΡ|ΥΠΟ|ΥΠΟΨΗ|ΥΠΟΨΙΝ|ΥΣΤΕΡΑ|ΥΦΗ|ΥΨΗ|ΦΑ|ΦΑΐ|ΦΑΕ|' 133 . 'ΦΑΝ|ΦΑΞ|ΦΑΣ|ΦΑΩ|ΦΕΖ|ΦΕΙ|ΦΕΤΟΣ|ΦΕΥ|ΦΙ|ΦΙΛ|ΦΙΣ|ΦΟΞ|ΦΠΑ|ΦΡΙ|ΧΑ|ΧΑΗ|ΧΑΛ|ΧΑΝ|ΧΑΦ|ΧΕ|ΧΕΙ|ΧΘΕΣ|ΧΙ|ΧΙΑ|ΧΙΛ|ΧΙΟ|ΧΛΜ|ΧΜ|ΧΟΗ|ΧΟΛ|ΧΡΩ|ΧΤΕΣ|' 134 . 'ΧΩΡΙΣ|ΧΩΡΙΣΤΑ|ΨΕΣ|ΨΗΛΑ|ΨΙ|ΨΙΤ|Ω|ΩΑ|ΩΑΣ|ΩΔΕ|ΩΕΣ|ΩΘΩ|ΩΜΑ|ΩΜΕ|ΩΝ|ΩΟ|ΩΟΝ|ΩΟΥ|ΩΣ|ΩΣΑΝ|ΩΣΗ|ΩΣΟΤΟΥ|ΩΣΠΟΥ|ΩΣΤΕ|ΩΣΤΟΣΟ|ΩΤΑ|ΩΧ|ΩΩΝ)$/'; 135 136 if (preg_match($stop_words, $token)) { 137 return $this->toLowerCase($token, $wCase); 138 } 139 140 // Vowels 141 $v = '(Α|Ε|Η|Ι|Ο|Υ|Ω)'; 142 143 // Vowels without Y 144 $v2 = '(Α|Ε|Η|Ι|Ο|Ω)'; 145 146 $test1 = true; 147 148 // Step S1. 14 stems 149 $re = '/^(.+?)(ΙΖΑ|ΙΖΕΣ|ΙΖΕ|ΙΖΑΜΕ|ΙΖΑΤΕ|ΙΖΑΝ|ΙΖΑΝΕ|ΙΖΩ|ΙΖΕΙΣ|ΙΖΕΙ|ΙΖΟΥΜΕ|ΙΖΕΤΕ|ΙΖΟΥΝ|ΙΖΟΥΝΕ)$/'; 150 $exceptS1 = '/^(ΑΝΑΜΠΑ|ΕΜΠΑ|ΕΠΑ|ΞΑΝΑΠΑ|ΠΑ|ΠΕΡΙΠΑ|ΑΘΡΟ|ΣΥΝΑΘΡΟ|ΔΑΝΕ)$/'; 151 $exceptS2 = '/^(ΜΑΡΚ|ΚΟΡΝ|ΑΜΠΑΡ|ΑΡΡ|ΒΑΘΥΡΙ|ΒΑΡΚ|Β|ΒΟΛΒΟΡ|ΓΚΡ|ΓΛΥΚΟΡ|ΓΛΥΚΥΡ|ΙΜΠ|Λ|ΛΟΥ|ΜΑΡ|Μ|ΠΡ|ΜΠΡ|ΠΟΛΥΡ|Π|Ρ|ΠΙΠΕΡΟΡ)$/'; 152 153 if (preg_match($re, $token, $match)) { 154 $token = $match[1]; 155 156 if (preg_match($exceptS1, $token)) { 157 $token = $token . 'I'; 158 } 159 160 if (preg_match($exceptS2, $token)) { 161 $token = $token . 'IΖ'; 162 } 163 164 return $this->toLowerCase($token, $wCase); 165 } 166 167 // Step S2. 7 stems 168 $re = '/^(.+?)(ΩΘΗΚΑ|ΩΘΗΚΕΣ|ΩΘΗΚΕ|ΩΘΗΚΑΜΕ|ΩΘΗΚΑΤΕ|ΩΘΗΚΑΝ|ΩΘΗΚΑΝΕ)$/'; 169 $exceptS1 = '/^(ΑΛ|ΒΙ|ΕΝ|ΥΨ|ΛΙ|ΖΩ|Σ|Χ)$/'; 170 171 if (preg_match($re, $token, $match)) { 172 $token = $match[1]; 173 174 if (preg_match($exceptS1, $token)) { 175 $token = $token . 'ΩΝ'; 176 } 177 178 return $this->toLowerCase($token, $wCase); 179 } 180 181 // Step S3. 7 stems 182 $re = '/^(.+?)(ΙΣΑ|ΙΣΕΣ|ΙΣΕ|ΙΣΑΜΕ|ΙΣΑΤΕ|ΙΣΑΝ|ΙΣΑΝΕ)$/'; 183 $exceptS1 = '/^(ΑΝΑΜΠΑ|ΑΘΡΟ|ΕΜΠΑ|ΕΣΕ|ΕΣΩΚΛΕ|ΕΠΑ|ΞΑΝΑΠΑ|ΕΠΕ|ΠΕΡΙΠΑ|ΑΘΡΟ|ΣΥΝΑΘΡΟ|ΔΑΝΕ|ΚΛΕ|ΧΑΡΤΟΠΑ|ΕΞΑΡΧΑ|ΜΕΤΕΠΕ|ΑΠΟΚΛΕ|ΑΠΕΚΛΕ|ΕΚΛΕ|ΠΕ|ΠΕΡΙΠΑ)$/'; 184 $exceptS2 = '/^(ΑΝ|ΑΦ|ΓΕ|ΓΙΓΑΝΤΟΑΦ|ΓΚΕ|ΔΗΜΟΚΡΑΤ|ΚΟΜ|ΓΚ|Μ|Π|ΠΟΥΚΑΜ|ΟΛΟ|ΛΑΡ)$/'; 185 186 if ($token == "ΙΣΑ") { 187 $token = "ΙΣ"; 188 189 return $token; 190 } 191 192 if (preg_match($re, $token, $match)) { 193 $token = $match[1]; 194 195 if (preg_match($exceptS1, $token)) { 196 $token = $token . 'Ι'; 197 } 198 199 if (preg_match($exceptS2, $token)) { 200 $token = $token . 'ΙΣ'; 201 } 202 203 return $this->toLowerCase($token, $wCase); 204 } 205 206 // Step S4. 7 stems 207 $re = '/^(.+?)(ΙΣΩ|ΙΣΕΙΣ|ΙΣΕΙ|ΙΣΟΥΜΕ|ΙΣΕΤΕ|ΙΣΟΥΝ|ΙΣΟΥΝΕ)$/'; 208 $exceptS1 = '/^(ΑΝΑΜΠΑ|ΕΜΠΑ|ΕΣΕ|ΕΣΩΚΛΕ|ΕΠΑ|ΞΑΝΑΠΑ|ΕΠΕ|ΠΕΡΙΠΑ|ΑΘΡΟ|ΣΥΝΑΘΡΟ|ΔΑΝΕ|ΚΛΕ|ΧΑΡΤΟΠΑ|ΕΞΑΡΧΑ|ΜΕΤΕΠΕ|ΑΠΟΚΛΕ|ΑΠΕΚΛΕ|ΕΚΛΕ|ΠΕ|ΠΕΡΙΠΑ)$/'; 209 210 if (preg_match($re, $token, $match)) { 211 $token = $match[1]; 212 213 if (preg_match($exceptS1, $token)) { 214 $token = $token . 'Ι'; 215 } 216 217 return $this->toLowerCase($token, $wCase); 218 } 219 220 // Step S5. 11 stems 221 $re = '/^(.+?)(ΙΣΤΟΣ|ΙΣΤΟΥ|ΙΣΤΟ|ΙΣΤΕ|ΙΣΤΟΙ|ΙΣΤΩΝ|ΙΣΤΟΥΣ|ΙΣΤΗ|ΙΣΤΗΣ|ΙΣΤΑ|ΙΣΤΕΣ)$/'; 222 $exceptS1 = '/^(Μ|Π|ΑΠ|ΑΡ|ΗΔ|ΚΤ|ΣΚ|ΣΧ|ΥΨ|ΦΑ|ΧΡ|ΧΤ|ΑΚΤ|ΑΟΡ|ΑΣΧ|ΑΤΑ|ΑΧΝ|ΑΧΤ|ΓΕΜ|ΓΥΡ|ΕΜΠ|ΕΥΠ|ΕΧΘ|ΗΦΑ|ΚΑΘ|ΚΑΚ|ΚΥΛ|ΛΥΓ|ΜΑΚ|ΜΕΓ|ΤΑΧ|ΦΙΛ|ΧΩΡ)$/'; 223 $exceptS2 = '/^(ΔΑΝΕ|ΣΥΝΑΘΡΟ|ΚΛΕ|ΣΕ|ΕΣΩΚΛΕ|ΑΣΕ|ΠΛΕ)$/'; 224 225 if (preg_match($re, $token, $match)) { 226 $token = $match[1]; 227 228 if (preg_match($exceptS1, $token)) { 229 $token = $token . 'ΙΣΤ'; 230 } 231 232 if (preg_match($exceptS2, $token)) { 233 $token = $token . 'Ι'; 234 } 235 236 return $this->toLowerCase($token, $wCase); 237 } 238 239 // Step S6. 6 stems 240 $re = '/^(.+?)(ΙΣΜΟ|ΙΣΜΟΙ|ΙΣΜΟΣ|ΙΣΜΟΥ|ΙΣΜΟΥΣ|ΙΣΜΩΝ)$/'; 241 $exceptS1 = '/^(ΑΓΝΩΣΤΙΚ|ΑΤΟΜΙΚ|ΓΝΩΣΤΙΚ|ΕΘΝΙΚ|ΕΚΛΕΚΤΙΚ|ΣΚΕΠΤΙΚ|ΤΟΠΙΚ)$/'; 242 $exceptS2 = '/^(ΣΕ|ΜΕΤΑΣΕ|ΜΙΚΡΟΣΕ|ΕΓΚΛΕ|ΑΠΟΚΛΕ)$/'; 243 $exceptS3 = '/^(ΔΑΝΕ|ΑΝΤΙΔΑΝΕ)$/'; 244 $exceptS4 = '/^(ΑΛΕΞΑΝΔΡΙΝ|ΒΥΖΑΝΤΙΝ|ΘΕΑΤΡΙΝ)$/'; 245 246 if (preg_match($re, $token, $match)) { 247 $token = $match[1]; 248 249 if (preg_match($exceptS1, $token)) { 250 $token = str_replace('ΙΚ', "", $token); 251 } 252 253 if (preg_match($exceptS2, $token)) { 254 $token = $token . "ΙΣΜ"; 255 } 256 257 if (preg_match($exceptS3, $token)) { 258 $token = $token . "Ι"; 259 } 260 261 if (preg_match($exceptS4, $token)) { 262 $token = str_replace('ΙΝ', "", $token); 263 } 264 265 return $this->toLowerCase($token, $wCase); 266 } 267 268 // Step S7. 4 stems 269 $re = '/^(.+?)(ΑΡΑΚΙ|ΑΡΑΚΙΑ|ΟΥΔΑΚΙ|ΟΥΔΑΚΙΑ)$/'; 270 $exceptS1 = '/^(Σ|Χ)$/'; 271 272 if (preg_match($re, $token, $match)) { 273 $token = $match[1]; 274 275 if (preg_match($exceptS1, $token)) { 276 $token = $token . "AΡΑΚ"; 277 } 278 279 return $this->toLowerCase($token, $wCase); 280 } 281 282 // Step S8. 8 stems 283 $re = '/^(.+?)(ΑΚΙ|ΑΚΙΑ|ΙΤΣΑ|ΙΤΣΑΣ|ΙΤΣΕΣ|ΙΤΣΩΝ|ΑΡΑΚΙ|ΑΡΑΚΙΑ)$/'; 284 $exceptS1 = '/^(ΑΝΘΡ|ΒΑΜΒ|ΒΡ|ΚΑΙΜ|ΚΟΝ|ΚΟΡ|ΛΑΒΡ|ΛΟΥΛ|ΜΕΡ|ΜΟΥΣΤ|ΝΑΓΚΑΣ|ΠΛ|Ρ|ΡΥ|Σ|ΣΚ|ΣΟΚ|ΣΠΑΝ|ΤΖ|ΦΑΡΜ|Χ|' 285 . 'ΚΑΠΑΚ|ΑΛΙΣΦ|ΑΜΒΡ|ΑΝΘΡ|Κ|ΦΥΛ|ΚΑΤΡΑΠ|ΚΛΙΜ|ΜΑΛ|ΣΛΟΒ|Φ|ΣΦ|ΤΣΕΧΟΣΛΟΒ)$/'; 286 $exceptS2 = '/^(Β|ΒΑΛ|ΓΙΑΝ|ΓΛ|Ζ|ΗΓΟΥΜΕΝ|ΚΑΡΔ|ΚΟΝ|ΜΑΚΡΥΝ|ΝΥΦ|ΠΑΤΕΡ|Π|ΣΚ|ΤΟΣ|ΤΡΙΠΟΛ)$/'; 287 288 // For words like ΠΛΟΥΣΙΟΚΟΡΙΤΣΑ, ΠΑΛΙΟΚΟΡΙΤΣΑ etc 289 $exceptS3 = '/(ΚΟΡ)$/'; 290 291 if (preg_match($re, $token, $match)) { 292 $token = $match[1]; 293 294 if (preg_match($exceptS1, $token)) { 295 $token = $token . "ΑΚ"; 296 } 297 298 if (preg_match($exceptS2, $token)) { 299 $token = $token . "ΙΤΣ"; 300 } 301 302 if (preg_match($exceptS3, $token)) { 303 $token = $token . "ΙΤΣ"; 304 } 305 306 return $this->toLowerCase($token, $wCase); 307 } 308 309 // Step S9. 3 stems 310 $re = '/^(.+?)(ΙΔΙΟ|ΙΔΙΑ|ΙΔΙΩΝ)$/'; 311 $exceptS1 = '/^(ΑΙΦΝ|ΙΡ|ΟΛΟ|ΨΑΛ)$/'; 312 $exceptS2 = '/(Ε|ΠΑΙΧΝ)$/'; 313 314 if (preg_match($re, $token, $match)) { 315 $token = $match[1]; 316 317 if (preg_match($exceptS1, $token)) { 318 $token = $token . "ΙΔ"; 319 } 320 321 if (preg_match($exceptS2, $token)) { 322 $token = $token . "ΙΔ"; 323 } 324 325 return $this->toLowerCase($token, $wCase); 326 } 327 328 // Step S10. 4 stems 329 $re = '/^(.+?)(ΙΣΚΟΣ|ΙΣΚΟΥ|ΙΣΚΟ|ΙΣΚΕ)$/'; 330 $exceptS1 = '/^(Δ|ΙΒ|ΜΗΝ|Ρ|ΦΡΑΓΚ|ΛΥΚ|ΟΒΕΛ)$/'; 331 332 if (preg_match($re, $token, $match)) { 333 $token = $match[1]; 334 335 if (preg_match($exceptS1, $token)) { 336 $token = $token . "ΙΣΚ"; 337 } 338 339 return $this->toLowerCase($token, $wCase); 340 } 341 342 // Step 1 343 // step1list is used in Step 1. 41 stems 344 $step1list = array(); 345 $step1list["ΦΑΓΙΑ"] = "ΦΑ"; 346 $step1list["ΦΑΓΙΟΥ"] = "ΦΑ"; 347 $step1list["ΦΑΓΙΩΝ"] = "ΦΑ"; 348 $step1list["ΣΚΑΓΙΑ"] = "ΣΚΑ"; 349 $step1list["ΣΚΑΓΙΟΥ"] = "ΣΚΑ"; 350 $step1list["ΣΚΑΓΙΩΝ"] = "ΣΚΑ"; 351 $step1list["ΟΛΟΓΙΟΥ"] = "ΟΛΟ"; 352 $step1list["ΟΛΟΓΙΑ"] = "ΟΛΟ"; 353 $step1list["ΟΛΟΓΙΩΝ"] = "ΟΛΟ"; 354 $step1list["ΣΟΓΙΟΥ"] = "ΣΟ"; 355 $step1list["ΣΟΓΙΑ"] = "ΣΟ"; 356 $step1list["ΣΟΓΙΩΝ"] = "ΣΟ"; 357 $step1list["ΤΑΤΟΓΙΑ"] = "ΤΑΤΟ"; 358 $step1list["ΤΑΤΟΓΙΟΥ"] = "ΤΑΤΟ"; 359 $step1list["ΤΑΤΟΓΙΩΝ"] = "ΤΑΤΟ"; 360 $step1list["ΚΡΕΑΣ"] = "ΚΡΕ"; 361 $step1list["ΚΡΕΑΤΟΣ"] = "ΚΡΕ"; 362 $step1list["ΚΡΕΑΤΑ"] = "ΚΡΕ"; 363 $step1list["ΚΡΕΑΤΩΝ"] = "ΚΡΕ"; 364 $step1list["ΠΕΡΑΣ"] = "ΠΕΡ"; 365 $step1list["ΠΕΡΑΤΟΣ"] = "ΠΕΡ"; 366 367 // Added by Spyros. Also at $re in step1 368 $step1list["ΠΕΡΑΤΗ"] = "ΠΕΡ"; 369 $step1list["ΠΕΡΑΤΑ"] = "ΠΕΡ"; 370 $step1list["ΠΕΡΑΤΩΝ"] = "ΠΕΡ"; 371 $step1list["ΤΕΡΑΣ"] = "ΤΕΡ"; 372 $step1list["ΤΕΡΑΤΟΣ"] = "ΤΕΡ"; 373 $step1list["ΤΕΡΑΤΑ"] = "ΤΕΡ"; 374 $step1list["ΤΕΡΑΤΩΝ"] = "ΤΕΡ"; 375 $step1list["ΦΩΣ"] = "ΦΩ"; 376 $step1list["ΦΩΤΟΣ"] = "ΦΩ"; 377 $step1list["ΦΩΤΑ"] = "ΦΩ"; 378 $step1list["ΦΩΤΩΝ"] = "ΦΩ"; 379 $step1list["ΚΑΘΕΣΤΩΣ"] = "ΚΑΘΕΣΤ"; 380 $step1list["ΚΑΘΕΣΤΩΤΟΣ"] = "ΚΑΘΕΣΤ"; 381 $step1list["ΚΑΘΕΣΤΩΤΑ"] = "ΚΑΘΕΣΤ"; 382 $step1list["ΚΑΘΕΣΤΩΤΩΝ"] = "ΚΑΘΕΣΤ"; 383 $step1list["ΓΕΓΟΝΟΣ"] = "ΓΕΓΟΝ"; 384 $step1list["ΓΕΓΟΝΟΤΟΣ"] = "ΓΕΓΟΝ"; 385 $step1list["ΓΕΓΟΝΟΤΑ"] = "ΓΕΓΟΝ"; 386 $step1list["ΓΕΓΟΝΟΤΩΝ"] = "ΓΕΓΟΝ"; 387 388 $re = '/(.*)(ΦΑΓΙΑ|ΦΑΓΙΟΥ|ΦΑΓΙΩΝ|ΣΚΑΓΙΑ|ΣΚΑΓΙΟΥ|ΣΚΑΓΙΩΝ|ΟΛΟΓΙΟΥ|ΟΛΟΓΙΑ|ΟΛΟΓΙΩΝ|ΣΟΓΙΟΥ|ΣΟΓΙΑ|ΣΟΓΙΩΝ|ΤΑΤΟΓΙΑ|ΤΑΤΟΓΙΟΥ|ΤΑΤΟΓΙΩΝ|ΚΡΕΑΣ|ΚΡΕΑΤΟΣ|' 389 . 'ΚΡΕΑΤΑ|ΚΡΕΑΤΩΝ|ΠΕΡΑΣ|ΠΕΡΑΤΟΣ|ΠΕΡΑΤΗ|ΠΕΡΑΤΑ|ΠΕΡΑΤΩΝ|ΤΕΡΑΣ|ΤΕΡΑΤΟΣ|ΤΕΡΑΤΑ|ΤΕΡΑΤΩΝ|ΦΩΣ|ΦΩΤΟΣ|ΦΩΤΑ|ΦΩΤΩΝ|ΚΑΘΕΣΤΩΣ|ΚΑΘΕΣΤΩΤΟΣ|' 390 . 'ΚΑΘΕΣΤΩΤΑ|ΚΑΘΕΣΤΩΤΩΝ|ΓΕΓΟΝΟΣ|ΓΕΓΟΝΟΤΟΣ|ΓΕΓΟΝΟΤΑ|ΓΕΓΟΝΟΤΩΝ)$/'; 391 392 if (preg_match($re, $token, $match)) { 393 $stem = $match[1]; 394 $suffix = $match[2]; 395 $token = $stem . (array_key_exists($suffix, $step1list) ? $step1list[$suffix] : ''); 396 $test1 = false; 397 } 398 399 // Step 2a. 2 stems 400 $re = '/^(.+?)(ΑΔΕΣ|ΑΔΩΝ)$/'; 401 402 if (preg_match($re, $token, $match)) { 403 $token = $match[1]; 404 $re = '/(ΟΚ|ΜΑΜ|ΜΑΝ|ΜΠΑΜΠ|ΠΑΤΕΡ|ΓΙΑΓΙ|ΝΤΑΝΤ|ΚΥΡ|ΘΕΙ|ΠΕΘΕΡ)$/'; 405 406 if (!preg_match($re, $token)) { 407 $token = $token . "ΑΔ"; 408 } 409 } 410 411 // Step 2b. 2 stems 412 $re = '/^(.+?)(ΕΔΕΣ|ΕΔΩΝ)$/'; 413 414 if (preg_match($re, $token)) { 415 preg_match($re, $token, $match); 416 $token = $match[1]; 417 $exept2 = '/(ΟΠ|ΙΠ|ΕΜΠ|ΥΠ|ΓΗΠ|ΔΑΠ|ΚΡΑΣΠ|ΜΙΛ)$/'; 418 419 if (preg_match($exept2, $token)) { 420 $token = $token . 'ΕΔ'; 421 } 422 } 423 424 // Step 2c 425 $re = '/^(.+?)(ΟΥΔΕΣ|ΟΥΔΩΝ)$/'; 426 427 if (preg_match($re, $token)) { 428 preg_match($re, $token, $match); 429 $token = $match[1]; 430 431 $exept3 = '/(ΑΡΚ|ΚΑΛΙΑΚ|ΠΕΤΑΛ|ΛΙΧ|ΠΛΕΞ|ΣΚ|Σ|ΦΛ|ΦΡ|ΒΕΛ|ΛΟΥΛ|ΧΝ|ΣΠ|ΤΡΑΓ|ΦΕ)$/'; 432 433 if (preg_match($exept3, $token)) { 434 $token = $token . 'ΟΥΔ'; 435 } 436 } 437 438 // Step 2d 439 $re = '/^(.+?)(ΕΩΣ|ΕΩΝ)$/'; 440 441 if (preg_match($re, $token)) { 442 preg_match($re, $token, $match); 443 $token = $match[1]; 444 $test1 = false; 445 $exept4 = '/^(Θ|Δ|ΕΛ|ΓΑΛ|Ν|Π|ΙΔ|ΠΑΡ)$/'; 446 447 if (preg_match($exept4, $token)) { 448 $token = $token . 'Ε'; 449 } 450 } 451 452 // Step 3 453 $re = '/^(.+?)(ΙΑ|ΙΟΥ|ΙΩΝ)$/'; 454 455 if (preg_match($re, $token, $fp)) { 456 $stem = $fp[1]; 457 $token = $stem; 458 $re = '/' . $v . '$/'; 459 $test1 = false; 460 461 if (preg_match($re, $token)) { 462 $token = $stem . 'Ι'; 463 } 464 } 465 466 // Step 4 467 $re = '/^(.+?)(ΙΚΑ|ΙΚΟ|ΙΚΟΥ|ΙΚΩΝ)$/'; 468 469 if (preg_match($re, $token)) { 470 preg_match($re, $token, $match); 471 $token = $match[1]; 472 $test1 = false; 473 $re = '/' . $v . '$/'; 474 $exept5 = '/^(ΑΛ|ΑΔ|ΕΝΔ|ΑΜΑΝ|ΑΜΜΟΧΑΛ|ΗΘ|ΑΝΗΘ|ΑΝΤΙΔ|ΦΥΣ|ΒΡΩΜ|ΓΕΡ|ΕΞΩΔ|ΚΑΛΠ|ΚΑΛΛΙΝ|ΚΑΤΑΔ|ΜΟΥΛ|ΜΠΑΝ|ΜΠΑΓΙΑΤ|ΜΠΟΛ|ΜΠΟΣ|ΝΙΤ|ΞΙΚ|ΣΥΝΟΜΗΛ|ΠΕΤΣ|' 475 . 'ΠΙΤΣ|ΠΙΚΑΝΤ|ΠΛΙΑΤΣ|ΠΟΣΤΕΛΝ|ΠΡΩΤΟΔ|ΣΕΡΤ|ΣΥΝΑΔ|ΤΣΑΜ|ΥΠΟΔ|ΦΙΛΟΝ|ΦΥΛΟΔ|ΧΑΣ)$/'; 476 477 if (preg_match($re, $token) || preg_match($exept5, $token)) { 478 $token = $token . 'ΙΚ'; 479 } 480 } 481 482 // Step 5a 483 $re = '/^(.+?)(ΑΜΕ)$/'; 484 $re2 = '/^(.+?)(ΑΓΑΜΕ|ΗΣΑΜΕ|ΟΥΣΑΜΕ|ΗΚΑΜΕ|ΗΘΗΚΑΜΕ)$/'; 485 486 if ($token == "ΑΓΑΜΕ") { 487 $token = "ΑΓΑΜ"; 488 } 489 490 if (preg_match($re2, $token)) { 491 preg_match($re2, $token, $match); 492 $token = $match[1]; 493 $test1 = false; 494 } 495 496 if (preg_match($re, $token)) { 497 preg_match($re, $token, $match); 498 $token = $match[1]; 499 $test1 = false; 500 $exept6 = '/^(ΑΝΑΠ|ΑΠΟΘ|ΑΠΟΚ|ΑΠΟΣΤ|ΒΟΥΒ|ΞΕΘ|ΟΥΛ|ΠΕΘ|ΠΙΚΡ|ΠΟΤ|ΣΙΧ|Χ)$/'; 501 502 if (preg_match($exept6, $token)) { 503 $token = $token . "ΑΜ"; 504 } 505 } 506 507 // Step 5b 508 $re2 = '/^(.+?)(ΑΝΕ)$/'; 509 $re3 = '/^(.+?)(ΑΓΑΝΕ|ΗΣΑΝΕ|ΟΥΣΑΝΕ|ΙΟΝΤΑΝΕ|ΙΟΤΑΝΕ|ΙΟΥΝΤΑΝΕ|ΟΝΤΑΝΕ|ΟΤΑΝΕ|ΟΥΝΤΑΝΕ|ΗΚΑΝΕ|ΗΘΗΚΑΝΕ)$/'; 510 511 if (preg_match($re3, $token)) { 512 preg_match($re3, $token, $match); 513 $token = $match[1]; 514 $test1 = false; 515 $re3 = '/^(ΤΡ|ΤΣ)$/'; 516 517 if (preg_match($re3, $token)) { 518 $token = $token . "ΑΓΑΝ"; 519 } 520 } 521 522 if (preg_match($re2, $token)) { 523 preg_match($re2, $token, $match); 524 $token = $match[1]; 525 $test1 = false; 526 $re2 = '/' . $v2 . '$/'; 527 $exept7 = '/^(ΒΕΤΕΡ|ΒΟΥΛΚ|ΒΡΑΧΜ|Γ|ΔΡΑΔΟΥΜ|Θ|ΚΑΛΠΟΥΖ|ΚΑΣΤΕΛ|ΚΟΡΜΟΡ|ΛΑΟΠΛ|ΜΩΑΜΕΘ|Μ|ΜΟΥΣΟΥΛΜ|Ν|ΟΥΛ|Π|ΠΕΛΕΚ|ΠΛ|ΠΟΛΙΣ|ΠΟΡΤΟΛ|ΣΑΡΑΚΑΤΣ|ΣΟΥΛΤ|' 528 . 'ΤΣΑΡΛΑΤ|ΟΡΦ|ΤΣΙΓΓ|ΤΣΟΠ|ΦΩΤΟΣΤΕΦ|Χ|ΨΥΧΟΠΛ|ΑΓ|ΟΡΦ|ΓΑΛ|ΓΕΡ|ΔΕΚ|ΔΙΠΛ|ΑΜΕΡΙΚΑΝ|ΟΥΡ|ΠΙΘ|ΠΟΥΡΙΤ|Σ|ΖΩΝΤ|ΙΚ|ΚΑΣΤ|ΚΟΠ|ΛΙΧ|ΛΟΥΘΗΡ|ΜΑΙΝΤ|' 529 . 'ΜΕΛ|ΣΙΓ|ΣΠ|ΣΤΕΓ|ΤΡΑΓ|ΤΣΑΓ|Φ|ΕΡ|ΑΔΑΠ|ΑΘΙΓΓ|ΑΜΗΧ|ΑΝΙΚ|ΑΝΟΡΓ|ΑΠΗΓ|ΑΠΙΘ|ΑΤΣΙΓΓ|ΒΑΣ|ΒΑΣΚ|ΒΑΘΥΓΑΛ|ΒΙΟΜΗΧ|ΒΡΑΧΥΚ|ΔΙΑΤ|ΔΙΑΦ|ΕΝΟΡΓ|' 530 . 'ΘΥΣ|ΚΑΠΝΟΒΙΟΜΗΧ|ΚΑΤΑΓΑΛ|ΚΛΙΒ|ΚΟΙΛΑΡΦ|ΛΙΒ|ΜΕΓΛΟΒΙΟΜΗΧ|ΜΙΚΡΟΒΙΟΜΗΧ|ΝΤΑΒ|ΞΗΡΟΚΛΙΒ|ΟΛΙΓΟΔΑΜ|ΟΛΟΓΑΛ|ΠΕΝΤΑΡΦ|ΠΕΡΗΦ|ΠΕΡΙΤΡ|ΠΛΑΤ|' 531 . 'ΠΟΛΥΔΑΠ|ΠΟΛΥΜΗΧ|ΣΤΕΦ|ΤΑΒ|ΤΕΤ|ΥΠΕΡΗΦ|ΥΠΟΚΟΠ|ΧΑΜΗΛΟΔΑΠ|ΨΗΛΟΤΑΒ)$/'; 532 533 if (preg_match($re2, $token) || preg_match($exept7, $token)) { 534 $token = $token . "ΑΝ"; 535 } 536 } 537 538 // Step 5c 539 $re3 = '/^(.+?)(ΕΤΕ)$/'; 540 $re4 = '/^(.+?)(ΗΣΕΤΕ)$/'; 541 542 if (preg_match($re4, $token)) { 543 preg_match($re4, $token, $match); 544 $token = $match[1]; 545 $test1 = false; 546 } 547 548 if (preg_match($re3, $token)) { 549 preg_match($re3, $token, $match); 550 $token = $match[1]; 551 $test1 = false; 552 $re3 = '/' . $v2 . '$/'; 553 $exept8 = '/(ΟΔ|ΑΙΡ|ΦΟΡ|ΤΑΘ|ΔΙΑΘ|ΣΧ|ΕΝΔ|ΕΥΡ|ΤΙΘ|ΥΠΕΡΘ|ΡΑΘ|ΕΝΘ|ΡΟΘ|ΣΘ|ΠΥΡ|ΑΙΝ|ΣΥΝΔ|ΣΥΝ|ΣΥΝΘ|ΧΩΡ|ΠΟΝ|ΒΡ|ΚΑΘ|ΕΥΘ|ΕΚΘ|ΝΕΤ|ΡΟΝ|ΑΡΚ|ΒΑΡ|ΒΟΛ|ΩΦΕΛ)$/'; 554 $exept9 = '/^(ΑΒΑΡ|ΒΕΝ|ΕΝΑΡ|ΑΒΡ|ΑΔ|ΑΘ|ΑΝ|ΑΠΛ|ΒΑΡΟΝ|ΝΤΡ|ΣΚ|ΚΟΠ|ΜΠΟΡ|ΝΙΦ|ΠΑΓ|ΠΑΡΑΚΑΛ|ΣΕΡΠ|ΣΚΕΛ|ΣΥΡΦ|ΤΟΚ|Υ|Δ|ΕΜ|ΘΑΡΡ|Θ)$/'; 555 556 if (preg_match($re3, $token) || preg_match($exept8, $token) || preg_match($exept9, $token)) { 557 $token = $token . "ΕΤ"; 558 } 559 } 560 561 // Step 5d 562 $re = '/^(.+?)(ΟΝΤΑΣ|ΩΝΤΑΣ)$/'; 563 564 if (preg_match($re, $token)) { 565 preg_match($re, $token, $match); 566 $token = $match[1]; 567 $test1 = false; 568 $exept10 = '/^(ΑΡΧ)$/'; 569 $exept11 = '/(ΚΡΕ)$/'; 570 571 if (preg_match($exept10, $token)) { 572 $token = $token . "ΟΝΤ"; 573 } 574 575 if (preg_match($exept11, $token)) { 576 $token = $token . "ΩΝΤ"; 577 } 578 } 579 580 // Step 5e 581 $re = '/^(.+?)(ΟΜΑΣΤΕ|ΙΟΜΑΣΤΕ)$/'; 582 583 if (preg_match($re, $token)) { 584 preg_match($re, $token, $match); 585 $token = $match[1]; 586 $test1 = false; 587 $exept11 = '/^(ΟΝ)$/'; 588 589 if (preg_match($exept11, $token)) { 590 $token = $token . "ΟΜΑΣΤ"; 591 } 592 } 593 594 // Step 5f 595 $re = '/^(.+?)(ΕΣΤΕ)$/'; 596 $re2 = '/^(.+?)(ΙΕΣΤΕ)$/'; 597 598 if (preg_match($re2, $token)) { 599 preg_match($re2, $token, $match); 600 $token = $match[1]; 601 $test1 = false; 602 $re2 = '/^(Π|ΑΠ|ΣΥΜΠ|ΑΣΥΜΠ|ΑΚΑΤΑΠ|ΑΜΕΤΑΜΦ)$/'; 603 604 if (preg_match($re2, $token)) { 605 $token = $token . "ΙΕΣΤ"; 606 } 607 } 608 609 if (preg_match($re, $token)) { 610 preg_match($re, $token, $match); 611 $token = $match[1]; 612 $test1 = false; 613 $exept12 = '/^(ΑΛ|ΑΡ|ΕΚΤΕΛ|Ζ|Μ|Ξ|ΠΑΡΑΚΑΛ|ΑΡ|ΠΡΟ|ΝΙΣ)$/'; 614 615 if (preg_match($exept12, $token)) { 616 $token = $token . "ΕΣΤ"; 617 } 618 } 619 620 // Step 5g 621 $re = '/^(.+?)(ΗΚΑ|ΗΚΕΣ|ΗΚΕ)$/'; 622 $re2 = '/^(.+?)(ΗΘΗΚΑ|ΗΘΗΚΕΣ|ΗΘΗΚΕ)$/'; 623 624 if (preg_match($re2, $token)) { 625 preg_match($re2, $token, $match); 626 $token = $match[1]; 627 $test1 = false; 628 } 629 630 if (preg_match($re, $token)) { 631 preg_match($re, $token, $match); 632 $token = $match[1]; 633 $test1 = false; 634 $exept13 = '/(ΣΚΩΛ|ΣΚΟΥΛ|ΝΑΡΘ|ΣΦ|ΟΘ|ΠΙΘ)$/'; 635 $exept14 = '/^(ΔΙΑΘ|Θ|ΠΑΡΑΚΑΤΑΘ|ΠΡΟΣΘ|ΣΥΝΘ|)$/'; 636 637 if (preg_match($exept13, $token) || preg_match($exept14, $token)) { 638 $token = $token . "ΗΚ"; 639 } 640 } 641 642 // Step 5h 643 $re = '/^(.+?)(ΟΥΣΑ|ΟΥΣΕΣ|ΟΥΣΕ)$/'; 644 645 if (preg_match($re, $token)) { 646 preg_match($re, $token, $match); 647 $token = $match[1]; 648 $test1 = false; 649 $exept15 = '/^(ΦΑΡΜΑΚ|ΧΑΔ|ΑΓΚ|ΑΝΑΡΡ|ΒΡΟΜ|ΕΚΛΙΠ|ΛΑΜΠΙΔ|ΛΕΧ|Μ|ΠΑΤ|Ρ|Λ|ΜΕΔ|ΜΕΣΑΖ|ΥΠΟΤΕΙΝ|ΑΜ|ΑΙΘ|ΑΝΗΚ|ΔΕΣΠΟΖ|ΕΝΔΙΑΦΕΡ|ΔΕ|ΔΕΥΤΕΡΕΥ|ΚΑΘΑΡΕΥ|ΠΛΕ|ΤΣΑ)$/'; 650 $exept16 = '/(ΠΟΔΑΡ|ΒΛΕΠ|ΠΑΝΤΑΧ|ΦΡΥΔ|ΜΑΝΤΙΛ|ΜΑΛΛ|ΚΥΜΑΤ|ΛΑΧ|ΛΗΓ|ΦΑΓ|ΟΜ|ΠΡΩΤ)$/'; 651 652 if (preg_match($exept15, $token) || preg_match($exept16, $token)) { 653 $token = $token . "ΟΥΣ"; 654 } 655 } 656 657 // Step 5i 658 $re = '/^(.+?)(ΑΓΑ|ΑΓΕΣ|ΑΓΕ)$/'; 659 660 if (preg_match($re, $token)) { 661 preg_match($re, $token, $match); 662 $token = $match[1]; 663 $test1 = false; 664 $exept17 = '/^(ΨΟΦ|ΝΑΥΛΟΧ)$/'; 665 $exept20 = '/(ΚΟΛΛ)$/'; 666 $exept18 = '/^(ΑΒΑΣΤ|ΠΟΛΥΦ|ΑΔΗΦ|ΠΑΜΦ|Ρ|ΑΣΠ|ΑΦ|ΑΜΑΛ|ΑΜΑΛΛΙ|ΑΝΥΣΤ|ΑΠΕΡ|ΑΣΠΑΡ|ΑΧΑΡ|ΔΕΡΒΕΝ|ΔΡΟΣΟΠ|ΞΕΦ|ΝΕΟΠ|ΝΟΜΟΤ|ΟΛΟΠ|ΟΜΟΤ|ΠΡΟΣΤ|ΠΡΟΣΩΠΟΠ|' 667 . 'ΣΥΜΠ|ΣΥΝΤ|Τ|ΥΠΟΤ|ΧΑΡ|ΑΕΙΠ|ΑΙΜΟΣΤ|ΑΝΥΠ|ΑΠΟΤ|ΑΡΤΙΠ|ΔΙΑΤ|ΕΝ|ΕΠΙΤ|ΚΡΟΚΑΛΟΠ|ΣΙΔΗΡΟΠ|Λ|ΝΑΥ|ΟΥΛΑΜ|ΟΥΡ|Π|ΤΡ|Μ)$/'; 668 $exept19 = '/(ΟΦ|ΠΕΛ|ΧΟΡΤ|ΛΛ|ΣΦ|ΡΠ|ΦΡ|ΠΡ|ΛΟΧ|ΣΜΗΝ)$/'; 669 670 if ( 671 (preg_match($exept18, $token) || preg_match($exept19, $token)) 672 && !(preg_match($exept17, $token) || preg_match($exept20, $token)) 673 ) { 674 $token = $token . "ΑΓ"; 675 } 676 } 677 678 // Step 5j 679 $re = '/^(.+?)(ΗΣΕ|ΗΣΟΥ|ΗΣΑ)$/'; 680 681 if (preg_match($re, $token)) { 682 preg_match($re, $token, $match); 683 $token = $match[1]; 684 $test1 = false; 685 $exept21 = '/^(Ν|ΧΕΡΣΟΝ|ΔΩΔΕΚΑΝ|ΕΡΗΜΟΝ|ΜΕΓΑΛΟΝ|ΕΠΤΑΝ)$/'; 686 687 if (preg_match($exept21, $token)) { 688 $token = $token . "ΗΣ"; 689 } 690 } 691 692 // Step 5k 693 $re = '/^(.+?)(ΗΣΤΕ)$/'; 694 695 if (preg_match($re, $token)) { 696 preg_match($re, $token, $match); 697 $token = $match[1]; 698 $test1 = false; 699 $exept22 = '/^(ΑΣΒ|ΣΒ|ΑΧΡ|ΧΡ|ΑΠΛ|ΑΕΙΜΝ|ΔΥΣΧΡ|ΕΥΧΡ|ΚΟΙΝΟΧΡ|ΠΑΛΙΜΨ)$/'; 700 701 if (preg_match($exept22, $token)) { 702 $token = $token . "ΗΣΤ"; 703 } 704 } 705 706 // Step 5l 707 $re = '/^(.+?)(ΟΥΝΕ|ΗΣΟΥΝΕ|ΗΘΟΥΝΕ)$/'; 708 709 if (preg_match($re, $token)) { 710 preg_match($re, $token, $match); 711 $token = $match[1]; 712 $test1 = false; 713 $exept23 = '/^(Ν|Ρ|ΣΠΙ|ΣΤΡΑΒΟΜΟΥΤΣ|ΚΑΚΟΜΟΥΤΣ|ΕΞΩΝ)$/'; 714 715 if (preg_match($exept23, $token)) { 716 $token = $token . "ΟΥΝ"; 717 } 718 } 719 720 // Step 5m 721 $re = '/^(.+?)(ΟΥΜΕ|ΗΣΟΥΜΕ|ΗΘΟΥΜΕ)$/'; 722 723 if (preg_match($re, $token)) { 724 preg_match($re, $token, $match); 725 $token = $match[1]; 726 $test1 = false; 727 $exept24 = '/^(ΠΑΡΑΣΟΥΣ|Φ|Χ|ΩΡΙΟΠΛ|ΑΖ|ΑΛΛΟΣΟΥΣ|ΑΣΟΥΣ)$/'; 728 729 if (preg_match($exept24, $token)) { 730 $token = $token . "ΟΥΜ"; 731 } 732 } 733 734 // Step 6 735 $re = '/^(.+?)(ΜΑΤΑ|ΜΑΤΩΝ|ΜΑΤΟΣ)$/'; 736 $re2 = '/^(.+?)(Α|ΑΓΑΤΕ|ΑΓΑΝ|ΑΕΙ|ΑΜΑΙ|ΑΝ|ΑΣ|ΑΣΑΙ|ΑΤΑΙ|ΑΩ|Ε|ΕΙ|ΕΙΣ|ΕΙΤΕ|ΕΣΑΙ|ΕΣ|ΕΤΑΙ|Ι|ΙΕΜΑΙ|ΙΕΜΑΣΤΕ|ΙΕΤΑΙ|ΙΕΣΑΙ|ΙΕΣΑΣΤΕ|ΙΟΜΑΣΤΑΝ|ΙΟΜΟΥΝ|' 737 . 'ΙΟΜΟΥΝΑ|ΙΟΝΤΑΝ|ΙΟΝΤΟΥΣΑΝ|ΙΟΣΑΣΤΑΝ|ΙΟΣΑΣΤΕ|ΙΟΣΟΥΝ|ΙΟΣΟΥΝΑ|ΙΟΤΑΝ|ΙΟΥΜΑ|ΙΟΥΜΑΣΤΕ|ΙΟΥΝΤΑΙ|ΙΟΥΝΤΑΝ|Η|ΗΔΕΣ|ΗΔΩΝ|ΗΘΕΙ|ΗΘΕΙΣ|ΗΘΕΙΤΕ|' 738 . 'ΗΘΗΚΑΤΕ|ΗΘΗΚΑΝ|ΗΘΟΥΝ|ΗΘΩ|ΗΚΑΤΕ|ΗΚΑΝ|ΗΣ|ΗΣΑΝ|ΗΣΑΤΕ|ΗΣΕΙ|ΗΣΕΣ|ΗΣΟΥΝ|ΗΣΩ|Ο|ΟΙ|ΟΜΑΙ|ΟΜΑΣΤΑΝ|ΟΜΟΥΝ|ΟΜΟΥΝΑ|ΟΝΤΑΙ|ΟΝΤΑΝ|ΟΝΤΟΥΣΑΝ|ΟΣ|' 739 . 'ΟΣΑΣΤΑΝ|ΟΣΑΣΤΕ|ΟΣΟΥΝ|ΟΣΟΥΝΑ|ΟΤΑΝ|ΟΥ|ΟΥΜΑΙ|ΟΥΜΑΣΤΕ|ΟΥΝ|ΟΥΝΤΑΙ|ΟΥΝΤΑΝ|ΟΥΣ|ΟΥΣΑΝ|ΟΥΣΑΤΕ|Υ|ΥΣ|Ω|ΩΝ)$/'; 740 741 if (preg_match($re, $token, $match)) { 742 $token = $match[1] . "ΜΑ"; 743 } 744 745 if (preg_match($re2, $token) && $test1) { 746 preg_match($re2, $token, $match); 747 $token = $match[1]; 748 } 749 750 // Step 7 (ΠΑΡΑΘΕΤΙΚΑ) 751 $re = '/^(.+?)(ΕΣΤΕΡ|ΕΣΤΑΤ|ΟΤΕΡ|ΟΤΑΤ|ΥΤΕΡ|ΥΤΑΤ|ΩΤΕΡ|ΩΤΑΤ)$/'; 752 753 if (preg_match($re, $token)) { 754 preg_match($re, $token, $match); 755 $token = $match[1]; 756 } 757 758 return $this->toLowerCase($token, $wCase); 759 } 760 761 /** 762 * Converts the token to uppercase, suppressing accents and diaeresis. The array $wCase contains a special map of 763 * the uppercase rule used to convert each character at each position. 764 * 765 * @param string $token Token to process 766 * @param array &$wCase Map of uppercase rules 767 * 768 * @return string 769 * 770 * @since 4.0.0 771 */ 772 protected function toUpperCase($token, &$wCase) 773 { 774 $wCase = array_fill(0, mb_strlen($token, 'UTF-8'), 0); 775 $caseConvert = array( 776 "α" => 'Α', 777 "β" => 'Β', 778 "γ" => 'Γ', 779 "δ" => 'Δ', 780 "ε" => 'Ε', 781 "ζ" => 'Ζ', 782 "η" => 'Η', 783 "θ" => 'Θ', 784 "ι" => 'Ι', 785 "κ" => 'Κ', 786 "λ" => 'Λ', 787 "μ" => 'Μ', 788 "ν" => 'Ν', 789 "ξ" => 'Ξ', 790 "ο" => 'Ο', 791 "π" => 'Π', 792 "ρ" => 'Ρ', 793 "σ" => 'Σ', 794 "τ" => 'Τ', 795 "υ" => 'Υ', 796 "φ" => 'Φ', 797 "χ" => 'Χ', 798 "ψ" => 'Ψ', 799 "ω" => 'Ω', 800 "ά" => 'Α', 801 "έ" => 'Ε', 802 "ή" => 'Η', 803 "ί" => 'Ι', 804 "ό" => 'Ο', 805 "ύ" => 'Υ', 806 "ώ" => 'Ω', 807 "ς" => 'Σ', 808 "ϊ" => 'Ι', 809 "ϋ" => 'Ι', 810 "ΐ" => 'Ι', 811 "ΰ" => 'Υ', 812 ); 813 $newToken = ''; 814 815 for ($i = 0; $i < mb_strlen($token); $i++) { 816 $char = mb_substr($token, $i, 1); 817 $isLower = array_key_exists($char, $caseConvert); 818 819 if (!$isLower) { 820 $newToken .= $char; 821 822 continue; 823 } 824 825 $upperCase = $caseConvert[$char]; 826 $newToken .= $upperCase; 827 828 $wCase[$i] = 1; 829 830 if (in_array($char, ['ά', 'έ', 'ή', 'ί', 'ό', 'ύ', 'ώ', 'ς'])) { 831 $wCase[$i] = 2; 832 } 833 834 if (in_array($char, ['ϊ', 'ϋ'])) { 835 $wCase[$i] = 3; 836 } 837 838 if (in_array($char, ['ΐ', 'ΰ'])) { 839 $wCase[$i] = 4; 840 } 841 } 842 843 return $newToken; 844 } 845 846 /** 847 * Converts the suppressed uppercase token back to lowercase, using the $wCase map to add back the accents, 848 * diaeresis and handle the special case of final sigma (different lowercase glyph than the regular sigma, only 849 * used at the end of words). 850 * 851 * @param string $token Token to process 852 * @param array $wCase Map of lowercase rules 853 * 854 * @return string 855 * 856 * @since 4.0.0 857 */ 858 protected function toLowerCase($token, $wCase) 859 { 860 $newToken = ''; 861 862 for ($i = 0; $i < mb_strlen($token); $i++) { 863 $char = mb_substr($token, $i, 1); 864 865 // Is $wCase not set at this position? We assume no case conversion ever took place. 866 if (!isset($wCase[$i])) { 867 $newToken .= $char; 868 869 continue; 870 } 871 872 // The character was not case-converted 873 if ($wCase[$i] == 0) { 874 $newToken .= $char; 875 876 continue; 877 } 878 879 // Case 1: Unaccented letter 880 if ($wCase[$i] == 1) { 881 $newToken .= mb_strtolower($char); 882 883 continue; 884 } 885 886 // Case 2: Vowel with accent (tonos); or the special case of final sigma 887 if ($wCase[$i] == 2) { 888 $charMap = [ 889 'Α' => 'ά', 890 'Ε' => 'έ', 891 'Η' => 'ή', 892 'Ι' => 'ί', 893 'Ο' => 'ό', 894 'Υ' => 'ύ', 895 'Ω' => 'ώ', 896 'Σ' => 'ς' 897 ]; 898 899 $newToken .= $charMap[$char]; 900 901 continue; 902 } 903 904 // Case 3: vowels with diaeresis (dialytika) 905 if ($wCase[$i] == 3) { 906 $charMap = [ 907 'Ι' => 'ϊ', 908 'Υ' => 'ϋ' 909 ]; 910 911 $newToken .= $charMap[$char]; 912 913 continue; 914 } 915 916 // Case 4: vowels with both diaeresis (dialytika) and accent (tonos) 917 if ($wCase[$i] == 4) { 918 $charMap = [ 919 'Ι' => 'ΐ', 920 'Υ' => 'ΰ' 921 ]; 922 923 $newToken .= $charMap[$char]; 924 925 continue; 926 } 927 928 // This should never happen! 929 $newToken .= $char; 930 } 931 932 return $newToken; 933 } 934 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Sep 7 05:41:13 2022 | Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer |