Kom ihåg mig?
Home Menu

Menu


Grym funktion för att förkorta texter?

Ämnesverktyg Visningsalternativ
Oläst 2008-07-04, 03:00 #1
totoos avatar
totoo totoo är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2006
Inlägg: 730
totoo totoo är inte uppkopplad
Mycket flitig postare
totoos avatar
 
Reg.datum: Nov 2006
Inlägg: 730
Tjo

Jag undrar om det finns någon erkänd intelligent funktion för att förkorta texter till en given längd och som tar hänsyn till ord, och gärna hela meningar. Jag håller på med en sån funktion själv, men jag sätter en femma på att någon annan har gjort en snyggare lösning med mindre kod, för jag blir inte helt nöjd med mitt.

Jag skulle vilja att man anger en maxlängd, och så försöker den få en hel mening inom maxlängden (att den bryter vid punkt, utropstecken eller frågetecken, typ), om det inte finns något sånt bryter den vid ett mellanslag eller annat skiljetecken. Den ska även vara säker för idiotisk input, t.ex. att det inte finns något godkänt skiljetecken, så typ wordwrap borde vara integrerat.

Det behövs kanske viss tweakning för att det ska fungera bra för alla situationer, men målsättningen är att få hela meningar. Men om t.ex. första meningen är skitkort (typ "hej!"), och andra är så lång att den blir klippt efter 15 ord, då vill man kanske trots allt klippa mitt i andra meningen istället för att ta bort den helt, eftersom den korta versionen är helt intetsägande.

Typ, jag vet inte vad som är optimalt, men det skulle inte förvåna mig om det finns en finfin lösning någonstans att ta del av.
totoo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-07-04, 09:22 #2
Daniel.sts avatar
Daniel.st Daniel.st är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2006
Inlägg: 762
Daniel.st Daniel.st är inte uppkopplad
Mycket flitig postare
Daniel.sts avatar
 
Reg.datum: Jul 2006
Inlägg: 762
Låter inte helt enkelt att lösa men en spännande utmaning Misstänker att du behöver någon form av ordlista i botten för att kunna plocka fram synonymer, ev. förkortningar, ordformer, ord som går att skriva ihop osv. Det finns en ganska bra ordlista här som man kan använda (kika på om licensen fungerar bara).
Daniel.st är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-07-04, 09:31 #3
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Det är två funktioner du eftersträvar. Dels en som klipper text vid lämpliga tecken, som mellanslag eller skiljetecken.
Dels en avstavningsfunktion som ger ytterligare möjligheter till platser att bryta ord på.
Den första är trivial. Klipp text vid maxlängden, sök sedan bakifrån efter lämpligt skiljetecken. Eventuellt har du någon algoritm för vad som är lämpligast när du hittar flera olika skiljetecken inom ett visst avstånd från slutet.
Problem: UTF8 innebär att du måste söka och ange klippets position med multibyte-säkra funktioner, annars ser det inte kul ut.
Det andra är avstavning och här måste du använda listor eller regelsamlingar för att få ut förslag på positioner inom orden. När du väl har positioner inom orden så kan du enkelt tillämpa metoden i första avsnittet.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-07-04, 10:22 #4
totoos avatar
totoo totoo är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2006
Inlägg: 730
totoo totoo är inte uppkopplad
Mycket flitig postare
totoos avatar
 
Reg.datum: Nov 2006
Inlägg: 730
Magnus_A, det är något åt det hållet jag har gjort nu. Ungefär såhär jobbar funktionen:

1: Klipp vid maxlängden, oberoende av innehåll.
2: Ta fram två olika brytbara positioner.
2.1: Leta efter mellanslag, kommatecken och lite "fula brytningar, men hela ord"
2.2: Leta efter punkt, utropstecken, frågetecken, newline (hela meningar)
3: Jämföra position med 2.2 och textens totala längd. Om 2.2 finns (finns normalt, men inte alltid) och visar mer än 30% (som mitt exempel i förra inlägget ("hej1") så används 2.2, annars används 2.1

Det verkar fungera helt okej, men det är inte så jättehårt testat än.
totoo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-07-04, 12:45 #5
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Det där ger nog helt acceptabla resultat.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-07-04, 14:16 #6
najks avatar
najk najk är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2005
Inlägg: 1 224
najk najk är inte uppkopplad
Har WN som tidsfördriv
najks avatar
 
Reg.datum: Oct 2005
Inlägg: 1 224
Den funktionen finns inbyggd i Mac OS X, heter sammanfatta och hittas i undermenyn tjänster (i respektive program). Möjligt att det går att extrahera den på något vis. Den skriver om texten, inte bara förkortar alltså.
najk är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-07-04, 19:14 #7
totoos avatar
totoo totoo är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2006
Inlägg: 730
totoo totoo är inte uppkopplad
Mycket flitig postare
totoos avatar
 
Reg.datum: Nov 2006
Inlägg: 730
Aha, funkar den bra? Det låter skitsuspekt... Den måste vara riktigt avancerad om den ska generera en någorlunda vettig förkortning. Framförallt om den ska vara idiotsäker för folk som inte vet hur man skriver. Det jag använder min funktion till är en blogg som en massa okända människor med olika skrivkunskaper använder.

Btw, jag skrev ju som en idiot, nyvaken och jävlig, detta är mer tydligt:

1: Klipp vid maxlängden, oberoende av innehåll.
2: Ta fram två olika brytbara positioner:
2.1: Leta efter mellanslag, kommatecken och lite "fula brytningar", men hela ord
2.2: Leta efter punkt, utropstecken, frågetecken, newline och andra avslut på meningar.
3: Jämför position 2.2 med textens totala längd. Om 2.2 finns (finns normalt, men inte nödvändigtvis) och befinner sig mer än 30% in i texten så används 2.2, annars används 2.1

2.1 ger oss det sista hela ordet.
2.2 ger oss den sista hela meningen.

Om meningen inte slutar för tidigt (t.ex. efter 2 ord i en text på 30 ord) så används den, annars används 2.1an. Vad som anses vara för tidigt kan vara svårt att generalisera, men en procentsats på typ 30% ( = 30% av totala avklippta strängen ska vara med) verkar fungera okej.

Men som sagt, det skulle inte förvåna mig om det finns befintliga lösningar som funkar skitbra, min känns halvful, men jag kanske måste putsa koden snarare än funktionaliteten.
totoo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-07-04, 20:28 #8
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Det är ju lite pill men annars ganska simpel kod att fixa. Frågan är dock om det inte skulle fungera precis lika bra att bara hugga direkt och sätta dit några punkter efter? Reagerar verkligen någon (mer än någon enstaka procent) extremt negativt på att det råkar bli mitt i ett ord?
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 17:17.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017