コード例 #1
0
ファイル: Yoficator.php プロジェクト: rin-nas/php-yoficator
 /**
  * Главный метод
  *
  * @param   scalar|null $s      Текст в кодировке UTF-8.
  * @param   array|null  $words  Ассоц. массив со словами, которые были исправлены:
  *                              в ключах оригиналы, в значениях исправленные слова.
  * @return  string|bool         returns FALSE if error occured
  */
 public function parse($s, array &$words = null)
 {
     if (!ReflectionTypeHint::isValid()) {
         return false;
     }
     if (!is_string($s)) {
         return $s;
     }
     #пропускаем текст, в котором нет букв [ЕеЁё]
     if ($this->_is_skip($s)) {
         return $s;
     }
     #speed improve
     if (!(is_array($this->dic) || is_resource($this->db))) {
         if (function_exists('dba_open') && array_key_exists('cdb', dba_handlers(true))) {
             $this->db = dba_open($this->_filename('cdb'), 'r', 'cdb');
             if ($this->db === false) {
                 return $s;
             }
         } elseif ($this->is_work_for_cdb_only) {
             return $s;
         } else {
             include $this->_filename('php');
         }
     }
     #вырезаем и заменяем некоторые символы
     $additional_chars = array("­");
     $s = UTF8::diactrical_remove($s, $additional_chars, $is_can_restored = true, $restore_table);
     $this->words = array();
     #заменяем слова из текста, минимальная длина слова -- 3 буквы, меньше нельзя
     $s = preg_replace_callback('/ (' . $this->ru . ')               #1 первая буква
                                   ((?:' . $this->ru_lc . '){2,}+)   #2 остальные буквы
                                   (?!
                                      \\.(?>[\\x00-\\x20]+|\\xc2\\xa0)+  #\\xc2\\xa0 =  
                                        (?>
                                            (?:' . $this->ru_lc . ')
                                          | (?:' . $this->ru_uc . '){2}   #пример: долл. США
                                          | [\\x21-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7e]
                                        )
                                    | \\.[\\x21-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7e]
                                   )
                                 /sxSX', array(&$this, '_word'), $s);
     $s = UTF8::diactrical_restore($s, $restore_table);
     $words = $this->words;
     return $s;
 }
コード例 #2
0
 /**
  * Исправляет клавиатурные опечатки в тексте.
  * 
  * @param   scalar|null   $s       Текст в кодировке UTF-8.
  * @param   int           $mode    Константы self::SIMILAR_CHARS и/или self::KEYBOARD_LAYOUT,
  *                                 (их можно комбинировать). Описание констант см. выше.
  *                                 При использовании self::KEYBOARD_LAYOUT время работы увеличивается примерно в 10 раз.
  * @param   array         &$words  Ассоц. массив со словами, которые были исправлены:
  *                                 в ключах оригиналы, в значениях исправленные слова.
  * @return  string|bool            Returns FALSE if error occured
  */
 public function parse($s, $mode = self::SIMILAR_CHARS, array &$words = null)
 {
     if (!ReflectionTypeHint::isValid()) {
         return false;
     }
     if (!is_string($s)) {
         return $s;
     }
     if ($mode < self::SIMILAR_CHARS || $mode > (self::SIMILAR_CHARS | self::KEYBOARD_LAYOUT | self::ADD_FIX)) {
         trigger_error('Unknown mode', E_USER_WARNING);
         return false;
     }
     $this->mode = $mode;
     #вырезаем и заменяем некоторые символы
     $additional_chars = array("­");
     #http://ru.wikipedia.org/wiki/Диакритические_знаки
     $s = UTF8::diactrical_remove($s, $additional_chars, $is_can_restored = true, $restore_table);
     $this->words = array();
     $s = $this->_parse1($s);
     $s = $this->_parse2($s);
     $s = UTF8::diactrical_restore($s, $restore_table);
     $words = $this->words;
     return $s;
 }