ref #10377: matching names including infrageneric epith. Tests
authorBelen Escobari <b.escobari@bo.berlin>
Wed, 23 Aug 2023 12:40:21 +0000 (14:40 +0200)
committerBelen Escobari <b.escobari@bo.berlin>
Wed, 23 Aug 2023 12:40:21 +0000 (14:40 +0200)
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/NameMatchingServiceImpl.java
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/NameMatchingServiceImplTest.java
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/NameMatchingServiceImplTest.testFindMatchingNames.xml

index d0948bb8c1de1ee1e659b0862d6bd065e6306f82..dec8190660e50de766bce5b4694476d057fa4452 100644 (file)
@@ -149,7 +149,7 @@ public class NameMatchingServiceImpl
             } else {
                 return bestResults;
             }
-        } else if (infraGenericQuery == null){
+        } else if (epithetQuery != null && infraGenericQuery == null){
 
             String normalizedEphitetQuery = NameMatchingUtils.normalize(epithetQuery);
             String phoneticNormalizedEpithetQuery = NameMatchingUtils.nearMatch(normalizedEphitetQuery);
@@ -307,12 +307,18 @@ public class NameMatchingServiceImpl
     private int nameMatchingComputeDistance(String strQuery, String strDB) {
         int computedDistanceTemp;
         String trimmedStrings = trimCommonChar(strQuery, strDB);
+        String restantTrimmedQuery = "";
+        String restantTrimmedDB="";
 
         if ("".equals(trimmedStrings)) {
             computedDistanceTemp = 0;
         } else {
-            String restantTrimmedQuery = trimmedStrings.split(" ")[0];
-            String restantTrimmedDB = trimmedStrings.split(" ")[1];
+               try {
+            restantTrimmedQuery = trimmedStrings.split(" ")[0];
+            restantTrimmedDB = trimmedStrings.split(" ")[1];}
+               catch (Exception e) {
+                       System.out.println("error");
+               }
             computedDistanceTemp = NameMatchingUtils.modifiedDamerauLevenshteinDistance(restantTrimmedQuery,
                     restantTrimmedDB);
         }
index 6bd29976b9bd027a0ff539ec2c38f5b712b8822b..5761710b19da5766f2fca14e138056837fde5c0d 100644 (file)
@@ -153,55 +153,55 @@ public class NameMatchingServiceImplTest extends CdmTransactionalIntegrationTest
 
         // if the binomial query comprises genus and subgenus
                
-               // for exact match return exact matching name 
-//        inputName = "Nectandra (Nectrina)";
-//        matchResult = nameMatchingService.findMatchingNames(inputName, null, null);
-//        Assert.assertEquals(1, matchResult.size());
-//        matchRes = matchResult.get(0);
-//        Assert.assertEquals("Nectandra", matchRes.getFirstResult().getGenusOrUninomial());
-//        Assert.assertEquals("Nectrina", matchRes.getFirstResult().getInfraGenericEpithet());
-//        Assert.assertEquals(41, (int)matchRes.getFirstResult().getTaxonNameId());
-//        Assert.assertEquals("08ab2653-a4da-4c9b-8330-1bf4268cab88", matchRes.getFirstResult().getTaxonNameUuid().toString());
-//        Assert.assertEquals(0,(int) matchRes.getSecondResult());
-//        
-//             // non exact match return the best results
-//        inputName = "Nectandra (Nextrina)";
-//        matchResult = nameMatchingService.findMatchingNames(inputName, null, null);
-//        Assert.assertEquals(2, matchResult.size());
-//        matchRes = matchResult.get(0);
-//        Assert.assertEquals("Nectandra", matchRes.getFirstResult().getGenusOrUninomial());
-//        Assert.assertEquals("Nectrina", matchRes.getFirstResult().getInfraGenericEpithet());
-//        Assert.assertEquals(41, (int)matchRes.getFirstResult().getTaxonNameId());
-//        Assert.assertEquals("08ab2653-a4da-4c9b-8330-1bf4268cab88", matchRes.getFirstResult().getTaxonNameUuid().toString());
-//        Assert.assertEquals(1,(int) matchRes.getSecondResult());
-//
-//        matchRes = matchResult.get(1);
-//        Assert.assertEquals("Nectandra", matchRes.getFirstResult().getGenusOrUninomial());
-//        Assert.assertEquals("Nexxxina", matchRes.getFirstResult().getInfraGenericEpithet());
-//        Assert.assertEquals(42, (int)matchRes.getFirstResult().getTaxonNameId());
-//        Assert.assertEquals("c955a8ab-8501-421a-bfa3-5748237e8942", matchRes.getFirstResult().getTaxonNameUuid().toString());
-//        Assert.assertEquals(2,(int) matchRes.getSecondResult());
+//              for exact match return exact matching name 
+        inputName = "Nectandra subgen. Nectrina";
+        matchResult = nameMatchingService.findMatchingNames(inputName, null, null);
+        Assert.assertEquals(1, matchResult.size());
+        matchRes = matchResult.get(0);
+        Assert.assertEquals("Nectandra", matchRes.getFirstResult().getGenusOrUninomial());
+        Assert.assertEquals("Nectrina", matchRes.getFirstResult().getInfraGenericEpithet());
+        Assert.assertEquals(41, (int)matchRes.getFirstResult().getTaxonNameId());
+        Assert.assertEquals("08ab2653-a4da-4c9b-8330-1bf4268cab88", matchRes.getFirstResult().getTaxonNameUuid().toString());
+        Assert.assertEquals(0,(int) matchRes.getSecondResult());
+        
+               // non exact match return the best results
+        inputName = "Nectandra subgen. Nextrina";
+        matchResult = nameMatchingService.findMatchingNames(inputName, null, null);
+        Assert.assertEquals(2, matchResult.size());
+        matchRes = matchResult.get(0);
+        Assert.assertEquals("Nectandra", matchRes.getFirstResult().getGenusOrUninomial());
+        Assert.assertEquals("Nectrina", matchRes.getFirstResult().getInfraGenericEpithet());
+        Assert.assertEquals(41, (int)matchRes.getFirstResult().getTaxonNameId());
+        Assert.assertEquals("08ab2653-a4da-4c9b-8330-1bf4268cab88", matchRes.getFirstResult().getTaxonNameUuid().toString());
+        Assert.assertEquals(1,(int) matchRes.getSecondResult());
+
+        matchRes = matchResult.get(1);
+        Assert.assertEquals("Nectandra", matchRes.getFirstResult().getGenusOrUninomial());
+        Assert.assertEquals("Nexxxina", matchRes.getFirstResult().getInfraGenericEpithet());
+        Assert.assertEquals(42, (int)matchRes.getFirstResult().getTaxonNameId());
+        Assert.assertEquals("c955a8ab-8501-421a-bfa3-5748237e8942", matchRes.getFirstResult().getTaxonNameUuid().toString());
+        Assert.assertEquals(2,(int) matchRes.getSecondResult());
         
-//      inputName = "Nectandra subg. Nectrina";
-//      matchResult = nameMatchingService.findMatchingNames(inputName, null, null);
-//      Assert.assertEquals(1, matchResult.size());
-//      matchRes = matchResult.get(0);
-//      Assert.assertEquals("Nectandra", matchRes.getFirstResult().getGenusOrUninomial());
-//      Assert.assertEquals("Nectrina", matchRes.getFirstResult().getInfraGenericEpithet());
-//      Assert.assertEquals(41, (int)matchRes.getFirstResult().getTaxonNameId());
-//      Assert.assertEquals("08ab2653-a4da-4c9b-8330-1bf4268cab88", matchRes.getFirstResult().getTaxonNameUuid().toString());
-//      Assert.assertEquals(0,(int) matchRes.getSecondResult());
-//      
-//             // non exact match return the best results
-//      inputName = "Nectandra subg. Nextrina";
-//      matchResult = nameMatchingService.findMatchingNames(inputName, null, null);
-//      Assert.assertEquals(2, matchResult.size());
-//      matchRes = matchResult.get(0);
-//      Assert.assertEquals("Nectandra", matchRes.getFirstResult().getGenusOrUninomial());
-//      Assert.assertEquals("Nectrina", matchRes.getFirstResult().getInfraGenericEpithet());
-//      Assert.assertEquals(41, (int)matchRes.getFirstResult().getTaxonNameId());
-//      Assert.assertEquals("08ab2653-a4da-4c9b-8330-1bf4268cab88", matchRes.getFirstResult().getTaxonNameUuid().toString());
-//      Assert.assertEquals(1,(int) matchRes.getSecondResult());
+               inputName = "Nectandra subg. Nectrina";
+               matchResult = nameMatchingService.findMatchingNames(inputName, null, null);
+               Assert.assertEquals(1, matchResult.size());
+               matchRes = matchResult.get(0);
+               Assert.assertEquals("Nectandra", matchRes.getFirstResult().getGenusOrUninomial());
+               Assert.assertEquals("Nectrina", matchRes.getFirstResult().getInfraGenericEpithet());
+               Assert.assertEquals(41, (int)matchRes.getFirstResult().getTaxonNameId());
+               Assert.assertEquals("08ab2653-a4da-4c9b-8330-1bf4268cab88", matchRes.getFirstResult().getTaxonNameUuid().toString());
+               Assert.assertEquals(0,(int) matchRes.getSecondResult());
+  
+       // non exact match return the best results
+               inputName = "Nectandra subg. Nextrina";
+               matchResult = nameMatchingService.findMatchingNames(inputName, null, null);
+               Assert.assertEquals(2, matchResult.size());
+               matchRes = matchResult.get(0);
+               Assert.assertEquals("Nectandra", matchRes.getFirstResult().getGenusOrUninomial());
+               Assert.assertEquals("Nectrina", matchRes.getFirstResult().getInfraGenericEpithet());
+               Assert.assertEquals(41, (int)matchRes.getFirstResult().getTaxonNameId());
+               Assert.assertEquals("08ab2653-a4da-4c9b-8330-1bf4268cab88", matchRes.getFirstResult().getTaxonNameUuid().toString());
+               Assert.assertEquals(1,(int) matchRes.getSecondResult());
     }
 
        @Override
index 657fb186db4a391d53ad5bb7a4d322dea8fd22d9..4362b6442b02cb3bc5ee06916b25177787b89d5d 100644 (file)
@@ -5,7 +5,7 @@
   <TAXONNAME NAMETYPE="ICNAFP" ID="35" UUID="afdcdff3-8e8f-4296-aed2-2ad39c1b6bee" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nextandra"                                      AUTHORSHIPCACHE="Turl."  NAMECACHE="Nextandra"                                                  GENUSORUNINOMIAL="Nextandra"    INFRAGENERICEPITHET=""                  SPECIFICEPITHET=""                              COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
   <TAXONNAME NAMETYPE="ICNAFP" ID="36" UUID="e53a569a-d635-4c47-bded-ad539632593e" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nxctwsdra"                                      AUTHORSHIPCACHE="Turl."  NAMECACHE="Nxctwsdra"                                                  GENUSORUNINOMIAL="Nxctwsdra"    INFRAGENERICEPITHET=""                  SPECIFICEPITHET=""                              COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
   <TAXONNAME NAMETYPE="ICNAFP" ID="37" UUID="d4b9325f-ad24-4062-8e80-6d7af41b27c0" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectwsdrx"                                      AUTHORSHIPCACHE="Turl."  NAMECACHE="Nectwsdrx"                                                  GENUSORUNINOMIAL="Nectwsdrx"    INFRAGENERICEPITHET=""                  SPECIFICEPITHET=""                              COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="765"/>
-  <TAXONNAME NAMETYPE="ICNAFP" ID="39" UUID="bd892f7b-5bff-40fe-88ef-3bcf6103a3dd" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Philodendron subgen. Nectande"  AUTHORSHIPCACHE="Turl."  NAMECACHE="Philodendron subgen. Nectande"              GENUSORUNINOMIAL="Philodendron" INFRAGENERICEPITHET="Nectande"  SPECIFICEPITHET=""                              COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="773"/>
+  <TAXONNAME NAMETYPE="ICNAFP" ID="39" UUID="bd892f7b-5bff-40fe-88ef-3bcf6103a3dd" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Philodendron subgen. Nectande"  AUTHORSHIPCACHE="Turl."  NAMECACHE="Philodendron subgen. Nectande"              GENUSORUNINOMIAL="Philodendron" INFRAGENERICEPITHET="Nectande"  SPECIFICEPITHET=""                              COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="775"/>
   <TAXONNAME NAMETYPE="ICNAFP" ID="41" UUID="08ab2653-a4da-4c9b-8330-1bf4268cab88" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra (Nectrina)"           AUTHORSHIPCACHE="Turl."  NAMECACHE="Nectandra (Nectrina)"                               GENUSORUNINOMIAL="Nectandra"    INFRAGENERICEPITHET="Nectrina"  SPECIFICEPITHET=""                      COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="true" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="775"/>
   <TAXONNAME NAMETYPE="ICNAFP" ID="42" UUID="c955a8ab-8501-421a-bfa3-5748237e8942" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectandra nothosubg. Nexxxina" AUTHORSHIPCACHE="Turl."  NAMECACHE="Nectandra nothosubg. Nexxxina"               GENUSORUNINOMIAL="Nectandra"    INFRAGENERICEPITHET="Nexxxina"  SPECIFICEPITHET=""                      COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="true" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="775"/>
   <TAXONNAME NAMETYPE="ICNAFP" ID="43" UUID="e0b28207-8f09-48a2-8da3-94a56405d854" PROTECTEDTITLECACHE="false" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDFULLTITLECACHE="false" PROTECTEDNAMECACHE="false" TITLECACHE="Nectxndra subgen. Nectande"  AUTHORSHIPCACHE="Turl."  NAMECACHE="Nectxndra subgen. Nectande"                GENUSORUNINOMIAL="Nectxndra"    INFRAGENERICEPITHET="Nectande"      SPECIFICEPITHET=""                          COMBINATIONAUTHORSHIP_ID="1" BINOMHYBRID="true" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" ANAMORPHIC="false" RANK_ID="775"/>