import { normalizeLowercaseStringOrEmpty } from "../../shared/string-coerce.js" ;
const MIN_DUPLICATE_TEXT_LENGTH = 10 ;
/**
* Normalize text for duplicate comparison.
* - Trims whitespace
* - Lowercases
* - Strips emoji (Emoji_Presentation and Extended_Pictographic)
* - Collapses multiple spaces to single space
*/
export function normalizeTextForComparison(text: string): string {
return normalizeLowercaseStringOrEmpty(text)
.replace(/\p{Emoji_Presentation}|\p{Extended_Pictographic}/gu, "" )
.replace(/\s+/g, " " )
.trim();
}
export function isMessagingToolDuplicateNormalized(
normalized: string,
normalizedSentTexts: string[],
): boolean {
if (normalizedSentTexts.length === 0 ) {
return false ;
}
if (!normalized || normalized.length < MIN_DUPLICATE_TEXT_LENGTH) {
return false ;
}
return normalizedSentTexts.some((normalizedSent) => {
if (!normalizedSent || normalizedSent.length < MIN_DUPLICATE_TEXT_LENGTH) {
return false ;
}
return normalized.includes(normalizedSent) || normalizedSent.includes(normalized);
});
}
export function isMessagingToolDuplicate(text: string, sentTexts: string[]): boolean {
if (sentTexts.length === 0 ) {
return false ;
}
const normalized = normalizeTextForComparison(text);
if (!normalized || normalized.length < MIN_DUPLICATE_TEXT_LENGTH) {
return false ;
}
return isMessagingToolDuplicateNormalized(normalized, sentTexts.map(normalizeTextForComparison));
}
Messung V0.5 in Prozent C=97 H=93 G=94
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-05-26)
¤
*© Formatika GbR, Deutschland