Give additional points for tags above threshold

Close #5
This commit is contained in:
2025-07-06 13:38:15 +02:00
parent f66fd1d9a0
commit a6ac86dc9b
2 changed files with 47 additions and 9 deletions

View File

@ -43,7 +43,8 @@ final class MDPuqi {
public const QI_REWARD_DESCRIPTION_LENGTH_GOOD = 3;
private const QI_REWARD_DESCRIPTION_LENGTH_GREAT = 6;
private const QI_REWARD_EVENTS_MULTIPLIER = 5;
private const QI_REWARD_TAGS_MULTIPLIER = 3;
public const QI_REWARD_TAGS_MULTIPLIER = 3;
public const QI_REWARD_TAGS_MULTIPLIER_ABOVE_THRESHOLD = 1;
private const QI_REWARD_LITERATURE_MULTIPLIER = 2;
private const QI_REWARD_HYPERLINKS_MULTIPLIER = 2;
private const QI_REWARD_DOCUMENTS_MULTIPLIER = 1;
@ -80,11 +81,11 @@ final class MDPuqi {
private const QI_PENALTY_NO_IMAGE = -10;
private const QI_PENALTY_NO_COLLECTION = -10;
private const QI_PENALTY_MULTIPLIER_EVENT_PART_DOUBLE_LINKED_AS_RELATED = -10;
private const QI_PENALTY_NO_EVENTS = -15;
private const QI_PENALTY_NO_TAG = -15;
private const QI_PENALTY_ONLY_ONE_TAG = -10;
private const QI_PENALTY_ONLY_TWO_TAG = -5;
private const QI_PENALTY_TOO_MANY_TAGS = -3; // Per tag of more than 10 tags
public const QI_PENALTY_NO_EVENTS = -15;
public const QI_PENALTY_NO_TAG = -15;
public const QI_PENALTY_ONLY_ONE_TAG = -10;
public const QI_PENALTY_ONLY_TWO_TAG = -5;
public const QI_PENALTY_TOO_MANY_TAGS = -3; // Per tag of more than 10 tags
private const QI_PENALTY_IMAGE_FILE_MISSING = -5;
private const QI_PENALTY_IMAGE_TOO_SMALL = -5;
@ -445,9 +446,9 @@ final class MDPuqi {
$value = self::QI_REWARD_TAGS_MULTIPLIER * $anzahl_swoergebnis;
}
else {
$msg = $this->_tlLoader->tl("quality", "quality", "too_many__tags");
$status = MDPuqiMessageStatus::warning;
$value = self::QI_PENALTY_TOO_MANY_TAGS * ($anzahl_swoergebnis - 10);
$msg = $this->_tlLoader->tl("quality", "quality", "tree_nine__tags");
$status = MDPuqiMessageStatus::praise;
$value = self::QI_REWARD_TAGS_MULTIPLIER * self::THRESHOLD_TAGS_TOO_MANY + ($anzahl_swoergebnis - self::THRESHOLD_TAGS_TOO_MANY) * self::QI_REWARD_TAGS_MULTIPLIER_ABOVE_THRESHOLD;
}
$this->_messages[] = new MDPuqiMessage(

View File

@ -82,4 +82,41 @@ final class MDPuqiTest extends TestCase {
self::assertEquals($positive, $score > 0, "Expected score to be positive or negative, got the oppite result. Score is: " . $score);
}
/**
* Data provider for tag.
* 0: Input number of tags.
* 1: Expected score.
*
* @return Generator<array{0: int, 1: int}>
*/
public static function tagNoAndScoreProvider():Generator {
yield 'No tags' => [0, 0 + MDPuqi::QI_PENALTY_NO_TAG];
yield 'One tag' => [1, 0 + MDPuqi::QI_PENALTY_ONLY_ONE_TAG];
yield 'Two tag' => [2, 0 + MDPuqi::QI_PENALTY_ONLY_TWO_TAG];
yield 'Regular number of tags' => [5, 0 + 5 * MDPuqi::QI_REWARD_TAGS_MULTIPLIER];
yield 'Number of tags above threshold' => [MDPuqi::THRESHOLD_TAGS_TOO_MANY + 1, 0 + MDPuqi::THRESHOLD_TAGS_TOO_MANY * MDPuqi::QI_REWARD_TAGS_MULTIPLIER + 1 * MDPuqi::QI_REWARD_TAGS_MULTIPLIER_ABOVE_THRESHOLD];
}
/**
* Test for tag evaluation.
*
* @param integer $noOfTags Input number of tags.
* @param integer $expectedScore Expected score.
*
* @return void
*/
#[DataProvider('tagNoAndScoreProvider')]
public function testTagEvaluation(int $noOfTags, int $expectedScore):void {
$puqi = new MDPuqi(new MDTlLoader("abc", "en"));
$puqi->checkEvents([], [], [], [], $noOfTags);
$msgs = $puqi->getMessages();
$score = $puqi->getScore();
self::assertEquals(MDPuqi::QI_PENALTY_NO_EVENTS + $expectedScore, $score, "Tag eval: Score differs from expected. Messages: " . var_export($puqi->getMessages(), true));
}
}