|
| 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
| |
|
|