/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Databasedesign til søgeord
Fra : Henrik Stidsen


Dato : 01-03-06 16:45

Jeg skal have defineret en database til at indeholde søgeord for en
masse dokumenter.

Det skal være muligt at søge på enkeltord og på sætninger -
hvordan får jeg bygget denne database op mest hensigtsmæssigt ?

Enkeltord er ikke noget problem - men sætninger... jeg har umidelbart
tænkt at kunne være noget med at gemme ordet, hvilket ord der er
foran og hvilket der er bagved for på den måde at kunne opbygge
sætningerne igen. Ulempen er bare at det vil give mig en gigantisk
tabel (der er over 20.000 søgeord...) hvis de også skal kobles sammen
med hvilket dokument de findes i. At gemme hele sætningerne lyder
heller ikke ligefrem optimalt.

Det er ikke til at finde noget om det emne på google så nu prøver
jeg her - nogen ideer til hvordan det gøres mest effektivt ?


 
 
torben (01-03-2006)
Kommentar
Fra : torben


Dato : 01-03-06 17:55

Henrik Stidsen wrote:
> Jeg skal have defineret en database til at indeholde søgeord for en
> masse dokumenter.
>
> Det skal være muligt at søge på enkeltord og på sætninger -
> hvordan får jeg bygget denne database op mest hensigtsmæssigt ?
>
> Enkeltord er ikke noget problem - men sætninger... jeg har umidelbart
> tænkt at kunne være noget med at gemme ordet, hvilket ord der er
> foran og hvilket der er bagved for på den måde at kunne opbygge
> sætningerne igen. Ulempen er bare at det vil give mig en gigantisk
> tabel (der er over 20.000 søgeord...) hvis de også skal kobles sammen
> med hvilket dokument de findes i. At gemme hele sætningerne lyder
> heller ikke ligefrem optimalt.
>
> Det er ikke til at finde noget om det emne på google så nu prøver
> jeg her - nogen ideer til hvordan det gøres mest effektivt ?
>

Uden at vide noget som helst om det. Men kan ikke bare opfatte en
sætning som en samling af enkelt ord ?

Torben

Henrik Stidsen (01-03-2006)
Kommentar
Fra : Henrik Stidsen


Dato : 01-03-06 18:42

torben has brought this to us :
> Uden at vide noget som helst om det. Men kan ikke bare opfatte en sætning som
> en samling af enkelt ord ?

Det kan man godt, men hvis jeg vil søge efter sætningen "han gik en
tur" så vil det jo også give et hit hvis der på siden står:
"Borgmesteren og de øvrige fra byrådet gik af efter tur. Han (Bent)
sagde det var en god oplevelse at være med." - og det er jo ikke
ligefrem det der blev søgt efter...

Så det er sådan set rækkefølgen jeg gerne vil kunne søge på også.

--
Henrik Stidsen - http://henrikstidsen.dk/
"To be or not to be. That's not really a question." - Jean-Luc Godard



torben (01-03-2006)
Kommentar
Fra : torben


Dato : 01-03-06 21:44

Henrik Stidsen wrote:
> torben has brought this to us :
>
>> Uden at vide noget som helst om det. Men kan ikke bare opfatte en
>> sætning som en samling af enkelt ord ?
>
>
> Det kan man godt, men hvis jeg vil søge efter sætningen "han gik en tur"
> så vil det jo også give et hit hvis der på siden står: "Borgmesteren og
> de øvrige fra byrådet gik af efter tur. Han (Bent) sagde det var en god
> oplevelse at være med." - og det er jo ikke ligefrem det der blev søgt
> efter...
>
> Så det er sådan set rækkefølgen jeg gerne vil kunne søge på også.
>

Er det hele dokumentets tekst du vil søge igennem eller er det kun et
"abstract", det skal være muligt at søge i ?

Hvis det kun er et abstarct tror jeg ikke du vil få "særlig mange"
forkerte hits ved at opfatte en sætning som en samling af ord.

Torben

Henrik Stidsen (01-03-2006)
Kommentar
Fra : Henrik Stidsen


Dato : 01-03-06 22:30

torben explained :
> Er det hele dokumentets tekst du vil søge igennem eller er det kun et
> "abstract", det skal være muligt at søge i ?

Det er hvad der svarer til indholdet af en skabelon - f.eks. teksten på
en hjemmeside hvor menuer, reklamer, billeder osv er siet fra.

