Hur jämföra texter?

Tråden skapades och har fått 11 svar. Det senaste inlägget skrevs .
1

Hej

Jag har två texter. Jag vill veta hur olika de är. Värdet kan spottas ut som procent eller något annat. Det viktiga är att det går att fatta. Det är inte viktigt att få reda på VAD som är olika, bara graden av fel.

Guldexemplet skulle vara en webbsida med två fält där jag kunde peta in texterna och få ett värde tillbaka, rakt upp och ner. (Samt helst att algoritmen för att få fram värdet var tillgänglig.)

Jag minns att detta kallas något speciellt, men jag kan inte för mitt liv minnas vad. Principen formulerades ungefär som "hur många förändringar måste man göra på ena texten för att den ska bli andra texten?". Hur som helst - vet någon om det finns en sådan funktion på nån site där ute?

  • Oregistrerad
  • 2002-07-13 00:44

Inte för att det hjälper dig, men jag hade en lab. när jag läste en kurs om OS, vilken just gick ut på att jämföra två texter och peta ut resultatet i procent. Vi gjorde laben i shellscript om jag inte mins fel. Där la man iaf. ihop alla teckens ASCII värde i texterna, var för sig så klart, och jämförde sedan resultatet. Har tyvärr inte kvar "programmet" men det var förvånansvärt hur lite kod det var. Kanske någon händig kan fixa ett liknade script. Förmodligen borde jag kunna fixa det igen. Men det kanske är någon som har en lösning färdig så vore det det betydligt smidigare, och mycket snabbare.

Där la man iaf. ihop alla teckens ASCII värde i texterna, var för sig så klart, och jämförde sedan resultatet.

Hur menar du? Om a = 65 och b = 66 och man har texten "ab" ger den då värdet 131? Som man jämför med texten "ba" som också får värdet 131? Anses då "ab" = "ba"? Eller missförstod jag något?

Har tyvärr inte kvar "programmet" men det var förvånansvärt hur lite kod det var. Kanske någon händig kan fixa ett liknade script. Förmodligen borde jag kunna fixa det igen. Men det kanske är någon som har en lösning färdig så vore det det betydligt smidigare, och mycket snabbare.

Tja, det ramlar ju inte in mängder med svar precis... Om du känner för det får du gärna knåpa lite. Eller iaf skriva ner programmet som någon slags pseudokod så jag fattar hur du menar och kan återskapa det i något annat språk för mina testbehov...

Om inget annat kanske du minns vad hela grejen med att jämföra texter på detta sätt heter? Jag vet fortfarande inte riktigt vad jag ska söka efter på nätet...

Är du ute efter det som kallas "string distance"? Du kan leta efter en algoritm som heter "minimum edit distance" och söka på namn som "Wagner", "Fischer", "Levenshtein", "Viterbi", "Forward", CYK" och Early".

Om du inte hittar något så har jag algoritmen i någon form av kod någonstans som jag kan leta rätt på. Jag kommer inte ihåg om jag använde C eller Java, men jag antar att det var C.

  • Oregistrerad
  • 2002-07-15 13:24

Nej du förstod helt riktigt, och det är väl en av svagheterna med algoritmen, alltså att ab och ba ger samma resultat.

Tänkte titta runt lite på nätet om det fanns några färdiga program som jämförde text, och det gör det. Apple har ett som heter FileMerge, som följer med på Dev. CDn till OSX. DifferencesExaminer är ett annat, också det till OSX.

Vidare finns det ganska bra exempel på www.php.net där man använder sig av strcmp.

Citat:

quote:Skapades ursprungligen av: theJoker:
Är du ute efter det som kallas "string distance"? Du kan leta efter en algoritm som heter "minimum edit distance" och söka på namn som "Wagner", "Fischer", "Levenshtein", "Viterbi", "Forward", CYK" och Early".

Om du inte hittar något så har jag algoritmen i någon form av kod någonstans som jag kan leta rätt på. Jag kommer inte ihåg om jag använde C eller Java, men jag antar att det var C.

Huvudet på spiken! Du har kommit med riktigt bra ledtrådar där - och söktermer som faktiskt ger resultat! Stort tack.

