ok
This commit is contained in:
@@ -175,8 +175,8 @@ export async function POST(req: NextRequest) {
|
|||||||
|
|
||||||
// ✅ Définir l'URL AVANT de l'utiliser
|
// ✅ Définir l'URL AVANT de l'utiliser
|
||||||
const presidioAnalyzerUrl =
|
const presidioAnalyzerUrl =
|
||||||
// "http://analyzer.151.80.20.211.sslip.io/analyze";
|
"http://analyzer.151.80.20.211.sslip.io/analyze";
|
||||||
"http://localhost:5001/analyze";
|
// "http://localhost:5001/analyze";
|
||||||
try {
|
try {
|
||||||
const analyzeResponse = await fetch(presidioAnalyzerUrl, {
|
const analyzeResponse = await fetch(presidioAnalyzerUrl, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
@@ -213,8 +213,8 @@ export async function POST(req: NextRequest) {
|
|||||||
|
|
||||||
console.log("🔍 Appel à Presidio Anonymizer...");
|
console.log("🔍 Appel à Presidio Anonymizer...");
|
||||||
const presidioAnonymizerUrl =
|
const presidioAnonymizerUrl =
|
||||||
// "http://analyzer.151.80.20.211.sslip.io/anonymize";
|
"http://analyzer.151.80.20.211.sslip.io/anonymize";
|
||||||
"http://localhost:5001/anonymize";
|
// "http://localhost:5001/anonymize";
|
||||||
|
|
||||||
const anonymizeResponse = await fetch(presidioAnonymizerUrl, {
|
const anonymizeResponse = await fetch(presidioAnonymizerUrl, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
@@ -253,36 +253,33 @@ export async function POST(req: NextRequest) {
|
|||||||
) => {
|
) => {
|
||||||
const replacementMap: Record<string, string> = {};
|
const replacementMap: Record<string, string> = {};
|
||||||
|
|
||||||
// Extraire tous les remplacements [XXX] du texte anonymisé
|
|
||||||
const replacementPattern = /\[[^\]]+\]/g;
|
|
||||||
const foundReplacements =
|
|
||||||
anonymizedText.match(replacementPattern) || [];
|
|
||||||
|
|
||||||
console.log(
|
|
||||||
"🔍 Remplacements trouvés dans le texte anonymisé:",
|
|
||||||
foundReplacements
|
|
||||||
);
|
|
||||||
|
|
||||||
// Trier les entités par position
|
// Trier les entités par position
|
||||||
const sortedResults = [...analyzerResults].sort(
|
const sortedResults = [...analyzerResults].sort(
|
||||||
(a, b) => a.start - b.start
|
(a, b) => a.start - b.start
|
||||||
);
|
);
|
||||||
|
|
||||||
// Associer chaque entité avec son remplacement correspondant
|
// Pour chaque entité, trouver son remplacement dans le texte anonymisé
|
||||||
sortedResults.forEach((result, index) => {
|
let searchOffset = 0;
|
||||||
|
|
||||||
|
sortedResults.forEach((result) => {
|
||||||
const originalValue = originalText.substring(
|
const originalValue = originalText.substring(
|
||||||
result.start,
|
result.start,
|
||||||
result.end
|
result.end
|
||||||
);
|
);
|
||||||
|
|
||||||
if (index < foundReplacements.length) {
|
// Chercher le prochain remplacement [XXX] après la position courante
|
||||||
// Utiliser le remplacement correspondant par ordre d'apparition
|
const replacementPattern = /\[[^\]]+\]/g;
|
||||||
replacementMap[originalValue] = foundReplacements[index];
|
replacementPattern.lastIndex = searchOffset;
|
||||||
|
const match = replacementPattern.exec(anonymizedText);
|
||||||
|
|
||||||
|
if (match) {
|
||||||
|
replacementMap[originalValue] = match[0];
|
||||||
|
searchOffset = match.index + match[0].length;
|
||||||
console.log(
|
console.log(
|
||||||
`✅ Mapping ordonné: "${originalValue}" -> "${foundReplacements[index]}"`
|
`✅ Mapping positionnel: "${originalValue}" -> "${match[0]}"`
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
// Fallback si pas assez de remplacements trouvés
|
// Fallback
|
||||||
const fallbackValue = `[${result.entity_type.toUpperCase()}]`;
|
const fallbackValue = `[${result.entity_type.toUpperCase()}]`;
|
||||||
replacementMap[originalValue] = fallbackValue;
|
replacementMap[originalValue] = fallbackValue;
|
||||||
console.log(
|
console.log(
|
||||||
|
|||||||
@@ -48,11 +48,8 @@ export const AnonymizationInterface = ({
|
|||||||
anonymizedTypes.add("Adresses");
|
anonymizedTypes.add("Adresses");
|
||||||
}
|
}
|
||||||
|
|
||||||
// FLEXIBLE_DATE ou DATE_TIME -> Dates
|
// DATE -> Dates
|
||||||
if (
|
if (outputText.includes("<DATE>") || outputText.includes("<DATE>")) {
|
||||||
outputText.includes("<FLEXIBLE_DATE>") ||
|
|
||||||
outputText.includes("<DATE_TIME>")
|
|
||||||
) {
|
|
||||||
anonymizedTypes.add("Dates");
|
anonymizedTypes.add("Dates");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ export const useAnonymization = ({
|
|||||||
presidioResults: presidioResults,
|
presidioResults: presidioResults,
|
||||||
replacementValues: replacementValues,
|
replacementValues: replacementValues,
|
||||||
replacementValuesKeys: Object.keys(replacementValues),
|
replacementValuesKeys: Object.keys(replacementValues),
|
||||||
replacementValuesEntries: Object.entries(replacementValues)
|
replacementValuesEntries: Object.entries(replacementValues),
|
||||||
});
|
});
|
||||||
|
|
||||||
// ÉTAPE 2 : Passer le texte ORIGINAL à l'état de sortie.
|
// ÉTAPE 2 : Passer le texte ORIGINAL à l'état de sortie.
|
||||||
@@ -96,13 +96,13 @@ export const useAnonymization = ({
|
|||||||
for (const result of sortedResults) {
|
for (const result of sortedResults) {
|
||||||
const { entity_type, start, end } = result;
|
const { entity_type, start, end } = result;
|
||||||
const detectedText = originalText.substring(start, end);
|
const detectedText = originalText.substring(start, end);
|
||||||
|
|
||||||
// 🔍 CONSOLE.LOG POUR CHAQUE ENTITÉ
|
// 🔍 CONSOLE.LOG POUR CHAQUE ENTITÉ
|
||||||
console.log(`🔍 Entité détectée:`, {
|
console.log(`🔍 Entité détectée:`, {
|
||||||
entity_type,
|
entity_type,
|
||||||
detectedText,
|
detectedText,
|
||||||
replacementFromMap: replacementValues[detectedText],
|
replacementFromMap: replacementValues[detectedText],
|
||||||
fallback: `[${entity_type}]`
|
fallback: `[${entity_type}]`,
|
||||||
});
|
});
|
||||||
|
|
||||||
mappings.push({
|
mappings.push({
|
||||||
@@ -110,12 +110,12 @@ export const useAnonymization = ({
|
|||||||
start: start,
|
start: start,
|
||||||
end: end,
|
end: end,
|
||||||
text: detectedText,
|
text: detectedText,
|
||||||
replacementValue: replacementValues[detectedText] || `[${entity_type}]`,
|
replacementValue: replacementValues[detectedText],
|
||||||
displayName: replacementValues[detectedText], // CORRECTION: Supprimer le fallback
|
displayName: replacementValues[detectedText],
|
||||||
customColor: undefined,
|
customColor: undefined,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 🔍 CONSOLE.LOG FINAL DES MAPPINGS
|
// 🔍 CONSOLE.LOG FINAL DES MAPPINGS
|
||||||
console.log("📋 Mappings créés:", mappings);
|
console.log("📋 Mappings créés:", mappings);
|
||||||
|
|
||||||
|
|||||||
@@ -46,27 +46,22 @@ export const useTextParsing = (
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Utiliser displayName au lieu de entity_type
|
// Utiliser displayName directement SANS fallback
|
||||||
// Ligne 45 - Ajouter du debug
|
const anonymizedText = mapping.displayName;
|
||||||
console.log("useTextParsing - mapping:", {
|
|
||||||
text: mapping.text,
|
|
||||||
displayName: mapping.displayName,
|
|
||||||
entity_type: mapping.entity_type,
|
|
||||||
});
|
|
||||||
|
|
||||||
const anonymizedText =
|
// Ne créer le segment que si displayName existe
|
||||||
mapping.displayName || `[${mapping.entity_type.toUpperCase()}]`;
|
if (anonymizedText) {
|
||||||
|
segments.push({
|
||||||
segments.push({
|
text: mapping.text,
|
||||||
text: mapping.text,
|
displayText: anonymizedText,
|
||||||
displayText: anonymizedText,
|
start: mapping.start,
|
||||||
start: mapping.start,
|
end: mapping.end,
|
||||||
end: mapping.end,
|
isEntity: true,
|
||||||
isEntity: true,
|
entityType: mapping.entity_type,
|
||||||
entityType: mapping.entity_type,
|
entityIndex: mappingIndex,
|
||||||
entityIndex: mappingIndex,
|
mapping: mapping,
|
||||||
mapping: mapping,
|
});
|
||||||
});
|
}
|
||||||
|
|
||||||
currentIndex = mapping.end; // CORRECTION: utiliser 'end'
|
currentIndex = mapping.end; // CORRECTION: utiliser 'end'
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user