찾다
백엔드 개발PHP 튜토리얼RMM을 기반으로 한 간단한 중국어 단어 분할

이 프로그램은 RMM 중국어 단어 분할 아이디어를 기반으로 한 간단한 중국어 단어 분할입니다. 프로그램에는 아직 허점이 많이 있습니다.
  1. /**
  2. * RMM 중국어 단어 분할 기준(역매칭 방식)
  3. * @author tangpan
  4. * @date 2013-10-12
  5. * @version 1.0.0
  6. **/
  7. class SplitWord {
  8. //public $Tag_dic = array() //스토리지 사전 단어 분할
  9. public $Rec_dic = array(); //저장소 단어 분할
  10. public $Split_char = ' '; //Separator
  11. public $Source_str = ''; public $Result_str = ''; //저장 단어 분할 결과 문자열
  12. public $limit_lenght = 2;
  13. public $Dic_maxLen = 28; //사전의 최대 단어 길이
  14. public $Dic_minLen = 2 ; //사전의 최소 단어 길이
  15. public function SplitWord() { //객체를 초기화하고 멤버 메서드를 자동으로 실행
  16. $this->__construct();
  17. }
  18. public function __construct() {
  19. $dic_path = dirname(__FILE__).'/words.csv'; //단어 분할 속도를 향상시키기 위해 사전을 미리 로드합니다
  20. $fp = fopen( $dic_path, 'r' ) ; / /어휘의 단어 읽기
  21. while( $line = fgets( $fp, 256 ) ) {
  22. $ws =explore(' ', $line) // 어휘의 단어 분할
  23. $ws[0] = Trim(iconv('utf-8','GBK',$ws[0])) //인코딩 변환
  24. //$this->Tag_dic[$ws[ 0 ]] = true; //워드를 인덱스로, 일련번호를 값으로 사용
  25. $this->Rec_dic[strlen($ws[0])][$ws[0]] = true; 단어는 각각 2차원 배열의 인덱스이며 n을 값으로 사용하여 어휘를 재구성합니다.
  26. }
  27. fclose($fp) // 어휘 닫기
  28. }
  29. /**
  30. * 소스 문자열 설정
  31. * @param 분할할 문자열
  32. */
  33. public function SetSourceStr( $str ) {
  34. $str = iconv( 'utf-8', 'GBK', $str ) // utf-8로 인코딩된 문자를 다음으로 변환합니다. GBK 인코딩
  35. $this->Source_str = $this->DealStr( $str ) //문자열 사전 처리
  36. }
  37. /**
  38. * 문자열 검사
  39. * @param $str 소스 문자열
  40. * @return bool
  41. */
  42. public function checkStr( $str ) {
  43. if ( Trim($str) == '' ) return; //문자열이 비어 있으면 직접 반환
  44. if ( ord( $str[0] ) > 0x80 ) return true; //한자이면 true를 반환
  45. else return false; //한자가 아니면 false를 반환
  46. }
  47. /* *
  48. * RMM 단어 분할 알고리즘
  49. * 처리할 @param $str 문자열
  50. */
  51. public function SplitRMM( $str = '' ) {
  52. if ( Trim( $str ) == '' ) return; //문자열이 비어 있으면 직접 반환
  53. else $this->SetSourceStr( $str ); //문자열이 비어 있지 않으면 소스 문자열을 설정합니다.
  54. if ( $this->Source_str == ' ' ) return; 비어 있으면 직접 반환
  55. $split_words =explore( ' ', $this->Source_str ); //문자열을 공백으로 분할합니다
  56. $lenght = count( $split_words ) //배열의 길이를 계산합니다.
  57. for ( $i = $lenght - 1; $i >= 0; $i-- ) {
  58. if ( Trim( $split_words[$i] ) == ' ' ) continue; 문자가 비어 있으면 다음 코드를 건너뛰고 다음 루프로 직접 입력
  59. if ( $this->checkStr( $split_words[$i] ) ) { //한자인지 문자열을 확인하세요
  60. if ( strlen( $split_words[$ i] ) >= $this->limit_lenght ) { //문자열 길이가 제한 크기보다 큰 경우
  61. //문자열 역일치
  62. $this- >Result_str = $this->pregRmmSplit ( $split_words[$i] ).$this->Split_char.$this->Result_str;
  63. }
  64. } else {
  65. $this-> ;Result_str = $split_words[$i].$this->Split_char.$this->Result_str;
  66. }
  67. }
  68. $this->clear( $split_words );
  69. return iconv('GBK', 'utf-8', $this->Result_str);
  70. }
  71. /**
  72. * 역방향 매칭 방식으로 중국어 문자열 분해
  73. * @param $str string
  74. * @return $retStr 단어 분할로 분할된 문자열
  75. */
  76. 공용 함수 pregRmmSplit( $ str ) {
  77. if ( $str == ' ' ) return;
  78. $splen = strlen( $str );
  79. $Split_Result = array();
  80. for ( $j = $splen - 1; $j >= 0; $ j--) { //역방향 일치 문자
  81. if ( $splen Dic_minLen ) { //문자 길이가 최소 문자보다 큰 경우 사전의 길이
  82. if ( $j == 1 ) { //길이가 1인 경우
  83. $Split_Result[] = substr( $str, 0, 2 );
  84. }else {
  85. $w = Trim( substr( $str, 0, $this->Dic_minLen 1 ) ) //처음 4자를 자릅니다.
  86. if ( $this->IsWord( $w ) ) { //해당 문자가 사전에 존재하는지 확인
  87. $Split_Result[] = $w; //존재하는 경우 배열 저장소에 씁니다.
  88. } else {
  89. $Split_Result[] = substr( $ str, 2 , 2 ); //역저장
  90. $Split_Result[] = substr( $str, 0, 2 );
  91. }
  92. }
  93. $j = -1; loop;
  94. break;
  95. }
  96. if ( $j >= $this->Dic_maxLen ) $max_len = $this->Dic_maxLen; 사전의 최대 단어, 최대 제한 길이 할당
  97. else $max_len = $j;
  98. for ( $k = $max_len; $k >= 0; $k = $k - 2 ) { / /한 점프는 한자 한자
  99. $ w = Trim( substr( $str, $j - $k, $k 1 ) );
  100. if ( $this->IsWord( $w ) ) {
  101. $Split_Result[] = $w; / /단어 저장
  102. $j = $j - $k - 1 //일치하는 문자의 위치로 이동
  103. break; 단어 분할이 성공하면 현재 루프에서 빠져나와 다음 루프로 들어갑니다
  104. }
  105. }
  106. }
  107. $retStr = $this->resetWord( $Split_Result ) //문자열 재구성 처리된 문자열을 반환합니다
  108. $this->clear( $ Split_Result ); //메모리 해제
  109. return $retStr;
  110. }
  111. /**
  112. * 단어 세그먼트 재식별 및 결합
  113. * @param $Split_Result 대상 문자열 재구성
  114. * @return $ret_Str 문자열 재구성
  115. */
  116. 공개 함수 ResetWord( $Split_Result ) {
  117. if ( Trim( $Split_Result[0] ) == '' ) return;
  118. $Len = count( $Split_Result ) - 1;
  119. $ret_Str = ' ';
  120. $spc = $this->Split_char;
  121. for ( $i = $Len; $i >= 0; $i-- ) {
  122. if ( 트림( $Split_Result[$ i] ) != '' ) {
  123. $Split_Result[$ i] = iconv( 'GBK', 'utf-8', $Split_Result[$i] );
  124. $ret_Str .= $spc.$ Split_Result[$i].';
  125. }
  126. }
  127. //$ret_Str = preg_replace('/^'.$spc.'/',',',$ret_Str);
  128. $ret_Str = iconv('utf-8','GBK',$ ret_Str);
  129. return $ret_Str;
  130. }
  131. /**
  132. * 특정 단어가 사전에 존재하는지 확인
  133. * @param $okWord 확인된 단어
  134. * @return bool;
  135. */
  136. 공개 함수 IsWord ( $okWord ) {
  137. $len = strlen( $okWord ) ;
  138. if ( $len > $this->Dic_maxLen 1 ) return false;
  139. else { //2차원에 따르면 배열 인덱스 일치, 단어 존재 여부
  140. return isset($this-> Rec_dic[$len][$okWord]);
  141. }
  142. }
  143. /**
  144. * 예비 문자열 처리(특수문자를 공백으로 대체)
  145. * @param $str 처리할 소스 문자열
  146. * @return $okStr 전처리된 문자열을 반환
  147. */
  148. public function DealStr( $str ) {
  149. $spc = $this->Split_char; //구분자 복사
  150. $slen = strlen( $str ); of 문자
  151. if ( $slen == 0 ) return; //문자 길이가 0이면 바로 return
  152. $okstr = '' //초기화 변수
  153. $prechar = 0; 판단변수 (0-공백, 1-영어, 2-중국어, 3-기호)
  154. for ( $i = 0; $i $str_ord = ord( $str [$i] );
  155. if ( $str_ord if ( $str_ord if ( $str [$i] != 'r' && $str[$i] != 'n' )
  156. $okstr .= $spc;
  157. $prechar = 0;
  158. 계속;
  159. } else if ( ereg('[@.%#:^&_-]',$str[$ i]) ) { //키워드 문자가 숫자, 영어, 특수문자인 경우
  160. if ( $prechar = = 0 ) { // 문자가 공백인 경우
  161. $okstr .= $str[$ i];
  162. $prechar = 3;
  163. } else {
  164. $okstr .= $spc .$str[$i]; //문자가 공백 문자가 아닌 경우 문자 앞에 공백 문자를 추가합니다.
  165. $prechar = 3;
  166. }
  167. } else if ( ereg(' [0-9a-zA-Z]', $str[$i]) ) { //영문 숫자 조합 분할
  168. if ( (ereg('[0-9]',$str[$i-1] ) && ereg('[a-zA-Z]',$str[$i]))
  169. || ( ereg('[a-zA-Z]',$str[$i-1]) && ereg('[0-9]',$str[$i])) ) {
  170. $okstr .= $ spc.$str[$i];
  171. } else {
  172. $okstr .= $str[$i];
  173. }
  174. }
  175. }else { //키워드의 두 번째 문자가 한자인 경우
  176. if ( $prechar != 0 && $prechar != 2 ) // 이전 문자가 한자가 아니고 공백이 아닌 경우 공백을 추가합니다.
  177. $okstr .= $spc;
  178. if ( isset( $str[$i 1] ) ) { //한자인 경우
  179. $c = $str[$i].$str [$i 1 ]; //두 문자열을 합쳐 한자를 만듭니다.
  180. $n = hexdec( bin2hex( $c ) ) //ASCII 코드를 16진수로 변환한 후 10진수로 변환합니다.
  181. if ( $n > 0xA13F && $n if ( $prechar != 0 ) $okstr .= $spc //중국어 구두점을 공백으로 대체
  182. //else $okstr .= $spc; //이전 문자가 비어 있으면 직접 문자열로 지정
  183. $prechar = 3;
  184. } else { //중국어 구두점이 아닌 경우
  185. $ okstr .= $c;
  186. $prechar = 2;
  187. }
  188. $i; // $i는 한자씩 옮겨도 1씩 증가합니다
  189. }
  190. }
  191. }
  192. return $okstr;
  193. }
  194. /**
  195. * 메모리 해제
  196. * @param $data 임시 데이터
  197. */
  198. 공용 함수clear( $data ) {
  199. unset( $data ); //임시저장 데이터 삭제
  200. }
  201. }
  202. ?>