Och jag tittar väldigt gärna på din kod, om du hittar den.

Nej du förstod helt riktigt, och det är väl en av svagheterna med algoritmen, alltså att ab och ba ger samma resultat.

Oookej. Och eftersom "ab" inte är samma sak som "ba" är det onekligen ett litet problem med din algoritm. Men tack ändå.


Tänkte titta runt lite på nätet om det fanns några färdiga program som jämförde text, och det gör det. Apple har ett som heter FileMerge, som följer med på Dev. CDn till OSX. DifferencesExaminer är ett annat, också det till OSX.

Det de gör är samma som funktion som finns i BBEdit, vilket alltså inte är det jag efterfrågade.


Vidare finns det ganska bra exempel på www.php.net där man använder sig av strcmp.

Citat:

code:<pre style="font-size:x-small; font-family: monospace;">int strcmp ( string str1, string str2)

Returns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal. </pre>

Jag kanske inte fattar, hur menar du att detta skulle hjälpa mig?

  • Oregistrerad
  • 2002-07-16 00:12

hmm, jag kanske inte var med på detta iaf. Du vill alltå inte ha ut VAD som är olika utan bara HUR olika de är. Då får jag nog tänka om lite. Med strcmp får man ut ett värde som är större än 0 om string1 är "större" än string2 och mindre än 0 om sting1 är "mindre" än sträng2. Men den bygger på ASCII-värdet av bokstäverna. Så den säger inte så mycket egentligen, bara hur ASCII-summorna förhåller sig till varandra inget om graden av fel. Problemet växte visst ganska mycket plötsligt. Hur definerar du graden av fel? Är det rent språkligt är det ju riktigt jobbigt. Är det däremot tecken för tecken är det lättare. Men då är ju också frågan om man jämför ett a mot ett g är det mer fel än ett a mot ett b?

  • Medlem
  • 2002-07-16 03:18

diff är ju en ganska het kandidat om du skapar en diff fil och drar ett värde på den men vad ska du använda det till, beror lite på om detta skulle pass i detta fall även om diff kan ge stegvisa skillnader. Tror inte riktigt jag fattar vart du vill komma lite mer info om vad du vill göra vore nog bra för jag kanske är ute och vandrar för ditt ändamål...

Ni får gärna kalla mig obegåvad i ämnet, men jag måste ändå fråga:
Varför vill man göra något dylikt???

Citat:

quote:Skapades ursprungligen av: Fredrik Dolk:
Ni får gärna kalla mig obegåvad i ämnet, men jag måste ändå fråga:
Varför vill man göra något dylikt???

Jag tror att det beror på många grabbars inneboende behov av att mäta, räkna och väga. Men vacker poesi måste väl ändå gå fri från sådan här penetrering. Detta är ärligt, ingen av de kvinnor jag känner skulle komma på att våldföra sig på en text , dela upp den i små delar och göra matematik av alltsammans.

Det närmast användbara i genren som jag kan komma på är läsvärdesindex som något lite antyder graden av lätthet att läsa, men det säger inget om övriga kvaliteter och är väl därför en ganska tveksam varudeklaration.

Helt plötsligt blev detta en tråd för komiker. Otippat!


Ni får gärna kalla mig obegåvad i ämnet, men jag måste ändå fråga:
Varför vill man göra något dylikt???

Ett av de i särklass vanligaste användningsområdena för detta inom vanliga konsumentprogram är stavningskontrollerare. Betänk följande scenario:

Användare skriver cyckel och väljer rättstavning. Programmet letar då efter detta ord i sin databas. När den inte hittar det anses det vara felstavat, och då ska det presenteras ord som är så närliggande som möjligt. Och hur får man veta vad som är närliggande? Jo, man går igenom alla ord i databasen och jämför med det felstavade ordet. Vilket rättstavat ord är närmast detta felstavade dito? Vanligen visar man användaren de tio mest troliga orden och överlämnar det slutliga valet till den.

Detta är ett av många användningsområden för detta.

Och till Olav: Förhoppningsvis är det tillåtet att skapa vacker poesi, även om den inte innehåller stavfel.

1
Bevaka tråden