찾다
php教程php手册分享mysql中文全文搜索:中文分词简单函数

分享mysql中文全文搜索:中文分词简单函数
原文地址:http://www.jb100.net/html/content-22-400-1.html
前段时间研究中文全文搜索,结果发现mysql不支持中文的全文搜索。但是有一些解决办法,就是手动把中文单词用空格分开,然后搜索的时候加 上 in boolean mode。 但是这就带来一个问题,就是中文分词。这个是个很大的难题,貌似中科院有个小组就是专门做中文分词技术的。我们用 php来分词的话,要实现真正语义上的分词是非常困难的,就算实现了效率也不高。一般情况下,我们采用的是如下方法分词:

比如我们有一句话:你好我是刘春龙
那么我们可以这样来分词: 你好 好我 我是 是刘 刘春 春龙


这样虽然看起来有点傻,但是实际应用起来确实可行,因为我们搜索时候输入的关键词也是按照这个方法分词。

下面有个我自己写的函数,可以实现这种分词。传入三个参数,分别是:

1.需要分词的字符串,必须,英文,标点,数字,汉字,日语等都可以。编码为UTF-8
2.是否返回字符串,可选,默认是。如果传入false,那么将返回一个数组。
3.是否base64_encode中文,可选,默认是。Mysql的全文搜索有个配置是 ft_min_word_len 这个值一般是4,而 我们分成的中文词语是两个字,就不会被mysql认为是一个词。而base64_encode过后,词语的长度为8,就不存在最小长度问题 了。 base64_encode过后数据量会增大 50%。


注意,这里输入和输出的字符串编码都是UTF-8 function string2words($s,$return_string = true,$encode64 = true) <br> { <br>         $re = ''; <br>         //匹配汉字 <br>         if (preg_match_all("/([x{4e00}-x{9fff}]{2,})/u",$s,$ms)) <br>         { <br>                 foreach($ms[0] as $w) <br>                 { <br>                         //关键部分:分词 <br>                         $l = strlen($w)/3; <br>                         for($i=0;$i                         { <br>                                 $wi = substr($w,$i*3,6); <br>                                 if (strlen($wi) > 3) <br>                                 { <br>                                         $re .= ($encode64)?' '.str_replace(',','@',base64_encode($wi)):' '.$wi; <br>                                 } <br>                         } <br>                 } <br>         } <br>         //匹配数字 <br>         if (preg_match_all("/(d+[.]?d+)/",$s,$ms)) <br>         { <br>                 foreach($ms[0] as $wi) <br>                 { <br>                         if(strlen($wi) >= 2) <br>                         { <br>                                 $re .= ($encode64)?' '.str_replace(',','@',base64_encode($wi)):' '.$wi; <br>                         } <br>                 } <br>                 $s = preg_replace("/(d+[.]?d+)/",' ',$s); <br>         } <br>         //去掉所有双字节字符 <br>         $s = preg_replace("/([^x{00}-x{ff}]+)/u",' ',$s); <br>         $re = $s.' '.$re; <br>         if (!$return_string) <br>         { <br>                 $re = preg_replace("/([^d])([,.-?n])([^d])/",'$1 $3',$re); <br>                 $re = trim(preg_replace("/[s]{2,}/",' ',$re)); <br>                 $arr = explode(' ',$re); <br>                 $re = array(); <br>                 foreach($arr as $a) <br>                 { <br>                         if (strlen($a) >= 2) $re[] = $a; <br>                 } <br>                 return $re; <br>         } <br>         else <br>         { <br>                 $re = trim(preg_replace("/[s,.]{2,}/",' ',$re)); <br>                 return $re; <br>         } <br> } 原文地址:http://www.jb100.net/html/content-22-400-1.html

AD:真正免费,域名+虚机+企业邮箱=0元

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 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에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

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

안전한 시험 브라우저

안전한 시험 브라우저

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

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.