add new configs

This commit is contained in:
team 1
2026-04-15 08:46:26 +02:00
parent 8cac77ed31
commit 1815a42035
18 changed files with 508 additions and 309 deletions

View File

@@ -4,12 +4,21 @@ declare(strict_types=1);
namespace App\Intent;
use App\Config\CommerceIntentConfig;
final class CommerceIntentLite
{
public const NONE = 'none';
public const PRODUCT_SEARCH = 'product_search';
public const ADVISORY_PRODUCT_SEARCH = 'advisory_product_search';
public function __construct(
private readonly CommerceIntentConfig $config
)
{
}
/**
* @return array{intent:string, score:int, signals:string[]}
*/
@@ -28,28 +37,7 @@ final class CommerceIntentLite
$score = 0;
$signals = [];
$strongSignals = [
'suche',
'habt',
'gibt',
'zeig',
'welche',
'vergleich',
'alternativ',
'find',
'shop',
'store',
'sku',
'Artikel',
'Gerät',
'testomat',
'indikator',
'Titromat',
'Seminar',
'Schulung',
'Sensor',
'liste'
];
$strongSignals = $this->config->getStrongSignalsList();
foreach ($strongSignals as $signal) {
if (str_contains($p, strtolower($signal))) {
@@ -58,40 +46,36 @@ final class CommerceIntentLite
}
}
if(preg_match('#\d{3,10}#', $p)){
if (preg_match('#\d{3,10}#', $p)) {
$score += 2;
$signals[] = 'sku';
}
if (preg_match('/\b\d+(?:[.,]\d+)?\s*(euro|€|eur|teuer|preis|kosten)\b/u', $p) === 1) {
$pricePattern = $this->config->getPricePattern();
if (preg_match('/\b\d+(?:[.,]\d+)?\s*(' . $pricePattern . ')\b/u', $p) === 1) {
$score += 2;
$signals[] = 'price';
}
if (preg_match('/\b(größe|groesse|grösse)\s*[a-z0-9.-]+\b/u', $p) === 1) {
$sizePattern = $this->config->getSizePattern();
if (preg_match('/\b(' . $sizePattern . ')\s*[a-z0-9.-]+\b/u', $p) === 1) {
$score += 2;
$signals[] = 'size';
}
if (preg_match('/\b(xs|s|m|l|xl|xxl|xxxl)\b/u', $p) === 1) {
$sizeTokenPattern = $this->config->getSizeTokenPattern();
if (preg_match('/\b(' . $sizeTokenPattern . ')\b/u', $p) === 1) {
$score += 1;
$signals[] = 'size_token';
}
if (preg_match('/\b(schwarz|weiß|weiss|rot|blau|grün|gruen|gelb|grau|beige|rosa|pink|orange|braun)\b/u', $p) === 1) {
$colorPattern = $this->config->getColorPattern();
if (preg_match('/\b(' . $colorPattern . ')\b/u', $p) === 1) {
$score += 1;
$signals[] = 'color';
}
$advisorySignals = [
'passt',
'eignet',
'besser',
'besten',
'geeignet',
'empfiehl',
'empfehl',
];
$advisorySignals = $this->config->getAdvisorySignals();
foreach ($advisorySignals as $signal) {
if (str_contains($p, $signal)) {