> Hvis det kun er et abstarct tror jeg ikke du vil få "særlig mange" forkerte
> hits ved at opfatte en sætning som en samling af ord.

Nej det er nok rigtigt - men hvis man nu på en nem måde kunne gøre det
"rigtigt" ville det være fedt :)

--
Henrik Stidsen - http://henrikstidsen.dk/
"Is this now?" - Agatha, The Minority Report



Martin Kaltoft (01-03-2006)
Kommentar
Fra : Martin Kaltoft


Dato : 01-03-06 19:00

> Det skal være muligt at søge på enkeltord og på sætninger -
> hvordan får jeg bygget denne database op mest hensigtsmæssigt ?

Mon ikke det ville være bedst i længden at bruge et databasesystem der kan
lave full-text indeks og søgninger?

F.eks mysql kan dette...

--
Med venlig hilsen

Martin Kaltoft

Henrik Stidsen (01-03-2006)
Kommentar
Fra : Henrik Stidsen


Dato : 01-03-06 19:13

Martin Kaltoft presented the following explanation :
>> Det skal være muligt at søge på enkeltord og på sætninger -
>> hvordan får jeg bygget denne database op mest hensigtsmæssigt ?

> Mon ikke det ville være bedst i længden at bruge et databasesystem der kan
> lave full-text indeks og søgninger?

Joo, bortset fra at dataene ikke ligger i databasen i første omgang -
eller rettere, det gør noget af det, men det ligger ikke samlet.

> F.eks mysql kan dette...

Og det er MySQL den skal køres på.

--
Henrik Stidsen - http://henrikstidsen.dk/
"Advertising is the art of convincing people to spend money they don't
have for something they don't need." - Will Rogers



Michael Zedeler (01-03-2006)
Kommentar
Fra : Michael Zedeler


Dato : 01-03-06 22:26

Henrik Stidsen wrote:
> Jeg skal have defineret en database til at indeholde søgeord for en
> masse dokumenter.
>
> Det skal være muligt at søge på enkeltord og på sætninger -
> hvordan får jeg bygget denne database op mest hensigtsmæssigt ?
>
> Enkeltord er ikke noget problem - men sætninger... jeg har umidelbart
> tænkt at kunne være noget med at gemme ordet, hvilket ord der er
> foran og hvilket der er bagved for på den måde at kunne opbygge
> sætningerne igen. [klip]
>
> Det er ikke til at finde noget om det emne på google så nu prøver
> jeg her - nogen ideer til hvordan det gøres mest effektivt ?

Der er ingen tvivl om at det mest effektive er, at finde et færdigt
værktøj, som kan det, du har brug for. Hvis du alligevel beslutter dig
for at lave det selv, kan du lave en tabel med ord, der er udstyret med
id'er og en anden tabel, der indeholder par af den slags id'er og en
reference til et dokument, hvor hver række indikerer at de to ord
forekommer efter hinanden i det pågældende dokument. Du har helt ret i
at det bliver enormt. Jeg har lavet noget lignende og det fungerer, men
man skal vænne sig til tanken om tabeller med hundredetusinder eller
millioner af rækker. Desuden er anvendelsen så specialiseret at
relationelle databaser ikke performer så godt som mere specialiserede
indeksfiler (f. eks Sleepycat DB).

Ellers kan man også overveje at putte ordpar i en tabel. Det lyder måske
lidt underligt, men jeg tror at det kunne performe godt, fordi at det
ikke kræver mere end én forespørgsel på et stor, men iøvrigt også pænt
indekseret tabel.

Eksempel:

I databasen er teksten

"Termodynamikken f.ex. Men du vil ikke kunne se fejlene i den før du
forstår polaritetsprincippet fuldtud. Men så bliver de til gengæld
indlysende."

(Et par helt tilfældige sætninger sakset et sted fra usenet af. Ingen
nævnt, ingen glemt.)

Som giver ordtabellen

0 Termodynamikken
1 f.ex.
2 Men
3 du
4 vil
5 ikke
6 kunne
7 se
8 fejlene
9 i
10 den
11 før
12 du
13 forstår
14 polaritetsprincippet
15 fuldtud.
16 Men
17 så
18 bliver
19 de
20 til
21 gengæld
22 indlysende.

(der skal tages højde for upper/lower case og specialtegn skal fjernes
eller behandles) og forbindelsestabellen

Ord1   Ord2   Dokument
0   1   1
1   2   1
....
21   22   1

(Trivielt da der kun er et dokument.)

