Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Sökfunktion på befintlig webb

Postades av 2007-08-24 00:03:18 - Niklas Hultgren, i forum asp.net generellt, Tråden har 5 Kommentarer och lästs av 655 personer

Tjenare!

Jag har aldrig byggt någon sökfunktion för någon sakt tidigare. Alltså en sökfunktion som enbart söker på innehåll på den egna sajten. Någon som har några tankar och förslag innan jag gräver mig ned i koden?

Min initiala tanke är att lägga upp en tabell med sökord som matchar en viss aspx. Det borde ju vara sättet att gå, eller vad säger forumets medlemmar??

Den webb jag ämnar implementera detta på nyttjar dynamisk språkhantering (UICulture) så för varje nytt språk som läggs upp måste ju även tabellen med sökord utökas.

Tacksam för all info jag kan få.

// Nicke


Svara

Sv: Sökfunktion på befintlig webb

Postades av 2007-08-24 09:25:04 - Niklas Jansson

Har skrivit en sökmotor tidigare. Det finns ett par olika metoder, men jag har inte tid att gå igenom dem nu. Jag återkommer lite senare.
In the meantime kan du kolla på VSP, det är en helt ok metod.


Svara

Sv:Sökfunktion på befintlig webb

Postades av 2007-08-24 18:08:15 - Niklas Hultgren

Har du postat inlägg inom detta område tidigare är jag tacksam för länkar.
Ha de fint!!

// Nicke


Svara

Sv: Sökfunktion på befintlig webb

Postades av 2007-08-24 19:42:46 - Niklas Jansson

Ah, tur att du svarade, jag hade glömt helt... =)
Har väl inte postat jättemycket om det, däremot gjort i verkligheten, men kan snabbt beskriva alternativen här:

Det finns i princip två stora klasser av sökmotorer:
1. Ordbaserat
2. Ämnesbaserat

Ämnesbaserade är såna som yahoo var (och är?), och google har väl något sånt i viss mån, etc. Då finns det för varje sida ett antal ämnen, och sen letar sökmotorn upp de vettigaste sidorna givet att man själv anger ämnen.

I verkliga Internet funkar detta förstås inte jättebra; folk fuskar med meta-information, och utgår man inte från den måste folk manuellt kontrollera alla webbplatser.

Det kan däremot funka på en intern webbplats. Se till att varje person som gör en sida fyller i de keywords och ämnen som kan vara relevanta, på något lämpligt sätt (in i en databas via ett CMS, i meta-taggar, etc.).


Ordbaserade fungerar istället genom att man tittar på de enskilda orden på en sida. Det enklaste är att registrera alla ord, och ange 1 eller 0 beroende på om de finns. Lite jobbigare, men mycket bättre, är att istället ange hur många av varje ord som finns. Det finns mer komplicerade scheman, hur nära ord står varandra, och liknande.


Oavsett om man kör med ordbaserade eller ämnesbaserade så får man nu göra upp t.ex. en databas enligt:
Words(id, text)
-----
1 apa
2 banan
...

Pages(id, url)
-----
1 a.html
2 b.html
...

Occurences(page, word, count)
1 1 10
1 2 5
2 2 3
...

Vilket då säger att a.html innehåller ordet "apa" 10 gånger, och ordet "banan" 5 gånger, medan b.html innehåller ordet "banan" 3 gånger, men inte "apa" alls. ("ordet" kan naturligtvis då också vara ämnet)

Detta får man göra vid regelbundna intervall, eller så fort någon lägger in en ny sida.

Nu finns det två saker kvar innan det blir en sökmotor; selection och ranking. Det enklaste är Boolean search utan ranking.

Då gör man helt enkelt så att om någon skriver in ordet "apa" i sökmotorn så söker man fram ID=1, och använder det för att leta upp alla Occurences där WordID = 1. Alla matchande PageID visar man upp. Utöver detta kan man kombinera med andra ord och dessutom lägga till saker som "AND", "OR" och "NOT" för att välja ut rätt sidor (detta genom att göra mängdoperationer på resulterande tabeller).

Om man vill ha ranking - och det vill man - så kan man lägga till en popularitet. Användare kan till exempel rösta på sidor för att lägga vissa sidor högst upp, eller så kan man konstruera något motsvarande PageRank.


Hur som helst: jag tycker inte du ska använda metoden ovan, den är ganska omständig att få vettiga resultat ifrån, det kräver mycket röstning etc. Vad jag tycker att du ska göra istället är den så kallade Vector space model, VSM.

Principen är rätt enkel: tänk dig att vi bara har två ord, "apa" och "banan".

Vi bestämmer nu att nu "apa" är på x-axeln, och "banan" är på y-axeln. Detta ger ett rutnät. Varje sida kan nu sättas in i det här rutnätet. Den första sidan ("a.html") kommer ligga på punkten (10, 5), och den andra ("b.html") på (0,3).

Nu tar vi först och gör så att avståndet till (0,0) är 1, vi delar med avståndet. Den första hamnar då på (2/sqrt(5), 1/sqrt(5)) = (0.89, 0.45) och den andra på (0,1). Är du fortfarande med?


En sökning är nu en rad ord, man kan till exempel ange apa 4 gånger och banan 3. Det vanliga är att man bara anger varje ord en gång, förstås. Detta ger ytterligare en punkt i rutnätet, den här gången i punkten (4/5, 3/5) = (0.8, 0.6). Det enda som är kvar nu är att kolla vilken av sidorna som är närmast.


Det kanske låter komplicerat, men det är det inte. I praktiken gör man bara så här:
1. Du får en rad ord som söksträng, kolla upp dem i Words-tabellen.
2. För varje ord X i söksträngen (med n förekomster, n brukar vara 1):
2.1. Nu hämtar du ut allt ur Occurences som innehåller ordet X.
2.2. Multiplicera Count:en med n, kalla detta y.
3. Nu summerar du y för varje sida, typ "SELECT PageID, SUM(y) FROM ... GROUP BY PageID"
4. Det sista du gör är att dividera varje sånt tal med antalet ord i kvadrat för resp. sida. Kalla detta z.
5. Sortera på z. Den som har högst värde ligger närmast sökningen.

För att ta exemplet ovan (men vi lägger till ett nytt ord citron):
sida A: 10 apa, 5 banan, 0 citron
sida B: 0 apa, 3 banan, 3 citron
söksträng: 4 apa, 3 banan.

Vi börjar med sida A:
apa: 10 (från sidan) * 4 (från söksträngen) = 40
banan: 5 (sidan) * 3 (sökning) = 15
citron: 0 * 0 = 0
y = 40 + 15 + 0 = 55
"Längden" på sidan: sqrt(apa^2 + banan^2 + citron^2) = sqrt(10*10 + 5*5 + 0*0) = sqrt(125)
z = 55/sqrt(125) = 4.9

Sida B:
apa: 0 (sidan) *4 (sökning) = 0
banan: 3 (sidan) * 3(sökning) = 9
citron: 3 (sidan) * 0(sökning) = 0
y = 9
"längden" på sidan = sqrt( 0*0 + 3*3 + 3*3) = sqrt(18)
z = 9/sqrt(18) = 2.1

That's it. Förstår att det blir lite virrigt med så mycket text. Men jag kan nästan garantera dig: Använder du något för enkelt blir resultaten inte bra ändå. Den här sistnämnda är den viktigaste och mest hållbara.


Svara

Sv:Sökfunktion på befintlig webb

Postades av 2007-08-24 20:27:19 - Niklas Hultgren

Tack verkligen!!! Ska ta del av detta omgåendes!

// Nicke


Svara

Sv: Sökfunktion på befintlig webb

Postades av 2007-08-24 23:15:54 - Niklas Jansson

Kom på att det finns två andra saker att ta hänsyn till.

För det första så ska man som ett första steg i VSM-metoden ta bort alla ord som finns i mer än x% av sidorna, oftast 50%. De är för vanliga (typ "och"), och tjänar inget till att ha med i sökningen. Det första man gör är därför att filtrera bort alla de orden, och sen kör.

För det andra är det ganska enkelt att införa röstning i VSM också, ifall man känner att det behövs. Principen är helt enkelt att man på något sätt får input om att "den här sidan passade inte så bra in på den här sökningen".

Om vi tar första exemplet, vad man gör då är att om sökningen till exempel innehåller 4 "apa" och 3 "banan", och sidan som tidigare har 10 "apa" och 5 "banan", så väljer man en liten faktor a, kanske 0.01 eller 0.1 (detta avgör hur snabbt rankingen ändras).

Sen multiplicerar man varje tal i sökningen med a, och drar ifrån detta från sidan. om vi tar a = 0.1 får vi då
0.4 "apa" och 0.3 "banan", vi drar bort det från sidan och får
10 - 0.4 = 9.6 "apa"
5 - 0.3 = 4.7 "banan"

Jag tror att det räcker att sätta talet till 0 om det blir mindre än 0.


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 168
27 952
271 704
1 392
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies