> 백엔드 개발 > PHP 튜토리얼 > 약간의 수정을 가한 가중치 계산은 단어 분할, 단어 빈도 통계, 전체 텍스트 및 스팸 감지 등에 사용될 수도 있습니다.

약간의 수정을 가한 가중치 계산은 단어 분할, 단어 빈도 통계, 전체 텍스트 및 스팸 감지 등에 사용될 수도 있습니다.

WBOY
풀어 주다: 2016-07-25 08:49:09
원래의
939명이 탐색했습니다.
효율성은 매우 객관적입니다. 다른 용도로 변경하면 효율성을 보장할 수 없습니다.
  1. /* vim: set Expandtab tabstop=4 Shiftwidth=4: */
  2. // ----------- ------------------------------------- -----------
  3. // 이름: 가중치 계산
  4. // 설명: 약간 수정하면 단어 분할, 단어 빈도 통계, 전체 텍스트 검색 및 가비지에도 사용할 수 있습니다. 탐지
  5. // 날짜 : 2013/12/16 08:51
  6. // 작성자 : latel
  7. // ------------- ------------- ----------- ------------- --
  8. //
  9. /*외부 호출 예시*/
  10. /*
  11. $aItems = array(
  12. ' chinaisbig',
  13. 'whichisnot',
  14. 'totalyrightforme',
  15. );
  16. $aTable = array(
  17. 'china,is|small',
  18. 'china,big|me ',
  19. 'china,is|big, which |not,me',
  20. 'totaly|right,for,me',
  21. );
  22. $oWeight = new ttrie;
  23. $oWeight->newItems($aItems);
  24. $aResult = $oWeight->newTable($aTable);
  25. */
  26. 클래스 가중치 {
  27. protected $aDict = array(array());
  28. protected $ aItems = array();
  29. protected $sLastRule;
  30. protected $aMatchs = array();
  31. protected $aShow = array();
  32. private function init() {
  33. //기록된 매칭 테이블을 지우고 결과를 출력합니다
  34. unset($this->aShow);
  35. }
  36. public function newItems( $mItems) {
  37. //새 항목 가져오기
  38. $this->aItems = (is_array($mItems))? $mItems: array($mItems);
  39. $this->init() ;
  40. }
  41. public function newTable(array $aTable) {
  42. //새 비교 테이블 가져오기 및 사전 생성
  43. foreach($aTable as $iTableKey=>$sTableLine) {
  44. $aTableLine = 폭발(',' , str_replace('|', ',', $sTableLine))
  45. $setter = function($v, $k, $paraMeter) {
  46. $ k1 ​​= $paraMeter[0]; $oWeight = $ paraMeter[1];
  47. $oWeight->genDict($v, $k1);
  48. };
  49. array_walk($aTableLine, $ setter, array($iTableKey, $this));
  50. }
  51. $this->init();
  52. }
  53. 공용 함수 getShow($sRule = 'max') {
  54. //최종 표시 결과 가져오기
  55. if (empty($this->aItems) ||empty($this->aDict))
  56. return array();
  57. if (empty ($this->aShow) || $sRule != $this->sLastRule)
  58. return $this->genShow($sRule);
  59. return $this->aShow;
  60. }
  61. 공개 함수 genShow($sRule) {
  62. $aShow = array();
  63. $aMatchs = array();
  64. $getter = function($v, $k, $ oWeight) use(&$aShow, &$aMatchs, $sRule ) {
  65. $t = array_count_values($oWeight->matchWord($v));
  66. $aMatchs[] = $t;
  67. 스위치($sRule) {
  68. 케이스 '최대':
  69. $aShow[$k] = array_keys($t, max($t))
  70. break;
  71. }
  72. };
  73. array_walk($this->aItems, $getter , $this);
  74. $this->aShow = $aShow;
  75. $this->aMatchs = $aMatchs;
  76. return $ aShow;
  77. }
  78. 비공개 함수 genDict($mWord, $iKey = '') {
  79. $iInsertPonit = count($this->aDict);
  80. $iCur = 0; //현재 노드 번호
  81. foreach (str_split($mWord ) as $iChar) {
  82. if (isset($this->aDict[$iCur][$iChar])) {
  83. $iCur = $this->aDict[$iCur][$iChar] ;
  84. 계속;
  85. }
  86. $this->aDict[$iInsertPonit] = array();
  87. $this-> aDict[$iCur][$iChar] = $iInsertPonit;
  88. $iCur = $iInsertPonit;
  89. $iInsertPonit ;
  90. }
  91. $this->aDict[$iCur]['acc'] [] = $iKey;
  92. }
  93. function matchWord($sLine) {
  94. $iCur = $iOffset = $iPosition = 0;
  95. $sLine .= "
  96. ?>
코드 복사


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