hypesystem

TestAddressParser

Feb 5th, 2012
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.62 KB | None | 0 0
  1. import java.util.regex.*;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.Iterator;
  5. import java.util.Map;
  6.  
  7. /**
  8.  *  0: Vejnavn          (Aa-Åå )+
  9.  *  1: Husnummer        [(0-9)+]
  10.  *  2: Bogstav på nr   [(Aa-Åå)]
  11.  *  3: Etage            [(0-9)+((Tt)(VHvh)||(Mm)(Ff))]
  12.  *  4: Postnummer       [(0-9)+]
  13.  *  5: By               [(Aa-Åå )+]
  14.  */
  15.  
  16. public class TestAddressParser {
  17.     private HashMap<String,Pattern> patterns;
  18.     private ArrayList<String> teststrings;
  19.     private String[] seperators;
  20.    
  21.     public TestAddressParser() {
  22.         patterns = new HashMap<String,Pattern>();
  23.         teststrings = new ArrayList<String>();
  24.         seperators = new String[]{" i "," på "};
  25.    
  26.         teststrings.add("Rued Langgaards-Vej 7, 2300 København S");
  27.         teststrings.add("Rued Langgaards Vej 7, 5. sal, 2300 København S");
  28.         teststrings.add("Rued Langgaards Vej 7 2300 København S");
  29.         teststrings.add("Rued Langgaards Vej 7, 5.");
  30.         teststrings.add("Rued Langgaards Vej 7 A København S");
  31.         teststrings.add("Rued Langgaards Vej 7A København S");
  32.         teststrings.add("Rued Langgaards Vej i København");
  33.         teststrings.add("Rued Langgaards Vej 7 på 5. sal");
  34.         teststrings.add("Rued Langgaards Vej, København S");
  35.         teststrings.add("Rued     Langgaards      Vej,      København      S     ");
  36.        
  37.         /*
  38.         Vejnavn [#][Bogstav] [Sal]["."||"th"||"tv"] (["DK-"]Postnr||By||["DK-"]Postnr By) ["Danmark"||"Denmark"]
  39.         Vejnavn # Bogstav | Sal | Postnr/by             //Postnr altid før by, ellers får man tæv med en gummislange.
  40.         0: Vejnavn | # | Bogstav
  41.         1: Sal
  42.         2:
  43.         */
  44.        
  45.         //TODO: Skriv alle regexes der hvor de skal bruges (eg. Pattern.compile(...).matcher(s);); skriv oversigt over regexes og hvad de bruges til
  46.         // i kommentarer
  47.         patterns.put("Road and house number with letter",Pattern.compile("[aA-zZ \\-æÆøØåÅ]+[ ]?[#]?([1-9][0-9]*[ ]?[aA-zZæÆøØåÅ]?)?"));
  48.         patterns.put("Road name",Pattern.compile("^[aA-zZ \\-æÆøØåÅ]+"));
  49.         patterns.put("House number",Pattern.compile("([1-9][0-9]*)"));
  50.         patterns.put("House letter",Pattern.compile("[aA-zZæÆøØåÅ]$"));
  51.         patterns.put("Postal code and town",Pattern.compile("([0-9]{4})?[ ]?([aA-zZ \\-æÆøØåÅ]+)?$"));
  52.         patterns.put("Postal code",Pattern.compile("[0-9]{4}"));
  53.         patterns.put("Town",Pattern.compile("[aA-zZ \\-æÆøØåÅ]+"));
  54.         patterns.put("Town after seperator",Pattern.compile("[,i] [aA-zZ æÆøØåÅ]+"));
  55.         patterns.put("Floor number",Pattern.compile("[0-9]+([\\. ]{0,2})?(th|tv|mf)?"));
  56.         patterns.put("Number",Pattern.compile("[0-9]+"));
  57.        
  58.         //prints
  59.         for(String s : teststrings) {
  60.             for(String sep : seperators) s = s.replaceAll(sep,",");
  61.             s = s.replaceAll("[ ]+"," ");
  62.             String roadName = "", houseNumber = "", houseLetter = "", postalCode = "", town = "", floor = "";
  63.             Matcher first = patterns.get("Road and house number with letter").matcher(s);
  64.             if(first.find()) {
  65.                 //group 0
  66.                 String result = first.group().trim();
  67.                
  68.                 Matcher matchRoadName = patterns.get("Road name").matcher(result);
  69.                 if(matchRoadName.find()) roadName = matchRoadName.group().trim();
  70.                
  71.                 Matcher matchHouseNumber = patterns.get("House number").matcher(result);
  72.                 if(matchHouseNumber.find()) houseNumber = matchHouseNumber.group();
  73.                
  74.                 Matcher matchHouseLetter = patterns.get("House letter").matcher(result);
  75.                 if(matchHouseLetter.find() && !houseNumber.equals("")) houseLetter = matchHouseLetter.group();
  76.                
  77.                 StdOut.print("1: "+roadName+"| 2: "+houseNumber+"| 3: "+houseLetter);
  78.                
  79.                 //find remaining groups //TODO: IF TOWN IS LAST (fix)
  80.                 String next = s.substring(first.end()).trim();
  81.                
  82.                 //group 2
  83.                 Matcher matchPostalCodeandTown = patterns.get("Postal code and town").matcher(next);
  84.                
  85.                 if(matchPostalCodeandTown.find()) {
  86.                     String s_lol = matchPostalCodeandTown.group().trim();
  87.                    
  88.                     Matcher matchPostalCode = patterns.get("Postal code").matcher(s_lol);
  89.                     if(matchPostalCode.find()) postalCode = matchPostalCode.group();
  90.                    
  91.                     Matcher matchTown = patterns.get("Town").matcher(s_lol);
  92.                     if(matchTown.find()) town = matchTown.group().trim();
  93.                    
  94.                 }
  95.                 StdOut.print("| 4: "+postalCode+"| 5: "+town);
  96.                
  97.                 //group 1
  98.                 String finalString = next.substring(0,matchPostalCodeandTown.start()).trim();
  99.                
  100.                 Matcher matchFloor = patterns.get("Floor number").matcher(finalString);
  101.                
  102.                 if(matchFloor.find()) {
  103.                     Matcher matchFloorNumber = patterns.get("Number").matcher(matchFloor.group());
  104.                     if(matchFloorNumber.find()) floor = matchFloorNumber.group();
  105.                 }
  106.                
  107.                 StdOut.print("| 6: "+floor);
  108.             }
  109.             StdOut.println();
  110.         }
  111.     }
  112.  
  113.     public static void main(String[] args) {
  114.         new TestAddressParser();
  115.     }
  116. }
Advertisement
Add Comment
Please, Sign In to add comment