Avatar billede alexander_j Nybegynder
03. december 2002 - 21:13 Der er 11 kommentarer og
1 løsning

tælle ord og sætninger i tekst!

Tjae nu ville jeg gerne tælle antallet af ord og sætninger i en given tekst og derudover kunne jeg tænke mig at tælle antallet af ord på over 6 bogstaver.

Kan nogen hjælpe mig lidt i gang her?

Jeg har forsøgt mig med følgende script, men jeg synes det bliver lidt molboagtigt - og desuden giver det ikke det præcise antal :(

w=new Array();
antalord=1;
antalsætninger=1;
antal6ord=0;
for (i=0; i<tekst2.length; i++) {
    if (tekst2.charAt(i)==" " or tekst2.charAt(i)=="\r" or tekst2.charAt(i)=="\n" or tekst2.charAt(i)=="(" or tekst2.charAt(i)==")") antalord++;
    if (tekst2.charAt(i)=="," or tekst2.charAt(i)=="." or tekst2.charAt(i)=="!" or tekst2.charAt(i)=="?") antalsætninger++;
}
w=tekst2.split(" ");
for (i=0; i<w.length; i++) {
    if (w[i].length>6) antal6ord++;
}
Avatar billede barklund Nybegynder
04. december 2002 - 10:34 #1
Har ud MX? (bare så jeg kender hastigheden af String-funktionerne, da Flash5 versionerne var sløve)
Avatar billede alexander_j Nybegynder
04. december 2002 - 11:23 #2
jep MX :)

Har ændret lidt på mit skript siden - og det virker bedre, men er stadig langt fra optimalt:

on (release) {
    //lix
    w=new Array();
    ww=new Array();
    lixX=1;
    lixY=0;
    lixZ=0;
    for (i=0; i<tekst.length; i++) {
        if (tekst.charAt(i)==" " or tekst.charAt(i)=="\r" or tekst.charAt(i)=="\n" or tekst.charAt(i)=="(" or tekst.charAt(i)==")") lixX++;
        if (tekst.charAt(i)=="," or tekst.charAt(i)=="." or tekst.charAt(i)=="!" or tekst.charAt(i)=="?") lixY++;
    }
       
    w=tekst.split(" ");
    for (i=0; i<w.length; i++) {
        ww=w[i].split(".");
        for (j=0; j<ww.length; j++) {
            if (ww[j].length>6) lixZ++;
        }
    }
    if (lixY==0) lixY=1;
    lix=Math.round((lixX/lixY)+((lixZ*100)/lixX));
Avatar billede barklund Nybegynder
04. december 2002 - 11:56 #3
Først definerer vi en sætning... Sætninger adskilles af:

sentence_delimiter = [". ",", ","! ","? "];

mellemrummet efter er vigtigt, men det vil stadig give fejl... f. eks. i sætningen "f. eks. i sætningen"... (altså forkortelser med ". ")

Dernæst ord-adskiller:

word_delimiter = [" "];

Og så scriptet:

function count(text) {

    var sentences = text;
    var delimit = "|";
    for (i in sentence_delimiter)
        sentences = sentences.split(sentence_delimiter[i]).join(delimit);

    sentences = sentences.split(delimit);

    var count_sentences = sentences.length;

    var words = sentences.join(delimit);

    for (i in word_delimiter)
        words = words.split(word_delimiter[i]).join(delimit);

    words = words.split(delimit);

    var count_words = words.length;

    var count_long_words = 0;
    var long_words = 6;

    for (i in words)
        if (words[i].length >= long_words) count_long_words++;

    return [count_sentences, count_words, count_long_words];
}

og med:

count("her er noget tekst. Og noget laaaangt.")

Får du:

[2,7,1]


Altså:
function count (text) {
    var sentence_delimiter = [". ", ", ", "! ", "? "];
    var word_delimiter = [" "];
    var sentences = text;
    var delimit = "|";
    for (i in sentence_delimiter) {
        sentences = sentences.split(sentence_delimiter[i]).join(delimit);
    }
    sentences = sentences.split(delimit);
    var count_sentences = sentences.length;
    var words = sentences.join(delimit);
    for (i in word_delimiter) {
        words = words.split(word_delimiter[i]).join(delimit);
    }
    words = words.split(delimit);
    var count_words = words.length;
    var count_long_words = 0;
    var long_words = 6;
    for (i in words) {
        if (words[i].length>=long_words) {
            count_long_words++;
        }
    }
    return [count_sentences, count_words, count_long_words];
}
trace (count("her er noget tekst. Og noget laaaangt."));

Hopla :o)
Avatar billede barklund Nybegynder
04. december 2002 - 11:57 #4
(så kan du selv tilføje \n, \r, (, ) eller lignende... Det er så sentence delimiters... nøø?
Avatar billede alexander_j Nybegynder
04. december 2002 - 12:33 #5
Jeg har dig mistænkt for at det var en du havde på lager :)

Det virker fint - undtagen det med de lange ord! Hvis jeg skriver 'lange.', så tæller punktummet med som bogstav i ordet og ordet 'lange.' tælles altså med som langt ord pga af punktummet.
Avatar billede alexander_j Nybegynder
04. december 2002 - 13:36 #6
ændrede lidt i dit script nederst:

for (i in words) {
for (j in sentence_delimiter) {
        if (words[i].charAt(words[i].length-1)==sentence_delimiter[j].charAt(0)) words.splice(i, 1, words[i].slice(0, (words[i].length-1)));
        }
        if (words[i].length>long_words) {
            count_long_words++;
        }
    }
Avatar billede alexander_j Nybegynder
04. december 2002 - 13:38 #7
der findes med garanti en bedre måde at fjerne et eventuelt 'sentence_delimiter' :)

Men løsning godkendt - læg et svar :)
Avatar billede barklund Nybegynder
04. december 2002 - 14:26 #8
(jeg havde ikke nogen på lager... Skrev den kun til dig :o)

function count (text) {
    var sentence_delimiter = [".", ",", "!", "?"];
    var word_delimiter = [" "];
    var sentences = text;
    var delimit = "|";
    for (var i in sentence_delimiter) {
        sentences = sentences.split(sentence_delimiter[i]).join(delimit);
    }
    for (var i in sentence_delimiter) {
        if (sentences.charAt(sentences.length-1) == sentence_delimiter[i].charAt(0)) {
            sentences = sentences.substring(-2);
            break;
        }
    }
    sentences = sentences.split(delimit);
    var count_sentences = sentences.length;
    var words = sentences.join("");
    for (var i in word_delimiter) {
        words = words.split(word_delimiter[i]).join(delimit);
    }
    words = words.split(delimit);
    var count_words = words.length;
    var count_long_words = 0;
    var long_words = 6;
    for (var i in words) {
        if (words[i].length>=long_words) {
            count_long_words++;
        }
    }
    return [count_sentences, count_words, count_long_words];
}
trace (count("her er noget tekst. Og nogeet langt."));

Så skulle den være der... Det er jo kun til allerallersidst, at der kan være en ensom sentence_delimiter... Og den skal altid klippes væk..
Avatar billede alexander_j Nybegynder
04. december 2002 - 15:08 #9
den giver problemer ved linieskift :(
Avatar billede alexander_j Nybegynder
15. december 2002 - 21:29 #10
barklund læg et svar!

Barklunds løsning kombineret med min egen redigering fra d. 04/12-2002 13:36:33 virkede fint til formålet!
Avatar billede barklund Nybegynder
15. december 2002 - 21:31 #11
Hmm... okay...
Avatar billede barklund Nybegynder
15. december 2002 - 21:31 #12
Hov... igen....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester