FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Mycket flitig postare
|
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. ![]() |
|||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Mycket flitig postare
|
Låter inte helt enkelt att lösa men en spännande utmaning
![]() |
|||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Klarade millennium-buggen
|
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. |
||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Mycket flitig postare
|
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. |
|||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Klarade millennium-buggen
|
Det där ger nog helt acceptabla resultat.
|
||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Har WN som tidsfördriv
|
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å.
|
|||
![]() |
![]() |
![]() |
#7 | |||
|
||||
Mycket flitig postare
|
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. ![]() |
|||
![]() |
![]() |
![]() |
#8 | ||
|
|||
Supermoderator
|
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 |
||
![]() |
![]() |
Svara |
|
|