[比較] 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>