코드 복사
RMM을 기반으로 한 간단한 중국어 단어 분할


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
과대 광고 : 오늘 PHP의 역할을 평가합니다과대 광고 : 오늘 PHP의 역할을 평가합니다Apr 12, 2025 am 12:17 AM

PHP는 현대적인 프로그래밍, 특히 웹 개발 분야에서 강력하고 널리 사용되는 도구로 남아 있습니다. 1) PHP는 사용하기 쉽고 데이터베이스와 완벽하게 통합되며 많은 개발자에게 가장 먼저 선택됩니다. 2) 동적 컨텐츠 생성 및 객체 지향 프로그래밍을 지원하여 웹 사이트를 신속하게 작성하고 유지 관리하는 데 적합합니다. 3) 데이터베이스 쿼리를 캐싱하고 최적화함으로써 PHP의 성능을 향상시킬 수 있으며, 광범위한 커뮤니티와 풍부한 생태계는 오늘날의 기술 스택에 여전히 중요합니다.

PHP의 약한 참고 자료는 무엇이며 언제 유용합니까?PHP의 약한 참고 자료는 무엇이며 언제 유용합니까?Apr 12, 2025 am 12:13 AM

PHP에서는 약한 참조가 약한 회의 클래스를 통해 구현되며 쓰레기 수집가가 물체를 되 찾는 것을 방해하지 않습니다. 약한 참조는 캐싱 시스템 및 이벤트 리스너와 같은 시나리오에 적합합니다. 물체의 생존을 보장 할 수 없으며 쓰레기 수집이 지연 될 수 있음에 주목해야합니다.

PHP의 __invoke 마법 방법을 설명하십시오.PHP의 __invoke 마법 방법을 설명하십시오.Apr 12, 2025 am 12:07 AM

\ _ \ _ 호출 메소드를 사용하면 객체를 함수처럼 호출 할 수 있습니다. 1. 객체를 호출 할 수 있도록 메소드를 호출하는 \ _ \ _ 정의하십시오. 2. $ obj (...) 구문을 사용할 때 PHP는 \ _ \ _ invoke 메소드를 실행합니다. 3. 로깅 및 계산기, 코드 유연성 및 가독성 향상과 같은 시나리오에 적합합니다.

동시성에 대해 PHP 8.1의 섬유를 설명하십시오.동시성에 대해 PHP 8.1의 섬유를 설명하십시오.Apr 12, 2025 am 12:05 AM

섬유는 PHP8.1에 도입되어 동시 처리 기능을 향상시켰다. 1) 섬유는 코 루틴과 유사한 가벼운 동시성 모델입니다. 2) 개발자는 작업의 실행 흐름을 수동으로 제어 할 수 있으며 I/O 집약적 작업을 처리하는 데 적합합니다. 3) 섬유를 사용하면보다 효율적이고 반응이 좋은 코드를 작성할 수 있습니다.

PHP 커뮤니티 : 자원, 지원 및 개발PHP 커뮤니티 : 자원, 지원 및 개발Apr 12, 2025 am 12:04 AM

PHP 커뮤니티는 개발자 성장을 돕기 위해 풍부한 자원과 지원을 제공합니다. 1) 자료에는 공식 문서, 튜토리얼, 블로그 및 Laravel 및 Symfony와 같은 오픈 소스 프로젝트가 포함됩니다. 2) 지원은 StackoverFlow, Reddit 및 Slack 채널을 통해 얻을 수 있습니다. 3) RFC에 따라 개발 동향을 배울 수 있습니다. 4) 적극적인 참여, 코드에 대한 기여 및 학습 공유를 통해 커뮤니티에 통합 될 수 있습니다.

PHP vs. Python : 차이점 이해PHP vs. Python : 차이점 이해Apr 11, 2025 am 12:15 AM

PHP와 Python은 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1.PHP는 간단한 구문과 높은 실행 효율로 웹 개발에 적합합니다. 2. Python은 간결한 구문 및 풍부한 라이브러리를 갖춘 데이터 과학 및 기계 학습에 적합합니다.

PHP : 죽어 가거나 단순히 적응하고 있습니까?PHP : 죽어 가거나 단순히 적응하고 있습니까?Apr 11, 2025 am 12:13 AM

PHP는 죽지 않고 끊임없이 적응하고 진화합니다. 1) PHP는 1994 년부터 새로운 기술 트렌드에 적응하기 위해 여러 버전 반복을 겪었습니다. 2) 현재 전자 상거래, 컨텐츠 관리 시스템 및 기타 분야에서 널리 사용됩니다. 3) PHP8은 성능과 현대화를 개선하기 위해 JIT 컴파일러 및 기타 기능을 소개합니다. 4) Opcache를 사용하고 PSR-12 표준을 따라 성능 및 코드 품질을 최적화하십시오.

PHP의 미래 : 적응 및 혁신PHP의 미래 : 적응 및 혁신Apr 11, 2025 am 12:01 AM

PHP의 미래는 새로운 기술 트렌드에 적응하고 혁신적인 기능을 도입함으로써 달성 될 것입니다. 1) 클라우드 컴퓨팅, 컨테이너화 및 마이크로 서비스 아키텍처에 적응, Docker 및 Kubernetes 지원; 2) 성능 및 데이터 처리 효율을 향상시키기 위해 JIT 컴파일러 및 열거 유형을 도입합니다. 3) 지속적으로 성능을 최적화하고 모범 사례를 홍보합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.