Changeset 7334 for TI01-discovery-API


Ignore:
Timestamp:
17/08/10 15:34:24 (9 years ago)
Author:
mnagni
Message:

Updated the TermSearch? to search phrases not only single words composition
Version 1.2.3

Location:
TI01-discovery-API/trunk/MEDINDiscoveryService
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • TI01-discovery-API/trunk/MEDINDiscoveryService/pom.xml

    r7261 r7334  
    44        <groupId>ndg.services.discovery</groupId> 
    55        <artifactId>MedinDiscoveryService</artifactId> 
    6         <version>1.2.2</version> 
     6        <version>1.2.3</version> 
    77        <packaging>aar</packaging> 
    88 
  • TI01-discovery-API/trunk/MEDINDiscoveryService/src/main/java/ndg/common/TermParser.java

    r7126 r7334  
    11package ndg.common; 
    22 
     3import java.util.ArrayList; 
     4import java.util.List; 
    35import java.util.regex.Pattern; 
    46 
     
    1921 
    2022/** 
    21  * @author Maurizio Nagni <maurizio.nagni@stcf.ac.uk> 
    22  * 
     23 * Parse a sentence identifying the operators among the words/phrases. 
     24 * The single phrase should be among a double quotes (ie ""Industrial Activity"") 
     25 * The parser recognizes several operator (if not included in a single phrase): 
     26 * <li> 
     27 * <ol> 
     28 * &, AND 
     29 * </ol> 
     30 * <ol> 
     31 * |, or 
     32 * </ol> 
     33 * <ol> 
     34 * -, !, not 
     35 * </ol>  
     36 * <li> 
     37 * @author Maurizio Nagni <maurizio.nagni@stcf.ac.uk>  
    2338 */ 
    2439public class TermParser { 
    2540        public String parseTerm(String term) throws AssembleQueryException { 
    26                 String items[] = term.split("\\s"); 
     41                if (term == null || term.length() == 0) 
     42                        return ""; 
     43                 
     44                String items[] = extractWordPhrase(term.trim()); 
     45                 
     46                //String items[] = term.split("\\s"); 
    2747 
    2848                int index = 0; 
     
    119139                return Pattern.matches("^:$", item); 
    120140        } 
     141         
     142        private String[] extractWordPhrase(String term) { 
     143                List<String> ret = new ArrayList<String>(); 
     144 
     145                if (term.length() == 0) 
     146                        return new String[]{}; 
     147                 
     148                int start = 0; 
     149                int stop = 0; 
     150                int grouperIndex = 0; 
     151                int spaceIndex = 0; 
     152                String item = null; 
     153                         
     154                while (true) { 
     155                        grouperIndex = findAssociator(term, start); 
     156                        spaceIndex = findSpace(term, start); 
     157                 
     158                        if (grouperIndex == -1 && spaceIndex == -1) 
     159                                break; 
     160                         
     161                        if ((grouperIndex == -1 && spaceIndex != -1) 
     162                                        || (grouperIndex != -1 && spaceIndex != -1 && grouperIndex > spaceIndex)) { 
     163                                stop = findSpace(term, start); 
     164                                ret.add(term.substring(start, stop)); 
     165                                start = stop + 1; 
     166                                continue; 
     167                        } 
     168                                 
     169                        if ((grouperIndex != -1 && spaceIndex == -1) 
     170                                        || (grouperIndex != -1 && spaceIndex != -1 && grouperIndex < spaceIndex)) { 
     171                                stop = findAssociator(term, start+2);                                    
     172                                ret.add("''" + term.substring(start+2, stop) + "''");    
     173                                start = stop + 2; 
     174                                continue; 
     175                        }                                        
     176                } 
     177                 
     178                if(start+stop == 0) 
     179                        ret.add(term); 
     180                         
     181                if (!(term.length() - start == 0) && (start > 0) && grouperIndex+spaceIndex == -2) 
     182                        ret.add(term.substring(start, term.length())); 
     183                         
     184                 
     185                return ret.toArray(new String[0]); 
     186        } 
     187         
     188        private int findAssociator(String term, int fromOffset) { 
     189                return term.indexOf("\"\"", fromOffset); 
     190        } 
     191         
     192        private int findSpace(String term, int fromOffset) { 
     193                return term.indexOf(" ", fromOffset); 
     194        } 
    121195} 
  • TI01-discovery-API/trunk/MEDINDiscoveryService/src/test/java/ndg/common/SearchAgentTest.java

    r7126 r7334  
    7676                        fail(new MessageFormatter().getFormattedText(e.getBundlMessage())); 
    7777                } 
     78                 
     79                test = "one & - \"\"two ring\"\""; 
     80                try { 
     81                        assertTrue(tp.parseTerm(test).trim().equals("one & ! ''two ring''")); 
     82                } catch (AssembleQueryException e) { 
     83                        fail(new MessageFormatter().getFormattedText(e.getBundlMessage())); 
     84                } 
    7885        } 
    79          
    80   
    8186} 
Note: See TracChangeset for help on using the changeset viewer.