>  기사  >  백엔드 개발  >  기사 요약을 자동으로 생성하는 PHP 코드

기사 요약을 자동으로 생성하는 PHP 코드

WBOY
WBOY원래의
2016-07-25 09:04:041115검색
  1. // PHP 4.3 or above needed

  2. define("BRIEF_LENGTH", 800); //Word amount of the Briefing of an Article
  3. function Generate_Brief($text){
  4. global $Briefing_Length;
  5. if(strlen($text) <= BRIEF_LENGTH ) return $text;
  6. $Foremost = substr($text, 0, BRIEF_LENGTH);
  7. $re = "/<(/?)(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|OBJECT|A|UL|OL|LI|BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|SPAN)[^>]*(>?)/i";
  8. $Single = "/BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT/i";
  9. $Stack = array(); $posStack = array();
  10. preg_match_all($re,$Foremost,$matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE);
  11. /* [Child-matching Specification]:
  12. $matches[$i][1] : A "/" charactor indicating whether current "<...>" Friction is Closing Part
  13. $matches[$i][2] : Element Name.
  14. $matches[$i][3] : Right > of a "<...>" Friction */
  15. for($i = 0 ; $i < count($matches); $i ){
  16. if($matches[$i][1][0] == ""){
  17. $Elem = $matches[$i][2][0];
  18. if(preg_match($Single,$Elem) && $matches[$i][3][0] !=""){
  19. continue;
  20. }
  21. array_push($Stack, strtoupper($matches[$i][2][0]));
  22. array_push($posStack, $matches[$i][2][1]);
  23. if($matches[$i][3][0] =="") break;
  24. }else{
  25. $StackTop = $Stack[count($Stack)-1];
  26. $End = strtoupper($matches[$i][2][0]);
  27. if(strcasecmp($StackTop,$End)==0){
  28. array_pop($Stack);
  29. array_pop($posStack);
  30. if($matches[$i][3][0] ==""){
  31. $Foremost = $Foremost.">";
  32. }
  33. }
  34. }
  35. }
  36. $cutpos = array_shift($posStack) - 1;
  37. $Foremost = substr($Foremost,0,$cutpos);
  38. return $Foremost;
  39. };
  40. 若遇到函数对多字节字符集支持得不好的情况,大家可以参考下下面这个代码。

  41. 代码2:

  42. function Generate_Brief($text){
  43. global $Briefing_Length;
  44. mb_regex_encoding("UTF-8");
  45. if(mb_strlen($text) <= BRIEF_LENGTH ) return $text;
  46. $Foremost = mb_substr($text, 0, BRIEF_LENGTH);
  47. $re = "<(/?)(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|OBJECT|A|UL|OL|LI|BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|SPAN)[^>]*(>?)";
  48. $Single = "/BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|BR/i";
  49. $Stack = array(); $posStack = array();
  50. mb_ereg_search_init($Foremost, $re, 'i');
  51. while($pos = mb_ereg_search_pos()){
  52. $match = mb_ereg_search_getregs();
  53. /* [Child-matching Formulation]:
  54. $matche[1] : A "/" charactor indicating whether current "<...>" Friction is Closing Part
  55. $matche[2] : Element Name.
  56. $matche[3] : Right > of a "<...>" Friction
  57. */
  58. if($match[1]==""){
  59. $Elem = $match[2];
  60. if(mb_eregi($Single, $Elem) && $match[3] !=""){
  61. continue;
  62. }
  63. array_push($Stack, mb_strtoupper($Elem));
  64. array_push($posStack, $pos[0]);
  65. }else{
  66. $StackTop = $Stack[count($Stack)-1];
  67. $End = mb_strtoupper($match[2]);
  68. if(strcasecmp($StackTop,$End)==0){
  69. array_pop($Stack);
  70. array_pop($posStack);
  71. if($match[3] ==""){
  72. $Foremost = $Foremost.">";
  73. }
  74. }
  75. }
  76. }
  77. $cutpos = array_shift($posStack) - 1;
  78. $Foremost = mb_substr($Foremost,0,$cutpos,"UTF-8");
  79. return $Foremost;
  80. };
  81. ?>

复制代码

至此,自动生成文章摘要的php代码的两种方法都介绍完了,希望对您有所帮助。 编辑推荐: php 摘要生成函数(自定义,无乱码)



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