рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╛рдЪрд╛рд░ PHP, phpmorphy рдФрд░ MySQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдореИрдВ "рд╕рдорд╛рди" рд░рд┐рдХреЙрд░реНрдб рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмреНрд▓реЙрдЧ рдпрд╛ рд╕рдорд╛рдЪрд╛рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рдЗрд╕ рдкреЛрд╕реНрдЯ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рджрд┐рдЦрд╛рдирд╛ рд╣реИ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ il faut рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд▓реЗрдЦрдХ рдкреНрд░реЛрдлреЗрд╕рд░ рдирд╣реАрдВ рд╣реИред рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рд▓реЗрдХрд┐рди рдПрдХ рд╢реМрдХрд┐рдпрд╛ред


рддреЛ рдЪреБрдиреМрддреА

рд╕рдорд╛рдЪрд╛рд░ рдПрдХ MySQL рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ:

рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╛рдЪрд╛рд░ рдЖрдЗрдЯрдо рдХреЛ рдПрдХ рд╣реА рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдорд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдпрд╣рд╛рдВ рд╣рдо рд╢реАрд░реНрд╖рдХ, рд▓реАрдб, рдмреЙрдбреА рдлреАрд▓реНрдб рдХреА рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд╛рди рд▓реЗрдВрдЧреЗ рдХрд┐ рд╣рдо рд╕рдм рдХреБрдЫ рдЦрд░реЛрдВрдЪ рд╕реЗ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдореМрдЬреВрджрд╛ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

рдЯреИрдЧ рдХреНрд╖реЗрддреНрд░

рд╣рдо рдЯреИрдЧ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпреЗ рдЫрджреНрдо рдЯреИрдЧ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рд╛рдЗрдЯ рдкрд░ рдХрд╣реАрдВ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ - рдпрд╣ рдлрд╝реАрд▓реНрдб рдХреЗрд╡рд▓ рдЧреНрд░рдВрдереЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ)ред рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░ рдХреЛ VARCHAR (512) рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдФрд░ рдлреБрд▓рдЯреЗрдХреНрд╕реНрдЯ (FULLTEXT (рдЯреИрдЧ)) рдХрд╛ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдЬреЛрдбрд╝реЗрдВред

рдЫрджреНрдо рдЯреИрдЧ рдкреАрдврд╝реА

рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕рдорд╛рдЪрд╛рд░ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╢реАрд░реНрд╖рдХ, рд▓реАрдб, рдмреЙрдбреА рдлрд╝реАрд▓реНрдб рд╕реЗ рдЫрджреНрдо рдЯреИрдЧ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ (рддреБрд░рдВрдд INSERT рдмрдпрд╛рди рд╕реЗ рдкрд╣рд▓реЗ)ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, phpmorphy рдФрд░ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЛ рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред

рдорд╣рддреНрд╡рд╣реАрди рд╢рдмреНрджреЛрдВ (рд╢рдмреНрджреЛрдВ рдХреЛ рд░реЛрдХреЗрдВ) рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, $ stopwords рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ, рд╣рдо рд░реЛрдХ рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ ( рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП , рдЗрд╕реЗ stopwords.txt рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ)ред

$stopwords=explode("\n", file_get_contents("stopwords.txt")); 


