add new configs
This commit is contained in:
@@ -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)) {
|
||||
|
||||
Reference in New Issue
Block a user