Exemple #1
0
 public function goSearch($string)
 {
     $materials = new Model_Material('groups');
     //подключаем библиотеки
     require_once DOCROOT . 'application/classes/PHPMorphy/src/common.php';
     $dir = DOCROOT . 'application/classes/PHPMorphy/dicts/';
     $lang = 'ru_RU';
     $opts = array('storage' => PHPMORPHY_STORAGE_FILE);
     try {
         $morphy = new phpMorphy($dir, $lang, $opts);
     } catch (phpMorphy_Exception $e) {
         die('Error occured while creating phpMorphy instance: ' . $e->getMessage());
     }
     $data = array();
     $request = null;
     $errors = null;
     if (!empty($string)) {
         // Очищаем от html-тегов и прочего
         $search = trim(addslashes(strip_tags($string)));
         $request = $search;
     }
     /* Создаем экземпляр phpMorphy */
     if (!empty($search)) {
         // Обрабатываем данные как и в прошлом контроллере
         if (mb_strlen($search, "UTF-8") > 2) {
             preg_match_all('/([a-zа-яё]+)/ui', mb_strtoupper($search, "UTF-8"), $search_words);
             $words = $morphy->lemmatize($search_words[1]);
             $s_words = array();
             $pre_result = array();
             $sorter = array();
             foreach ($words as $k => $w) {
                 if (!$w) {
                     $w[0] = $k;
                 }
                 if (mb_strlen($w[0], "UTF-8") > 2) {
                     $s_words[] = $w[0];
                 }
             }
             if (!count($s_words)) {
                 // Обрабатываем ошибку (нет ни одного слова длиннее 2 символов)
             } else {
                 //перебираем каждое слово
                 foreach ($s_words as $s_word) {
                     //сначала ищем в названиях материалов
                     $search_index = ORM::factory('Materials')->where('name', 'LIKE', '%' . $s_word . '%')->find_all();
                     foreach ($search_index as $si) {
                         //если в другом слове было совпадение
                         if (isset($pre_result[$si->id])) {
                             //добавляем вес
                             $sorter[$si->id] = $sorter[$si->id] + 2;
                             $pre_result[$si->id]['weight'] = $pre_result[$si->id]['weight'] + 2;
                             $pre_result[$si->id]['s_text'] = str_ireplace(mb_strtolower($s_word), '<b>' . $s_word . '</b>', strip_tags($pre_result[$si->id]['s_text']));
                         } else {
                             $sorter[$si->id] = 2;
                             $material = $materials->getMaterial($si->id);
                             $pre_result[$si->id] = array('weight' => 2, 's_text' => str_ireplace(mb_strtolower($s_word), '<b>' . $s_word . '</b>', strip_tags($si->name)));
                         }
                     }
                     //ищем в текстах
                     $search_index = ORM::factory('Texts')->where('value', 'LIKE', '%' . $s_word . '%')->find_all();
                     foreach ($search_index as $si) {
                         //получаем mid для материала
                         $mid = $materials->getMidFromFieldId($si->id, 'texts');
                         if (isset($pre_result[$mid])) {
                             $sorter[$mid] = $sorter[$mid] + 1;
                             $pre_result[$mid]['weight'] = $pre_result[$mid]['weight'] + 1;
                             $pre_result[$mid]['s_text'] = str_ireplace(mb_strtolower($s_word), '<b>' . $s_word . '</b>', strip_tags($pre_result[$mid]['s_text']));
                         } else {
                             $pre_result[$mid] = array('weight' => 2, 's_text' => str_ireplace(mb_strtolower($s_word), '<b>' . $s_word . '</b>', strip_tags($si->value)));
                             $sorter[$mid] = 1;
                         }
                     }
                     //ищем в текстах
                     $search_index = ORM::factory('Chars')->where('value', 'LIKE', '%' . $s_word . '%')->find_all();
                     foreach ($search_index as $si) {
                         //получаем mid для материала
                         $mid = $materials->getMidFromFieldId($si->id, 'chars');
                         if (isset($pre_result[$mid])) {
                             $sorter[$mid] = $sorter[$mid] + 1;
                             $pre_result[$mid]['weight'] = $pre_result[$mid]['weight'] + 1;
                             $pre_result[$mid]['s_text'] = str_ireplace(mb_strtolower($s_word), '<b>' . $s_word . '</b>', strip_tags($pre_result[$mid]['s_text']));
                         } else {
                             $pre_result[$mid] = array('weight' => 2, 's_text' => str_ireplace(mb_strtolower($s_word), '<b>' . $s_word . '</b>', strip_tags($si->value)));
                             $sorter[$mid] = 1;
                         }
                     }
                 }
                 arsort($sorter);
                 // Сортируем массив по весу результатов
                 foreach ($sorter as $id => $weight) {
                     // Тут, соответственно, получаем данные о результатах и помещаем в массив
                     $data[] = $id;
                 }
             }
         } else {
             // Обрабатываем ошибку - введен слишком короткий запрос
         }
     } else {
         // Обрабатываем ошибку - пустой поисковый запрос
     }
     return $data;
 }
<?php

// Подключите файл common.php. phpmorphy-0.3.2 - для версии 0.3.2,
// если используется иная версия исправьте код.
require_once 'c:/server/bin/PHP/lib/phpmorphy-0.3.7/src/common.php';
//global $morphy;
// Укажите путь к каталогу со словарями
$dir = 'c:/server/bin/PHP/lib/phpmorphy-0.3.7/dicts';
// Укажите, для какого языка будем использовать словарь.
// Язык указывается как ISO3166 код страны и ISO639 код языка,
// разделенные символом подчеркивания (ru_RU, uk_UA, en_EN, de_DE и т.п.)
$lang = 'ru_RU';
// Укажите опции
// Список поддерживаемых опций см. ниже
$opts = array('storage' => PHPMORPHY_STORAGE_MEM, 'predict_by_suffix' => TRUE);
// создаем экземпляр класса phpMorphy
// обратите внимание: все функции phpMorphy являются throwable т.е.
// могут возбуждать исключения типа phpMorphy_Exception (конструктор тоже)
try {
    $morphy = new phpMorphy($dir, $lang, $opts);
    print_r($morphy->lemmatize('яблоко', phpMorphy::NORMAL));
    //exit(0);
} catch (phpMorphy_Exception $e) {
    die('Error occured while creating phpMorphy instance: ' . $e->getMessage());
}
// далее под $morphy мы подразумеваем экземпляр класса phpMorphy
Exemple #3
-2
error_reporting(E_ALL | E_STRICT);
//ini_set('default_charset','UTF-8');
$path = $_SESSION['path'];
require 'stemmer_utf.php';
require 'work_csv.php';
require 'readfile.php';
require_once dirname(__FILE__) . '/phpmorphy/src/common.php';
$opts = array('storage' => PHPMORPHY_STORAGE_FILE, 'with_gramtab' => false, 'predict_by_suffix' => true, 'predict_by_db' => true);
$dir = dirname(__FILE__) . '/phpmorphy/dicts';
// Create descriptor for dictionary located in $dir directory with russian language
$dict_bundle = new phpMorphy_FilesBundle($dir, 'rus');
try {
    $morphy = new phpMorphy($dict_bundle, $opts);
} catch (phpMorphy_Exception $e) {
    die('Error occured while creating phpMorphy instance: ' . $e->getMessage());
}
//$csv = new CSV($path);
// $csv_lines  = $csv->getCSV($path);
$handle = fopen($path, "r");
//$row = 1;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $insertValues = array();
    foreach ($data as $v) {
        $insertValues[] = addslashes(trim($v));
        $values = implode(',', $insertValues);
        $word = $morphy->lemmatize($values);
        //print_r($morphy->getBaseForm($value));
        //$z=$morphy->getBaseForm($values);
    }
}
fclose($handle);