рдЗрд╕рдХреЗ рдмрд╛рдж, phpmorphy рдФрд░ рдЙрд╕рдХреЗ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рд╢реАрд░реНрд╖рдХ, рд▓реАрдб рдФрд░ рдмреЙрдбреА рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВ рдФрд░ phpmorphy рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рд╢рдмреНрджреЛрдВ рдХреЛ рдЪрд▓рд╛рдПрдВред
рдЫрджреНрдо рдЯреИрдЧ рдкреАрдврд╝реА
 $lowercaseLetters = array("''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''"); $uppercaseLetters = array("''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''", "''"); function cyrUpper($str) { global $lowercaseLetters; global $uppercaseLetters; return str_replace("'", "", preg_replace($lowercaseLetters, $uppercaseLetters, $str)); } function cyrLower($str) { global $lowercaseLetters; global $uppercaseLetters; return str_replace("'", "", preg_replace( $uppercaseLetters,$lowercaseLetters, $str)); } function cleanUP ($new_string) { //$new_string=nl2br($new_string); $new_string= str_replace("-"," ",$new_string); $new_string= str_replace("\r\n"," ",$new_string); $new_string= str_replace("\r"," ",$new_string); $new_string= str_replace("\n"," ",$new_string); $new_string= str_replace("."," ",$new_string); $new_string = ereg_replace("[^0-9 ]", "",$new_string ); return $new_string; } require_once( 'morphy/src/common.php'); $text=cleanUP($_REQUEST[title]." ".$_REQUEST[lead]." ".$_REQUEST[body]." "); $aText = explode(' ',$text); $aPort = array(); $aMorph = array(); foreach ($aText as $word) $aMorph[] = cyrUpper($word);//  1251    // set some options $opts = array( 'storage' => PHPMORPHY_STORAGE_FILE, // Extend graminfo for getAllFormsWithGramInfo method call 'with_gramtab' => false, // Enable prediction by suffix 'predict_by_suffix' => true, // Enable prediction by prefix 'predict_by_db' => true ); $dir = 'morphy/dicts'; $lang = 'ru_RU'; // Create descriptor for dictionary located in $dir directory with russian language $dict_bundle = new phpMorphy_FilesBundle($dir, 'rus'); // Create phpMorphy instance try { $morphy = new phpMorphy($dict_bundle, $opts); } catch(phpMorphy_Exception $e) { throw new Exception('Error occured while creating stemmer instance: ' . $e->getMessage()); } try { if($getroot==22) $pseudo_root = $morphy->getPseudoRoot($aMorph);//     else $pseudo_root = $morphy->getBaseForm($aMorph);//   //   $getroot=TRUE } catch(phpMorphy_Exception $e) { throw new Exception('Error occured while text processing: ' . $e->getMessage()); } foreach ($pseudo_root as $roots){ $slovo=cyrLower($roots[0]); if (strlen( $slovo)>3 && !in_array($slovo,$stopwords) && count($roots)==1 ) { $tags.=$slovo." "; } } } 


рдЪрд░ рдореЗрдВ рдЯреИрдЧ рдХреА рдкрд░рд┐рдгрд╛рдореА рд╕реВрдЪреА рдЯреИрдЧ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИред рдЯреЗрдмрд▓ рдлрд╝реАрд▓реНрдбред рдирддреАрдЬрддрди, рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╛рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рд╢рдмреНрджреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрдЧреА рдЬреЛ рд╣рдо рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рдЙрджрд╛рд╣рд░рдг

рд╕реНрд░реЛрдд рдкрд╛рда
рд╕реИрдорд╕рдВрдЧ рдиреЗ рддреАрди-рдЖрдпрд╛рдореА рдореЗрдореЛрд░реА рд╡реА-рдирдВрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдареЛрд╕-рд░рд╛рдЬреНрдп рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рдХрд╛ рдЙрддреНрдкрд╛рджрди рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рддрдХрдиреАрдХ рдбреНрд░рд╛рдЗрд╡ рдХреА рдорд╛рддреНрд░рд╛ рдмрдврд╝рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдФрд░ рд╕реВрдЪрдирд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреА 2 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рдЧрддрд┐ рднреА рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рдФрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ 10 рдЧреБрдирд╛ рддрдХ рдмрдврд╝рд╛ рджреЗрддреА рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдПрд╕рдПрд╕рдбреА рдбрд┐рд╕реНрдХ 480 рдФрд░ 960 рдЬреАрдмреА рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рде рд╣реИ, рдХреЗрд╡рд▓ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдПред рд╣реЛрдо рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рд▓рд┐рдП, рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд░рд┐рд▓реАрдЬрд╝ рдбреЗрдЯ рдирд╣реАрдВ рдереАред

рдЙрддреНрдкрдиреНрди рд╢рдмреНрдж рд╕реВрдЪреА:
рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗрд╡рд▓ рд╡реГрджреНрдзрд┐ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХрдВрдкрдиреА рдареЛрд╕-рд░рд╛рдЬреНрдп рд╕рдордп рдмрдирд╛рдпрд╛ рдЧрддрд┐ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рд╕рд░реНрд╡рд░ рдЙрддреНрдкрд╛рджрди рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╕реНрдореГрддрд┐ рдорд╛рддреНрд░рд╛ рдкреНрд░рд╛рд░рдВрдн рдбреНрд░рд╛рдЗрд╡ рдкрд▓ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реНрдкрд░реНрд╢ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рдЙрдЪреНрдЪ рд░рд┐рд▓реАрдЬ рддреАрди рдЖрдпрд╛рдореА


SQL рдХреНрд╡реЗрд░реА

рдЕрдм рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдпрд╣ SQL рдХреНрд╡реЗрд░реА рд╕рдорд╛рди рд░рд┐рдХреЙрд░реНрдб рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдПрдЧреА:

  SELECT * FROM news WHERE MATCH (tags) AGAINST ('[    ]' ) > [ ] 


рдпрд╣рд╛рдВ, рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдореВрд▓реНрдп рдЧреНрд░рдВрдереЛрдВ рдХреА "рд╕рдорд╛рдирддрд╛" рд╣реИ - рдкреНрд░рдпреЛрдЧ (рдПрдХ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ)

Source: https://habr.com/ru/post/In190034/


All Articles