php输出突出显示关键字的文本

时间:2012-03-02 14:57:48

标签: php words

我有一个输出电影评论的系统,当它输出时我想要从2个表中出现的关键字 - 负面和正面是不同的颜色任何想法这样做?代码在

之下
<?php

// Connect to database
mysql_connect("sdd", "sdsd", "") or die(mysql_error());
mysql_select_db("sdsd") or die(mysql_error());

$id = mysql_real_escape_string($_POST['reviewid']); 

//$query = "select * from review where id = '$id'";
$query = mysql_fetch_assoc(mysql_query("SELECT filmreview FROM review WHERE id = '$id'"));
$pos = mysql_query("SELECT word FROM positive");
$neg = mysql_query("SELECT word FROM negative");


//Variables 
$review_text = $query['filmreview'];
$good = 0;
$bad = 0; 


// Gets words in to a text array and converts to lower case 
$cnt_r = array_count_values(array_map('mb_strtolower',str_word_count($review_text, 1)));

// Gets the positive words and check for the word in the text  
    while($check = mysql_fetch_assoc($pos)){
       $lower = mb_strtolower($check['word']);
     if(isset($cnt_r[$lower])){
    $good+= $cnt_r[$lower];
    echo $check ['word'];
    echo "<p>"; 
     } 
    }

// Gets the negative words and check for the word in the text 
while($check = mysql_fetch_assoc($neg)){
  $lower = mb_strtolower($check['word']);
 if(isset($cnt_r[$lower])){
    $bad+= $cnt_r[$lower];
        echo $check ['word'];
        echo "<p>";
 }  
} 


// If there are more positive words than negative than the review is positive  
if ($good > $bad)
{
    echo "<p>"; 
    echo "This is a positive review";
    echo "<p>";
}

// If there are more negative words than positive than the review is negative 
else if ($good < $bad)
{
    echo "<p>";
    echo "This is a negative review";
    echo "<p>";
}

// If there are the same amount of positive and negative words than the review is average 
else if ($good == $bad)
{
    echo "<p>";
    echo "This is an average review";
    echo "<p>";
}

//Prints out the number of postive and negative words found 
echo "Good words: " . $good . " and Bad words: " . $bad;
echo "<p>";
echo $query ['filmreview'];
echo "<p>";
echo "This is <font color=\"blue\">blue</font>!"; 



echo "<form method='post' action='welcome.html'>";
echo "<input type='submit' name='searchagain' value='Search'>";
?>

3 个答案:

答案 0 :(得分:2)

您可以使用CSS类。

在您的样式表或您页面中的样式标记中,您可以创建css类:

p .negative { color: red; }
p .positive { color: black; }

现在只需将该类添加到您的段落中,它就会应用您想要的样式。

// If there are more positive words than negative than the review is positive  
if ($good > $bad)
{
    echo '<p class="positive">'; 
    echo 'This is a positive review';
    echo '</p>';
}

// If there are more negative words than positive than the review is negative 
else if ($good < $bad)
{
    echo '<p class="negative">';
    echo 'This is a negative review';
    echo '</p>';
}

等.....

答案 1 :(得分:0)

只需在文本中搜索并找到您的关键字,然后只需将其替换即可。 所以大致

    if($postivekeyword) {  
       $newpostivekeyword = '<span class="positive">'.$postivekeyword.'</span>';
   }
    if($negativekeyword) {  
      $newnegativekeyword = '<span class="negative">'.$negativekeyword.'</span>';
    }

然后只是

   $new_review_text = str_replace($postivekeyword, $newpostivekeyword, $review_text);

答案 2 :(得分:-1)

  1. 尝试在发送后立即阅读查询的回复。这样就可以避免让多个查询的结果堵塞你的记忆
  2. $cnt_r = array_count_values(array_map('mb_strtolower',str_word_count($review_text, 1)));似乎是$cnt_r = str_word_count(mb_strtolower($review_text), 2);
  3. 的简化版本
  4. str_word_count不是多字节安全的。在Smarty我已使用preg_match_all('#[\w\pL]+#u', $review_text, $matches);作为str_word_count()的UTF-8版本的基础。
  5. PDO仔细看看
  6. 为变量提供一些识别名称
  7. 总是正确地找出你的输出 - htmlspecialchars()就可以使用了!
  8. 这是2012年 - 我们永远不会使用<font>标签!改用CSS!

  9. <?php
    $query = mysql_fetch_assoc(mysql_query("SELECT filmreview FROM review WHERE id = '$id'"));
    $review_text = $query['filmreview'];
    
    // Gets words in to a text array and converts to lower case 
    $review_words = array_count_values(array_map('mb_strtolower',str_word_count($review_text, 1)));
    
    $positive_words = array();
    $negative_words = array();
    $positive_words_count = 0;
    $negative_words_count = 0;
    
    // Gets the positive words and check for the word in the text  
    $res = mysql_query("SELECT word FROM positive");
    while ($row = mysql_fetch_assoc($res)){
        // why isn't this already stored lower-case in database?
        $_word = mb_strtolower($row['word']);
        if (isset($review_words[$_word])){
            $positive_words_count += $review_words[$_word];
            $positive_words[] = $_word;
        } 
    }
    
    // Gets the negative words and check for the word in the text 
    $res = mysql_query("SELECT word FROM negative");
    while ($row = mysql_fetch_assoc($res)){
        // why isn't this already stored lower-case in database?
        $_word = mb_strtolower($row['word']);
        if (isset($review_words[$_word])){
            $negative_words_count += $review_words[$_word];
            $negative_words[] = $_word;
        }  
    }
    
    if ($positive_words_count > $negative_words_count) {
        // If there are more positive words than negative than the review is positive  
        echo "<p>This is a positive review<p>";
    } elseif ($positive_words_count < $negative_words_count) {
        // If there are more negative words than positive than the review is negative 
        echo "<p>This is a negative review<p>";
    } else {
        // If there are the same amount of positive and negative words than the review is average 
        echo "<p>This is an average review<p>";
    }
    
    // highlight positive/negative words
    $review_text = htmlspecialchars($review_text);
    $pattern = '#\b(' . join('|', $positive_words) . ')\b#i';
    $review_text = preg_replace($pattern, "<span class=\"positive\"\\1</span>", $review_text);
    $pattern = '#\b(' . join('|', $negative_words) . ')\b#i';
    $review_text = preg_replace($pattern, "<span class=\"negative\"\\1</span>", $review_text);
    
    //Prints out the number of postive and negative words found 
    echo "Good words: " . $positive_words_count . " and Bad words: " . $negative_words_count;
    echo "<p>" . $review_text . "<p>";
    echo "This is <font color=\"blue\">blue</font>!"; 
    

    在CSS中的某个位置定义span.negativespan.positive应该是什么样的。