简体   繁体   English

PHP计数器增加了一个额外的增量

[英]PHP counter adds an extra increment

I basically have a simple program that takes some text as input from a form, matches all the words in the text to two lexicons. 我基本上有一个简单的程序,该程序将一些文本作为表单的输入,将文本中的所有单词都匹配到两个词典。 One lexicon contains a list of positive words and the other contains a list of negative words. 一个词典包含一个肯定词列表,另一个包含一个否定词列表。 For each positive word match, $posMatchCount is incremented. 对于每个正词匹配,$ posMatchCount都会增加。 For each negative word match, $negMatchCount is incremented. 对于每个否定词匹配,$ negMatchCount都会增加。 A simple comparison is done, and if the positive words are greater, the program returns "Positive", else, it returns "negative". 进行了简单的比较,如果肯定词更大,则程序返回“ Positive”,否则返回“ negative”。 It returns "Neutral" if the positive words == negative words, or if there are no positive or negative matches. 如果肯定词==否定词,或者没有正面或负面匹配,则返回“ Neutral”。 Here is the complete code: 这是完整的代码:

        <?php
include("positive_lexicon.php");
include("negative_lexicon.php");
?>
<html>
<head>
    <title>Output</title>
</head>
<body>

<h1>Output</h1>  
<hr>
<?php

$preprocessedDoc2 = "i love this phone but hate the battery i adore the screen size"; $ preprocessedDoc2 =“我喜欢这款手机,但讨厌电池,我喜欢屏幕尺寸”;

/////////////////////////////////////////////////////////////////////////////////match doc text with POSITIVE sentiment lexicon

$matchedPosWords = NULL;//contains matched words
$posMatchCount = 0;//count of POS matches

$array1 = explode(' ', $preprocessedDoc2);
foreach($array1 as $word){

    if(preg_match("/\s{$word}\s/", $positiveLexicon)){
        $matchedPosWords = $matchedPosWords . $word . " - ";
        $posMatchCount++;
        $posMatch = true; //for subjectivity check
    }
    else{
        $posMatch= false; //for subjectivity check
    }
}

   echo "Matched POSITIVE words: <br><br>";
   echo "<div style=\"background-color:#66FF66\">";
   echo $matchedPosWords . " (Total: {$posMatchCount})";
   echo "</div>";
   echo "<br><br>";

/////////////////////////////////////////////////////////////////////////////////match doc text with NEGATIVE sentiment lexicon   

$matchedNegWords = NULL;//contains matched words
$negMatchCount = 0;//count of NEG matches

$array2 = explode(' ', $preprocessedDoc2);
foreach($array2 as $word2){

    if(preg_match("/\s{$word2}\s/", $negativeLexicon)){
        $matchedNegWords = $matchedNegWords . $word2 . " - ";
        $negMatchCount++;
        $negMatch = true; //for subjectivity check
    }
    else{
        $negMatch = false; //for subjectivity check
    }
}

   echo "Matched NEGATIVE words: <br><br>";
   echo "<div style=\"background-color:#FF5050\">";
   echo $matchedNegWords . " (Total: {$negMatchCount})";
   echo "</div>";
   echo "<br><br>";

/////////////////////////////////////////////////////////////////////////////////comparison between POSITIVE and NEGATIVE words

echo "analyzing document's sentiment ...<br><br>";

function checkPolarity($posWords, $negWords, $posMatch1, $negMatch1){//function to check polarity of doc


    if((($posMatch1==false) && ($negMatch1==false))||($posWords==$negWords)){
        return "<strong>NEUTRAL</strong>"; //if there are no POS or NEG matches, or matches are equal, return NEUTRAL

    }

    if($posWords > $negWords){
        return "<strong>POSITIVE</strong>"; //if count of POS matches is greater than count of NEG matches, return POSITIVE

    }

    else{
        return "<strong>NEGATIVE</strong>"; //if count of NEG matches is greater than count of POS matches, return NEGATIVE

    }



}

$polarity = checkPolarity($posMatchCount, $negMatchCount, $posMatch, $negMatch); //call function to check polarity   

echo "Polarity of the document is: " . $polarity; //display overall polarity
echo "<br><br>";

$polarity = "";



?>

</body>
</html>

However, sometimes it returns "neural" even though the number of positive words is greater than negative words. 但是,即使肯定词的数量大于否定词,有时也会返回“神经”。 Sometimes it does an extra increment. 有时它会额外增加。 For example, the string input "i love this phone but hate the battery i adore the screen size " returns the following: 例如,字符串输入“我爱这部手机,但讨厌电池,我喜欢屏幕尺寸”,则返回以下内容:

Matched POSITIVE words:

love - adore - - (Total: 3)


Matched NEGATIVE words:

hate - - (Total: 2)

Even though there are only two positive matches and one negative match, it gives a count of 3 for positive matches and 2 for negative matches. 即使只有两个正匹配项和一个负匹配项,对于正匹配项,计数为3,对于负匹配项,计数为2。 I know the problem would be spotted right away on SO, even though I can not seem to find it. 我知道问题很快就会被发现,即使我似乎找不到它。 I will try my luck.. 我会碰运气的..

In my opinion code does not look wrong. 我认为代码看起来没有错。 But the output that you have put 但是您输入的输出

Matched POSITIVE words:

love - adore - - (Total: 3)


Matched NEGATIVE words:

hate - - (Total: 2)

You have single space in last entry for both positive or negative matches, which i consider is wrong. 您在最后一个条目中有正或负匹配项的单个空格,我认为这是错误的。

if you like , please change the code to this to debug and check. 如果愿意,请更改代码以进行调试和检查。

echo "Foreach for Positive words started <br/>";
foreach($array1 as $word){

    if(preg_match("/\s{$word}\s/", $positiveLexicon) && trim($word) != "" ){
        echo $word."= <br/>"; // there should be no empty word in this
        $matchedPosWords = $matchedPosWords." - ". $word; // there should be no dash at the last, only word
        $posMatchCount++;
        $posMatch = true; //for subjectivity check
    }
    else{
        $posMatch= false; //for subjectivity check
    }
}
echo "Foreach for Positive words Ended <br/>";

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM