Jag skulle vilja jämföra två texter och få fram något slags resultat över hur "lika" de är. Bakgrunden är följande; jag håller på med ett ärendehanteringssystem och det kan där röra sig om tusentals ärenden. När en användare skriver in ett nytt ärende så vill jag att det ska kunna jämföras med tidigare ärenden och att man ska få fram en lista på ärenden som kan tänkas vara identiska (dvs att de beskriver samma bugg eller önskemål). Med andra ord vill man ju jämföra nyckelord i texterna. Exempel: levenschtein avstånd kanske går att använda på nåt sätt. (Dock INTE genom att jämföra två fulltexter med varandra direkt). http://en.wikipedia.org/wiki/Levenshtein_distance De första stegen borde vara att... Oj! På mitt förrförra jobb byggde vi precis en sådan applikation med hjälp av vår egenutvecklade (Javabaserade) sökplattform Theca. Det är precis som Johan skrev inte ett litet projekt du funderar på, naturligtvis beroende på hur avancerat du vill ha det. Jag kan tyvärr inte säga något om implementationen, men om du är intresserad av att betala för en produkt som gör det åt dig (möjligen bättre än någon annan produkt på marknaden) så kan du läsa mer här: http://www.apptus.com/o.o.i.s/495 Tack för alla tips och synpunkter. Man kanske skulle överlåta åt användaren att ange nyckelord? Inte genom att behöva skriva in dom manuellt, det kommer dom aldrig att orka i längden, men kanske genom att dubbelklicka på de ord som de anser vara nyckelord (som inte redan är identifierade i databasen) och att dessa då markeras med någon färg. Fast troligen tröttnar dom på det också efter ett tag... Om du lägger in SQL Servers fulltextindex, så kan du ange massa egna ord som inte skall indexeras (i filen "noice.sve" har jag för mig) Tackar, det skall jag titta på... Från BOL: Är det ingen som har funderat på att jämföra med hjälp av algoritmer så som Soundex och alla dess förbättrade kusiner ? Soundex är hyfsad på att jämföra om två engelska ord låter likt varandra. Den kan inte användas till att jämföra två texters innehåll. Christoffer, Aha, nu förstår jag vad du menar. Jo, det är klart att man kan använda Soundex till att tillåta viss feltolerans för felstavningar när man jämför ord. Det finns dock andra bättre metoder för det.Text analys - Hur lika är två texter?
Ärende 1 : "Applikationen kraschar (UniqueConstraintException) när man lägger upp en ny kund"
Ärende 2 : "Krasch i kunddialogen. Felmeddelande : System.Data.UniqueConstraintException in CustomerDL.AddCustomer"
Här skulle man ju vilja att orden "Krasch(ar)", "Kund(dialogen)", "UniqueConstraintException" känns igen.
Helst ska det ju vara en analys (parsning) man gör en gång på ett ärende och där man sedan lagrar resultatet i databasen, och att man sedan jämför med det färdiga resultatet när nya ärenden läggs upp. Det får ju inte ta för lång tid...
Observera att jag inte är intresserad av NEAR och LIKE-sökningar utan snarare att få ut en siffra som är hög när texterna med stor sannolikhet diskuterar samma ämne och låg när de verkar vara helt olika. Jag vill t ex få ut de tio ärenden som mest sannolikt beskriver samma sak som det nyinmatade ärendet.
Jag har ingen riktigt bra angreppsvinkel på problemet, känner någon till något om det här? Finns det färdiga algoritmer för detta? Tredjepartskomponenter? Kan man använda SQL-Server Full-Text Indexing Services?Sv: Text analys - Hur lika är två texter?
Sv: Text analys - Hur lika är två texter?
* Plocka bort skiljetecken
* Dela upp texten i ord
* Skaffa en lista (eller gör en själv) över hur vanliga olika ord är i svenskan
* Från texten filtrera bort vanliga ord (kanske även korta).
Då har du kvar presumptiva nyckelord.
Kanske skulle man sedan kunna skapa en avbildning nyckelord -> ärende och räkna hur många ärenden olika nyckelord finns i och på så sätt hitta misstänkta identiska ärenden. En viss mänsklig intervention kan man dock nog inte komma från.Sv:Text analys - Hur lika är två texter?
Är det inte detta som sökmotorer handlar om? Du kan säkert hitta mängder med olika tekniker för olika ändamål på nätet. Svårigheten är att balansera dessa mot varandra och göra en god avvägning av vikten av respektive metod för ditt ändamål och dessutom göra det hela snabbt. När du är klar tror jag du är redo för en doktorsavhandling.
Vad jag försöker säga är att det är inte helt lätt detta området och du bör nog överväga att köpa en färdig teknik. T.ex. så vet jag att google licensierar ut sin motor till intresserade spekulanter. Och om du nu verkligen vill göra en sökmotor själv så var beredd på mycket studier först och sedan mycket finlir för att putsa till att resultatet blir någrlunda användbart. Och även då efter mycket möda så skall du inte förvänta dig för mycket.
Det är inte min avsikt att nedvärdera dina kunskaper (eftersom jag inte har någon aning om dessa) eller att vara elak. Jag vill bara påpeka att detta är ett stort område du ger dig in på. Det är inget fel i att göra så, en man bör vara beredd på vad det innebär.
// JohanSv: Text analys - Hur lika är två texter?
Sv:Text analys - Hur lika är två texter?
Jag kan tänka mig att köpa tekniken om den inte kostar för mycket (<$500 typ)...
Jag börjar dock undra över hur bra det kommer att fungera i praktiken, även om man köper en kommersiell produkt? Om det inte kommer att fungera bra så är det meningslöst att ägna det mer tankeverksamhet. Vad tror ni som vet lite mer om det här? Man kan ju jämföra med hur svårt det ibland kan vara att hitta rätt information på google ibland (och förvisso också väldigt lätt i andra fall), men å andra sidan så kommer det handla om betydligt mindre informationsmängd i mitt fall. Det kanske blir lättare då?
Jag kanske skall nöja mig med att titta på SQL-Serverns Full-text indexerings-teknik så att användarena åtminstonde kan ställa lite mer avancerade frågor (med NEAR o s v). Någon som har erfarenhet av den tekniken? Fungerar den bra?Sv: Text analys - Hur lika är två texter?
Sv:Text analys - Hur lika är två texter?
Sen kan du göra en viktad sökning, där varje ord viktas mot en befintlig CONTAINSTABLE. då kan resultatet sorteras på RANK, och jag tror att det är så nära du kan komma...
/mickeSv: Text analys - Hur lika är två texter?
Vet du om CONTAINSTABLE automatiskt viktas baserat på hur många förekomster som finns eller måste jag klura ut något sätt att vikta begreppen?Sv:Text analys - Hur lika är två texter?
Queries using CONTAINSTABLE specify contains-type full-text queries that return a relevance ranking value (RANK) for each row.
Det ser ut som om det det är automatiskt.
/mSv: Text analys - Hur lika är två texter?
Sv:Text analys - Hur lika är två texter?
Sv: Text analys - Hur lika är två texter?
Klart du den. Fast du får givetvis loopa igenom texterna och "betygsätta" dem. Vill du markera saker som är olika, fast med en viss totlerans på felstavningar och liknande ord så fungerar det lika bra? :)Sv:Text analys - Hur lika är två texter?
Men grundproblemet här är ju inte att jämföra två ord med varandra, utan att jämföra två hela texter.