Det var første forslag (man skal nok have en tredie tabel med
forbindelser imellem enkeltord og dokumenter også). Problemet er, at man
skal joine disse tabeller for overhovedet at få søgeresultater.

Andet forslag ovenfor er blot tabellen

Ord1      Ord2      Dokument
termodynamikken   f.ex.      1
f.ex.      men      1
men      du      1
du      vil      1
vil      ikke      1
....
gengæld      indlysende   1
indlysende   NULL      1

Her kan man søge på ét ord med

SELECT DISTINCT Dokument FROM ordpar WHERE Ord1=<ord>

og man kan søge på dokumenter med en sætning med

SELECT COUNT(*) AS Forekomster, Dokument FROM ordpar
WHERE (Ord1=<ord1> AND Ord2=<ord2>)
OR (Ord1=<ord2> AND Ord2=<ord3>)
....
OR (Ord1=<ord n-1> AND Ord2=<ord n>)
GROUP BY Dokument
HAVING Forekomster=n-1

Hvor der er ialt n ord i den sætning, man søger efter. Bemærk at det
ikke kræver et mangedobbelt join. Man kan nøjes med at lade databasen
tælle op for at se om alle ordene er med. Man kan endda bruge det til at
rankere efter:

SELECT COUNT(*) AS Forekomster, Dokument FROM ordpar
WHERE (Ord1=<ord1> AND Ord2=<ord2>)
OR (Ord1=<ord2> AND Ord2=<ord3>)
....
OR (Ord1=<ord n-1> AND Ord2=<ord n>)
GROUP BY Dokument
ORDER BY COUNT(*) DESC

Der skal ikke være nogen tvivl om at færdige produkter vil kunne løse
opgaven med langt mindre indsats (og sikkert bedre), men det er nu meget
sjovt at lave den slags selv

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

Michael Zedeler (01-03-2006)
Kommentar
Fra : Michael Zedeler


Dato : 01-03-06 22:28

Michael Zedeler wrote:
> Der skal ikke være nogen tvivl om at færdige produkter vil kunne løse
> opgaven med langt mindre indsats (og sikkert bedre), men det er nu meget
> sjovt at lave den slags selv

P.s. begge metoder giver ikke helt præcise resultater. De medtager
falske positiver.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

Henrik Stidsen (01-03-2006)
Kommentar
Fra : Henrik Stidsen


Dato : 01-03-06 22:33

Michael Zedeler used his keyboard to write :
> Der skal ikke være nogen tvivl om at færdige produkter vil kunne løse opgaven
> med langt mindre indsats (og sikkert bedre), men det er nu meget sjovt at
> lave den slags selv

Det lyder lige lovligt avanceret og omfattende - og det er desværre
ikke bare et "for sjov" projekt, det skal gerne være effektivt og
brugbart uden at tage et halvt år at udvikle :)

--
Henrik Stidsen - http://henrikstidsen.dk/
"Is this now?" - Agatha, The Minority Report



Carsten Pedersen (03-03-2006)
Kommentar
Fra : Carsten Pedersen


Dato : 03-03-06 10:19


"Henrik Stidsen" <nntpspam@hs235.dk> skrev i en meddelelse
news:mn.0d497d63b0c7180a.34878@news.hs235.dk...
> Michael Zedeler used his keyboard to write :
>> Der skal ikke være nogen tvivl om at færdige produkter vil kunne løse
>> opgaven med langt mindre indsats (og sikkert bedre), men det er nu meget
>> sjovt at lave den slags selv
>
> Det lyder lige lovligt avanceret og omfattende - og det er desværre ikke
> bare et "for sjov" projekt, det skal gerne være effektivt og brugbart uden
> at tage et halvt år at udvikle :)

Bare en tanke. Er det muligt at gemme selve dokumenterne i databasen? I så
fald kan det sikkert laves med nogle få, enkle søgninger.


Mvh


C@rsten



Henrik Stidsen (04-03-2006)
Kommentar
Fra : Henrik Stidsen


Dato : 04-03-06 01:18

Carsten Pedersen expressed precisely :
> Bare en tanke. Er det muligt at gemme selve dokumenterne i databasen? I så
> fald kan det sikkert laves med nogle få, enkle søgninger.

Nogen af dem ligger der allerede, men kun nogle af dem og de er spredt
ud i forskellige formater, tabeller osv.

--
Henrik Stidsen - http://henrikstidsen.dk/
"To be or not to be. That's not really a question." - Jean-Luc Godard



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409079
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste