ホームページ >バックエンド開発 >PHPチュートリアル >[比較] PHP は送信された段落に重複行があるかどうかを検出します。どちらが優れていますか?解決

[比較] PHP は送信された段落に重複行があるかどうかを検出します。どちらが優れていますか?解決

WBOY
WBOYオリジナル
2016-06-13 12:55:46830ブラウズ

[比較] PHP は送信された段落に重複行があるかどうかを検出します。どちらが優れていますか?
送信されたテキスト段落に重複があるかどうかを比較する 2 つの関数を作成しましたが、いくつかの問題が見つかりました:
(1) in_array() は、中国語の文字を検出する際に問題が発生することがあります。テキストが長い場合、存在しないと表示される可能性が高くなります。 (2) 短い段落を 3 ~ 4 回繰り返すことが許可される場合がありますが、similar_text を比較に使用する場合、繰り返しが 1 回だけである限り、ユーザーの投稿は拒否されます。より良くなるために改善する方法
(3) もっと良い方法はありますか?



<br>
<br>
関数 hasSimilarText($string)<br>
{<br>
$lineArr =explode("n",$string);<br>
$arrStr = $arrLen = array();<br>
foreach($lineArr as $k => $v)<br>
{<br>
$arrLen[] = strlen($v);<br>
$arrStr[] = $v;<br>
}<br>
<br>
foreach($arrStr as $k1 => $v1)<br>
{<br>
foreach($arrStr as $k2 => $v2)<br>
{<br>
If($k1 == $k2) 続行;<br>
if($arrLen[$k2]  100) continue;<br>
like_text($v1, $v2, $pct);<br>
If($pct > 90) は true を返します;<br>
}<br>
}<br>
false を返します;<br>
}<br>
<br>
<br>
/* 繰り返しの段落検出 */<br>
関数 hasRepeatLine($string)<br>
{<br>
$string = str_replace(array("t"," ","@","#",".",",",".",","),'',$string);<br>
//$string = str_replace("r","n",$string);<br>
$lineArr =explode("n",$string);<br>
$countShort = $countMiddle = $countLong = 0;<br>
$arr = array();<br>
<br>
foreach($lineArr as $lineString)<br>
{<br>
$length = strlen( $lineString);<br>
If($length 
If(in_array($lineString,$arr))<br>
{<br>
If($length 
{<br>
$countShort ;<br>
If($countShort > 4) return true;//5 回<br>
} elseif($length>12 && $length 
$countMiddle ;<br>
If($countMiddle > 3) は true を返します //4 回<br>
} elseif($length>50 && $length 
$countLong ;<br>
If($countLong > 2) // 3 回 <br><div class="clear"> を返します。</div>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。