重み計算は、わずかに変更を加えれば、単語の分割、単語の頻度統計、全文およびスパムの検出などにも使用できます。

WBOY
リリース: 2016-07-25 08:49:09
オリジナル
904 人が閲覧しました
効率は非常に客観的なものです。他の用途に変更した場合、その効率は保証できません。
  1. /* vim: set Expandtab tabstop=4 shftwidth=4: */
  2. // +--------------------- - -------------------------------------------------
  3. // 名前: 重み計算
  4. // 説明: 少し変更すると、単語の分割、単語の頻度統計、全文検索、ガーベジ検出にも使用できます
  5. // 日付: 2013/12/16 08:51
  6. / / 著者: 遅れました < latelx64@gmail.com> ------ --------------------------------
  7. //
  8. /*外部呼び出しの例*/
  9. /*
  10. $aItems = array(
  11. '中国は大きい',
  12. 'どっちではない',
  13. 'totalyrightforme',
  14. );
  15. $aTable = array(
  16. '中国,is|小さい',
  17. '中国,大きい|私' ,
  18. '中国は |大きい、どれ|私ではない',
  19. '完全に|正しい、私のために',
  20. );
  21. $oWeight = new ttrie;
  22. $oWeight->newItems($aItems);
  23. $aResult = $oWeight ->newTable($aTable);
  24. */
  25. クラスの重み {
  26. protected $aDict = array(array());
  27. protected $aItems = array();
  28. protected $sLastRule;
  29. protected $aMatchs = array( );
  30. protected $aShow = array();
  31. private function init() {
  32. //記録されたマッチングテーブルをクリアして結果を出力
  33. unset($this->aShow);
  34. }
  35. public function newItems($ mItems) {
  36. //新しいアイテムをインポートします
  37. $this->aItems = (is_array($mItems))? $mItems: array($mItems);
  38. $this->init();
  39. }
  40. public function newTable(array $aTable) {
  41. //新しい比較テーブルをインポートし、辞書を生成します
  42. foreach($aTable as $iTableKey=>$sTableLine) {
  43. $aTableLine =explode(',', str_replace('|' , ',', $sTableLine));
  44. $setter = function($v, $k, $paraMeter) {
  45. $k1 = $oWeight = $paraMeter[1];
  46. $oWeight-> ;genDict($v, $k1);
  47. };
  48. array_walk($aTableLine, $setter, array($iTableKey, $this));
  49. }
  50. $this->init();
  51. }
  52. public function getShow($sRule = 'max') {
  53. //最終的な表示結果を取得します
  54. if(empty($this->aItems) || empty($this->aDict))
  55. return array ();
  56. if (empty($this->aShow) || $sRule != $this->sLastRule)
  57. return $this->genShow($sRule);
  58. return $this->aShow;
  59. }
  60. public function genShow($sRule) {
  61. $aShow = array();
  62. $aMatchs = array();
  63. $getter = function($v, $k, $oWeight) use(&$aShow, & $aMatchs, $sRule ) {
  64. $t = array_count_values($oWeight->matchWord($v));
  65. $aMatchs[] = $t;
  66. switch ($sRule) {
  67. case 'max':
  68. $aShow [$k] = array_keys($t, max($t));
  69. Break;
  70. }
  71. };
  72. array_walk($this->aItems, $getter, $this);
  73. $this->aShow = $aShow;
  74. $ this->aMatchs = $aMatchs;
  75. return $aShow;
  76. }
  77. プライベート関数 genDict($mWord, $iKey = '') {
  78. $iInsertPonit = count($this->aDict) ;
  79. $iCur = 0; //現在のノード番号
  80. foreach (str_split($mWord) as $iChar) {
  81. if (isset($this->aDict[$iCur][$iChar])) {
  82. $iCur = $this->gt;aDict[$iCur][$iChar];
  83. 続行;
  84. }
  85. $this->aDict[$iInsertPonit] = array();
  86. $this->aDict[$iCur][$ iChar] = $iInsertPonit ;
  87. $iCur = $iInsertPonit;
  88. $iInsertPonit++;
  89. }
  90. $this->aDict[$iCur]['acc'][] = $iKey($ sLine) {
  91. $ iCur = $iOffset = $iPosition = 0;
  92. $sLine .= "
  93. ?>
コードをコピー


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート