diff --git a/pom.xml b/pom.xml index 626821d..dd40040 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ fr.abes sudoc - 1.1.1 + 1.1.2-SNAPSHOT jar sudoc webservices de récupération de ppns dans le sudoc diff --git a/src/main/java/fr/abes/sudoc/component/BaseXmlFunctionsCaller.java b/src/main/java/fr/abes/sudoc/component/BaseXmlFunctionsCaller.java index 5f67ece..d5bae4c 100644 --- a/src/main/java/fr/abes/sudoc/component/BaseXmlFunctionsCaller.java +++ b/src/main/java/fr/abes/sudoc/component/BaseXmlFunctionsCaller.java @@ -44,6 +44,7 @@ public List datToPpn(Integer date, String auteur, String titre) throws U if (titre == null || titre.isEmpty()) { throw new IllegalArgumentException("Le titre ne peut pas être null"); } + log.debug("params : date : " + date + " auteur : " + auteur + " titre : " + titre); StringBuilder request = new StringBuilder("SELECT DISTINCT a.PPN"); if (date != null) { request.append(" FROM AUTORITES.biblio_table_generale a"); diff --git a/src/main/java/fr/abes/sudoc/utils/Utilitaire.java b/src/main/java/fr/abes/sudoc/utils/Utilitaire.java index 43bd104..8a6e781 100644 --- a/src/main/java/fr/abes/sudoc/utils/Utilitaire.java +++ b/src/main/java/fr/abes/sudoc/utils/Utilitaire.java @@ -96,7 +96,7 @@ public static String replaceDiacritics(String src) { public static String formatString(String chaine) { if (chaine != null && !chaine.isEmpty()) { - return suppReservedWords(suppCaracters(chaine)); + return ajoutNearBetweenWords(banalisationReservedWords(suppCaracters(chaine))); } return chaine; } @@ -112,12 +112,21 @@ private static String suppCaracters(String chaine) { return chaine.replaceAll(regex, ""); } - private static String suppReservedWords(String chaine) { - List wordsToRemove = Arrays.asList("ABOUT", "ACCUM", "AND", "BT", "BTG", "BTI", "BTP", "EQUIV", "FUZZY", "HASPATH", "INPATH", "MDATA", "MINUS", "NEAR", "NOT", "NT", "NTG", "NTI", "NTP", "OR", "PATTERN", "PT", "RT", "SQE", "SYN", "TR", "TRSYN", "TT", "WITHIN"); - // Construire une expression régulière avec les caractères à supprimer - String regex = "\\b(" + String.join("|", wordsToRemove) + ")\\b"; - return chaine.replaceAll("(?i)" + regex, "").replaceAll("\\s+", " ").trim(); + private static String banalisationReservedWords(String chaine) { + List reservedWords = Arrays.asList("ABOUT", "ACCUM", "AND", "BT", "BTG", "BTI", "BTP", "EQUIV", "FUZZY", "HASPATH", "INPATH", "MDATA", "MINUS", "NEAR", "NOT", "NT", "NTG", "NTI", "NTP", "OR", "PATTERN", "PT", "RT", "SQE", "SYN", "TR", "TRSYN", "TT", "WITHIN"); + // Transformer la liste des mots réservés en une expression régulière + String regex = "\\b(" + String.join("|", reservedWords) + ")\\b"; + + // Remplacer les mots réservés par eux-mêmes entourés d'accolades + return chaine.toUpperCase().replaceAll(regex, "{$1}"); + } + + private static String ajoutNearBetweenWords(String chaine) { + // Split la chaîne en mots en éliminant les espaces multiples + String[] words = chaine.trim().split("\\s+"); + // Utilise String.join pour insérer "NEAR" entre les mots + return String.join(" NEAR ", words); } diff --git a/src/test/java/fr/abes/sudoc/utils/UtilitaireTest.java b/src/test/java/fr/abes/sudoc/utils/UtilitaireTest.java index 98fde46..cb036e9 100644 --- a/src/test/java/fr/abes/sudoc/utils/UtilitaireTest.java +++ b/src/test/java/fr/abes/sudoc/utils/UtilitaireTest.java @@ -110,8 +110,8 @@ void testReplaceDiacritics() { @Test @DisplayName("test reformatage chaine DAT") void testReformatageChaineDat() { - Assertions.assertEquals("Assez de ces fichus TU", Utilitaire.formatString("Assez ! de _ ces ~fichus *TU")); - Assertions.assertEquals("Je suis content", Utilitaire.formatString("Je AND suis! WITHIN content")); - Assertions.assertEquals("Je suis content", Utilitaire.formatString("Je AND suis! 'WITHIN' content")); + Assertions.assertEquals("Assez NEAR de NEAR ces NEAR fichus NEAR TU".toUpperCase(), Utilitaire.formatString("Assez ! de _ ces ~fichus *TU")); + Assertions.assertEquals("Je NEAR {AND} NEAR suis NEAR {WITHIN} NEAR content".toUpperCase(), Utilitaire.formatString("Je AND suis! within content")); + Assertions.assertEquals("Je NEAR {AND} NEAR suis NEAR {WITHIN} NEAR content".toUpperCase(), Utilitaire.formatString("Je AND suis! 'WITHIN' content")); } }