| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | Fonetisk søgning Fra : Arne Feldborg | 
  Dato :  13-11-08 15:18 |  
  |  
 
             Hejsa....
 Hvilke muligheder har man som almindelig amatør, dvs. indenfor
 overkommelige økonomiske rammer,  for at etablere en form for fonetisk
 søgning på navne i en database (MySql).
 Og her tænker jeg ikke på SoundEx som er uegnet til danske forhold.
 Foskellige former for såkaldte "Fuzz" søgninger er vel sådan set ok, men
 bygger i lidt for høj grad på et tilfældighedsprincip.
 Hvilke andre muligheder er der . Nogen der har erfaring med det.?
 -- 
 mvh, A:\Feldborg
 Slægtsforskning og lokalhistorie i midt- vestjylland
 http://hammerum-herred.dk/
            
             |   |   
            
        
 
            
         
           Gert Krabsen (13-11-2008) 
         
	
            | Kommentar Fra : Gert Krabsen | 
  Dato :  13-11-08 16:07 |  
  |  
 
            Arne Feldborg skrev:
 >  Hejsa....
 > 
 > Hvilke muligheder har man som almindelig amatør, dvs. indenfor
 > overkommelige økonomiske rammer,  for at etablere en form for fonetisk
 > søgning på navne i en database (MySql).
 > 
 > Og her tænker jeg ikke på SoundEx som er uegnet til danske forhold.
 > Foskellige former for såkaldte "Fuzz" søgninger er vel sådan set ok, men
 > bygger i lidt for høj grad på et tilfældighedsprincip.
 > 
 > Hvilke andre muligheder er der . Nogen der har erfaring med det.?
 En eller anden gang burde vi tage os sammen til at få sendt en spion ind 
   for at checke algoritmerne i telefonoplysningens søgesystem   
            
             |   |   
            
        
 
            
         
           Arne Vajhøj (14-11-2008) 
         
	
            | Kommentar Fra : Arne Vajhøj | 
  Dato :  14-11-08 03:23 |  
  |   
            Arne Feldborg wrote:
 > Hvilke muligheder har man som almindelig amatør, dvs. indenfor
 > overkommelige økonomiske rammer,  for at etablere en form for fonetisk
 > søgning på navne i en database (MySql).
 > 
 > Og her tænker jeg ikke på SoundEx som er uegnet til danske forhold.
 > Foskellige former for såkaldte "Fuzz" søgninger er vel sådan set ok, men
 > bygger i lidt for høj grad på et tilfældighedsprincip.
 > 
 > Hvilke andre muligheder er der . Nogen der har erfaring med det.?
 
 Den simple metode må være at lave et ekstra felt i tabellen, hvor
 du gemmer en fonetisk variant af ordet, og så i applikationen
 laver en funktion der konverterer ord til en unik fonetisk
 variant.
 
 For 20 år siden havde jeg noget Pascal kode der lavede noget
 lignende.
 
 Det er nok svært at lave 99.99% korrekt men 95% korrekt burde
 være nemt.
 
 Arne
  
            
             |   |   
            
        
 
            
         
           Arne Feldborg (14-11-2008) 
         
	
            | Kommentar Fra : Arne Feldborg | 
  Dato :  14-11-08 16:05 |  
  |  
 
            Arne Vajhøj <arne@vajhoej.dk> skrev Thu, 13 Nov 2008 21:23:21 -0500 
 >Den simple metode må være at lave et ekstra felt i tabellen, hvor
 >du gemmer en fonetisk variant af ordet, og så i applikationen
 >laver en funktion der konverterer ord til en unik fonetisk
 >variant.
 >
 Tjo, det havde jeg jo også fundet frem til.
 Men til det skal der jo bruges et sæt såkaldte transformationsregler,
 a'la det der bruges i SounEx bare tilpasset danske forhold. De forsøg
 jeg hidtil har set har ikke virket overbevisende.
 Men jeg ved jo at det findes, feks. hos teleselskaberne (som Gert også
 nævner) og i visse online ordbøger. spørgsmålet er bare, om der findes
 noget som vi andre almindelige folk kan bruge.
 Bare med begyndelses bogstav "A" i intervallet "Aa..." til "An..." har
 jeg registreret 500 forskellige stavemåder af efternavne - men det
 dækker vel højst over 75 forskellige navne.
 Problemet er dog egentlig ikke de mange stavemåder, men at de kommer ind
 imellem andre navne der staves på lignende måde - men udtales helt
 anderledes.
 Tag bare et eksempel som Adser - Aser - Asser. Det er nøjagtig det samme
 navn og udtales også på samme måde, men er placeret vist forskelligt i
 en alfabetisk søgning. Og selvom du udviser en vis opfindsomhed mht.
 wildcards, så  får du en masse 'uvedkommende' navne med i en søgning.
 >Det er nok svært at lave 99.99% korrekt men 95% korrekt burde
 >være nemt.
 >
 Hvis det var tilfældet, så er mærkeligt, at det ikke er mere udbredt.
 -- 
 mvh, A:\Feldborg
 Slægtsforskning og lokalhistorie i midt- vestjylland
 http://hammerum-herred.dk/
            
             |   |   
            
        
 
            
         
            Martin (14-11-2008) 
         
	
            | Kommentar Fra : Martin | 
  Dato :  14-11-08 20:23 |  
  |   
            Arne Feldborg wrote:
 > Arne Vajhøj <arne@vajhoej.dk> skrev Thu, 13 Nov 2008 21:23:21 -0500 
 > 
 > 
 >> Den simple metode må være at lave et ekstra felt i tabellen, hvor
 >> du gemmer en fonetisk variant af ordet, og så i applikationen
 >> laver en funktion der konverterer ord til en unik fonetisk
 >> variant.
 >>
 > Tjo, det havde jeg jo også fundet frem til.
 > 
 > Men til det skal der jo bruges et sæt såkaldte transformationsregler,
 > a'la det der bruges i SounEx bare tilpasset danske forhold. De forsøg
 > jeg hidtil har set har ikke virket overbevisende.
 > 
 > Men jeg ved jo at det findes, feks. hos teleselskaberne (som Gert også
 > nævner) og i visse online ordbøger. spørgsmålet er bare, om der findes
 > noget som vi andre almindelige folk kan bruge.
 > 
 > Bare med begyndelses bogstav "A" i intervallet "Aa..." til "An..." har
 > jeg registreret 500 forskellige stavemåder af efternavne - men det
 > dækker vel højst over 75 forskellige navne.
 > 
 > Problemet er dog egentlig ikke de mange stavemåder, men at de kommer ind
 > imellem andre navne der staves på lignende måde - men udtales helt
 > anderledes.
 > 
 > Tag bare et eksempel som Adser - Aser - Asser. Det er nøjagtig det samme
 > navn og udtales også på samme måde, men er placeret vist forskelligt i
 > en alfabetisk søgning. Og selvom du udviser en vis opfindsomhed mht.
 > wildcards, så  får du en masse 'uvedkommende' navne med i en søgning.
 > 
 >> Det er nok svært at lave 99.99% korrekt men 95% korrekt burde
 >> være nemt.
 >>
 > Hvis det var tilfældet, så er mærkeligt, at det ikke er mere udbredt.
 > 
 
 Nu ved jeg ikke særlig meget om dette, men på min mobiltelefon (Nokia 
 6220 Classic) har jeg slået noget til, så den prøver at udtale navnet på 
 den der ringer.
 Det lyder faktisk rimelig OK (med visse undtagelser).
 
 "Programmet" der blev downloadet til det danske sprog fyldte omkring 
 100-200kb.
 
 Måske noget lignede findes i Android (et opensource mobil operativ 
 system) så kunne man hente sourcen og se hvordan det var opbygget.
 
 Eller hvad med Windows' egen talerobot, svjv så findes den også på 
 dansk. Her kunne man måske også finde ud af hvordan det var opbygget. 
 Evt. så en af linux dist. er der måske også noget lign i.
 
 PS
 Hvis jeg er helt på vild spor, så bare ignorer denne :D
  
            
             |   |   
            
        
 
            
         
             Arne Feldborg (19-11-2008) 
         
	
            | Kommentar Fra : Arne Feldborg | 
  Dato :  19-11-08 01:39 |  
  |  
 
            Martin <martin@aarhof.invalid> skrev Fri, 14 Nov 2008 20:23:01 +0100 
 >Nu ved jeg ikke særlig meget om dette, men på min mobiltelefon (Nokia 
 >6220 Classic) har jeg slået noget til, så den prøver at udtale navnet på 
 >den der ringer.
 >Det lyder faktisk rimelig OK (med visse undtagelser).
 >
 Du har nok ret i, at en fonetisk søgning må bygge på nogen af de samme
 principper, som dem der ligger bag talesyntese.
 Men om det direkte kan overførers fra det ene system til det andet er
 måske nok mere problematisk.
 -- 
 mvh, A:\Feldborg
 Slægtsforskning og lokalhistorie i midt- vestjylland
 http://hammerum-herred.dk/
            
             |   |   
            
        
 
            
         
            Arne Vajhøj (24-11-2008) 
         
	
            | Kommentar Fra : Arne Vajhøj | 
  Dato :  24-11-08 02:25 |  
  |   
            Arne Feldborg wrote:
 > Arne Vajhøj <arne@vajhoej.dk> skrev Thu, 13 Nov 2008 21:23:21 -0500 
 >> Den simple metode må være at lave et ekstra felt i tabellen, hvor
 >> du gemmer en fonetisk variant af ordet, og så i applikationen
 >> laver en funktion der konverterer ord til en unik fonetisk
 >> variant.
 >>
 > Tjo, det havde jeg jo også fundet frem til.
 > 
 > Men til det skal der jo bruges et sæt såkaldte transformationsregler,
 > a'la det der bruges i SounEx bare tilpasset danske forhold. De forsøg
 > jeg hidtil har set har ikke virket overbevisende.
 > 
 > Men jeg ved jo at det findes, feks. hos teleselskaberne (som Gert også
 > nævner) og i visse online ordbøger. spørgsmålet er bare, om der findes
 > noget som vi andre almindelige folk kan bruge.
 > 
 > Bare med begyndelses bogstav "A" i intervallet "Aa..." til "An..." har
 > jeg registreret 500 forskellige stavemåder af efternavne - men det
 > dækker vel højst over 75 forskellige navne.
 > 
 > Problemet er dog egentlig ikke de mange stavemåder, men at de kommer ind
 > imellem andre navne der staves på lignende måde - men udtales helt
 > anderledes.
 > 
 > Tag bare et eksempel som Adser - Aser - Asser. Det er nøjagtig det samme
 > navn og udtales også på samme måde, men er placeret vist forskelligt i
 > en alfabetisk søgning. Og selvom du udviser en vis opfindsomhed mht.
 > wildcards, så  får du en masse 'uvedkommende' navne med i en søgning.
 > 
 >> Det er nok svært at lave 99.99% korrekt men 95% korrekt burde
 >> være nemt.
 >>
 > Hvis det var tilfældet, så er mærkeligt, at det ikke er mere udbredt.
 
 20 minutters eksperiementeren ledte mig til følgende:
 
      public static String convert(String s) {
          String s2 = s.toLowerCase();
          s2 = s2.replace("æ", "ae");
          s2 = s2.replace("ø", "oe");
          s2 = s2.replace("å", "aa");
          s2 = s2.replace("u", "v");
          s2 = s2.replace("ph", "f");
          s2 = s2.replace("ch", "k");
          s2 = s2.replace("th", "t");
          s2 = s2.replace("ds", "s");
          s2 = s2.replace("c", "k");
          s2 = s2.replace("z", "s");
          s2 = s2.replace("x", "s");
          StringBuilder sb = new StringBuilder();
          sb.append(s2.charAt(0));
          for(int i = 1; i < s2.length(); i++) {
              if("aeiouyæøå".indexOf(s2.charAt(i)) < 0
                 && s2.charAt(i) != s2.charAt(i-1)) {
                  sb.append(s2.charAt(i));
              }
          }
          return sb.toString();
      }
 
 Jeg ved ikke om den er 75, 90 eller 95% god - men du kan
 da bygge videre på den.
 
 Arne
 
  
            
             |   |   
            
        
 
            
         
             Arne Vajhøj (24-11-2008) 
         
	
            | Kommentar Fra : Arne Vajhøj | 
  Dato :  24-11-08 02:55 |  
  |   
            Arne Vajhøj wrote:
 > Arne Feldborg wrote:
 >> Arne Vajhøj <arne@vajhoej.dk> skrev Thu, 13 Nov 2008 21:23:21 -0500
 >>> Den simple metode må være at lave et ekstra felt i tabellen, hvor
 >>> du gemmer en fonetisk variant af ordet, og så i applikationen
 >>> laver en funktion der konverterer ord til en unik fonetisk
 >>> variant.
 >>>
 >> Tjo, det havde jeg jo også fundet frem til.
 >>
 >> Men til det skal der jo bruges et sæt såkaldte transformationsregler,
 >> a'la det der bruges i SounEx bare tilpasset danske forhold. De forsøg
 >> jeg hidtil har set har ikke virket overbevisende.
 >>
 >> Men jeg ved jo at det findes, feks. hos teleselskaberne (som Gert også
 >> nævner) og i visse online ordbøger. spørgsmålet er bare, om der findes
 >> noget som vi andre almindelige folk kan bruge.
 >>
 >> Bare med begyndelses bogstav "A" i intervallet "Aa..." til "An..." har
 >> jeg registreret 500 forskellige stavemåder af efternavne - men det
 >> dækker vel højst over 75 forskellige navne.
 >>
 >> Problemet er dog egentlig ikke de mange stavemåder, men at de kommer ind
 >> imellem andre navne der staves på lignende måde - men udtales helt
 >> anderledes.
 >>
 >> Tag bare et eksempel som Adser - Aser - Asser. Det er nøjagtig det samme
 >> navn og udtales også på samme måde, men er placeret vist forskelligt i
 >> en alfabetisk søgning. Og selvom du udviser en vis opfindsomhed mht.
 >> wildcards, så  får du en masse 'uvedkommende' navne med i en søgning.
 >>
 >>> Det er nok svært at lave 99.99% korrekt men 95% korrekt burde
 >>> være nemt.
 >>>
 >> Hvis det var tilfældet, så er mærkeligt, at det ikke er mere udbredt.
 > 
 > 20 minutters eksperiementeren ledte mig til følgende:
 > 
 >     public static String convert(String s) {
 >         String s2 = s.toLowerCase();
 >         s2 = s2.replace("æ", "ae");
 >         s2 = s2.replace("ø", "oe");
 >         s2 = s2.replace("å", "aa");
 >         s2 = s2.replace("u", "v");
 >         s2 = s2.replace("ph", "f");
 >         s2 = s2.replace("ch", "k");
 >         s2 = s2.replace("th", "t");
 >         s2 = s2.replace("ds", "s");
 >         s2 = s2.replace("c", "k");
 >         s2 = s2.replace("z", "s");
 >         s2 = s2.replace("x", "s");
 >         StringBuilder sb = new StringBuilder();
 >         sb.append(s2.charAt(0));
 >         for(int i = 1; i < s2.length(); i++) {
 >             if("aeiouyæøå".indexOf(s2.charAt(i)) < 0
 >                && s2.charAt(i) != s2.charAt(i-1)) {
 >                 sb.append(s2.charAt(i));
 >             }
 >         }
 >         return sb.toString();
 >     }
 > 
 > Jeg ved ikke om den er 75, 90 eller 95% god - men du kan
 > da bygge videre på den.
 
 Og så kom jeg selv lige i tanke om en hel stribe ekstra, så:
 
      public static String convert(String s) {
          String s2 = s.toLowerCase();
          s2 = s2.replace("æ", "ae");
          s2 = s2.replace("ø", "oe");
          s2 = s2.replace("å", "aa");
          s2 = s2.replace("u", "v");
          s2 = s2.replace("ph", "f");
          s2 = s2.replace("ch", "k");
          s2 = s2.replaceAll("([gkrst])(h)", "$1");
          s2 = s2.replace("ds", "s");
          s2 = s2.replace("nd", "n");
          s2 = s2.replace("c", "k");
          s2 = s2.replace("d", "t");
          s2 = s2.replace("w", "v");
          s2 = s2.replace("z", "s");
          s2 = s2.replace("x", "s");
          StringBuilder sb = new StringBuilder();
          sb.append(s2.charAt(0));
          for(int i = 1; i < s2.length() & sb.length() <= 5; i++) {
              if("aeiouyæøå".indexOf(s2.charAt(i)) < 0
                 && s2.charAt(i) != s2.charAt(i-1)) {
                  sb.append(s2.charAt(i));
              }
          }
          return sb.toString();
      }
 
 Arne
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |