Kako izračunati procenjeno vreme čitanja vašeg teksta koristeći ONLYOFFICE makro

Procena vremena čitanja je vredna funkcija u uređivačima teksta, omogućavajući korisnicima da odrede koliko vremena im može biti potrebno za čitanje dokumenta. Jedan od naših pripravnika, Vukasin kreirao je neobičan, ali efikasan makro koji izračunava procenjeno vreme čitanja unutar ONLYOFFICE Document Editor. U ovom članku ćemo razložiti makro, objasniti kako svaka funkcija radi i kako se one spajaju da bi pružile tačnu procenu vremena čitanja.

How to calculate the estimated reading time of your text using an ONLYOFFICE macro

Izrada makroa

Prvo preuzimamo objekat dokumenta koristeći metod Api.GetDocument():

try {
        const document = Api.GetDocument();

Definisanje konstanti

      // Constants for reading speed calculations
        const WORDS_PER_MINUTE = 238; // Average adult reading speed
        const COMPLEX_WORD_LENGTH = 7; // Words with this many chars or more are considered complex

Ovde su definisane dve konstante:

  • WORDS_PER_MINUTE: Prosečna brzina čitanja odrasle osobe (238 reči po minutu).
  • COMPLEX_WORD_LENGTH: Prag za određivanje da li je reč složena.

Brojanje reči

Zatim countWords funkcija deli zadati tekst na reči na osnovu razmaka i broji broj nepraznih reči:

 function countWords(text) {
            if (!text) return 0;
            return text.split(/\s+/).filter((word) => word.length > 0).length;
        }

Estimating complexity

Za procenu složenosti koristimo funkciju estimatedComplexety:

   function estimateComplexity(text) {
            if (!text) return 0;
            const words = text.split(/\s+/).filter((word) => word.length > 0);
            if (words.length === 0) return 0;


            const complexWords = words.filter(
                (word) => word.length >= COMPLEX_WORD_LENGTH
            ).length;
            return complexWords / words.length;
        }

Ova funkcija određuje složenost teksta tako što:

  1. Deli tekst na reči.
  2. Filtrira reči koje imaju manje od 7 karaktera.
  3. Izračunava odnos složenih reči prema ukupnom broju reči.

Preuzimanje i obrada pasusa

Onda nastavljamo obradu teksta:

     const paragraphs = document.GetAllParagraphs();
        let totalWords = 0;
        let totalText = "";


        paragraphs.forEach((paragraph) => {
            const text = paragraph.GetText();
            totalWords += countWords(text);
            totalText += text + " ";
        });

U ovom delu radimo sledeće:

  1. Preuzimamo sve pasuse iz dokumenta.
  2. Prolazimo kroz svaki pasus da bismo izvukli tekst.
  3. Brojimo reči u svakom pasusu i akumuliramo ukupan broj reči.
  4. Skladištimo ceo tekst za procenu složenosti.

Prilagođavanje složenosti

Ovde se faktor složenosti koristi za prilagođavanje brzine čitanja. Veća složenost rezultira nižom efektivnom brzinom čitanja:

        const complexityFactor = estimateComplexity(totalText);
        const complexityAdjustment = 1 - complexityFactor * 0.3;
        const effectiveWPM = WORDS_PER_MINUTE * complexityAdjustment;

Računanje vremena čitanja

Zatim ukupne reči konvertujemo u minute, a zatim i u sate:

        const readingTimeMinutes = totalWords / effectiveWPM;
        const readingTimeHours = readingTimeMinutes / 60;

Formatiranje izlaza

Nakon toga, formatiramo izlaz za vreme čitanja na osnovu izračunatog vremena.

    let readingTimeText;
        if (readingTimeMinutes < 1) {
            readingTimeText = `less than 1 minute`;
        } else if (readingTimeMinutes < 60) {
            readingTimeText = `${Math.ceil(readingTimeMinutes)} minute${Math.ceil(readingTimeMinutes) !== 1 ? "s" : ""
                }`;
        } else {
            const hours = Math.floor(readingTimeHours);
            const remainingMinutes = Math.ceil((readingTimeHours - hours) * 60);
            readingTimeText = `${hours} hour${hours !== 1 ? "s" : ""}${remainingMinutes > 0
                    ? ` and ${remainingMinutes} minute${remainingMinutes !== 1 ? "s" : ""
                    }`
                    : ""
                }`;
        }

Ubacivanje rezultata

Zatim unosimo formatirani rezultat:

      const infoText = `Reading Time: ${readingTimeText} (${totalWords} words at ${Math.round(
            effectiveWPM
        )} words per minute)`;


        const oParagraph = Api.CreateParagraph();
        oParagraph.AddText(infoText);
        oParagraph.SetBold(true);
        oParagraph.SetItalic(true);
        oParagraph.SetFontFamily("Arial");
        document.InsertContent([oParagraph], 0);
    } catch (error) {
        console.log("Error: " + error.message);
    }
})();

Ovaj deo:

  1. Kreira formatirani string sa detaljima o vremenu čitanja.
  2. Kreira novi objekat pasusa i dodaje mu tekst.
  3. Primenuje stilizaciju (bold, kurziv i Arial font).
  4. Ubacuje pasus na početak dokumenta.

Ceo kod makroa je sledeći:

(function () {
    try {
        const document = Api.GetDocument();
        // Constants for reading speed calculations
        const WORDS_PER_MINUTE = 238; // Average adult reading speed
        const COMPLEX_WORD_LENGTH = 7; // Words with this many chars or more are considered complex


        function countWords(text) {
            if (!text) return 0;
            return text.split(/\s+/).filter((word) => word.length > 0).length;
        }


        function estimateComplexity(text) {
            if (!text) return 0;
            const words = text.split(/\s+/).filter((word) => word.length > 0);
            if (words.length === 0) return 0;


            const complexWords = words.filter(
                (word) => word.length >= COMPLEX_WORD_LENGTH
            ).length;
            return complexWords / words.length;
        }


        const paragraphs = document.GetAllParagraphs();
        let totalWords = 0;
        let totalText = "";


        paragraphs.forEach((paragraph) => {
            const text = paragraph.GetText();
            totalWords += countWords(text);
            totalText += text + " ";
        });


        const complexityFactor = estimateComplexity(totalText);


        const complexityAdjustment = 1 - complexityFactor * 0.3;
        const effectiveWPM = WORDS_PER_MINUTE * complexityAdjustment;


        const readingTimeMinutes = totalWords / effectiveWPM;
        const readingTimeHours = readingTimeMinutes / 60;


        let readingTimeText;
        if (readingTimeMinutes < 1) {
            readingTimeText = `less than 1 minute`;
        } else if (readingTimeMinutes < 60) {
            readingTimeText = `${Math.ceil(readingTimeMinutes)} minute${Math.ceil(readingTimeMinutes) !== 1 ? "s" : ""
                }`;
        } else {
            const hours = Math.floor(readingTimeHours);
            const remainingMinutes = Math.ceil((readingTimeHours - hours) * 60);
            readingTimeText = `${hours} hour${hours !== 1 ? "s" : ""}${remainingMinutes > 0
                    ? ` and ${remainingMinutes} minute${remainingMinutes !== 1 ? "s" : ""
                    }`
                    : ""
                }`;
        }


        const infoText = `Reading Time: ${readingTimeText} (${totalWords} words at ${Math.round(
            effectiveWPM
        )} words per minute)`;


        const oParagraph = Api.CreateParagraph();
        oParagraph.AddText(infoText);
        oParagraph.SetBold(true);
        oParagraph.SetItalic(true);
        oParagraph.SetFontFamily("Arial");
        document.InsertContent([oParagraph], 0);
    } catch (error) {
        console.log("Error: " + error.message);
    }
})();

Ovaj makro pruža pametan način za procenu vremena čitanja u ONLYOFFICE i nadamo se da će postati koristan dodatak vašem radnom alatu. ONLYOFFICE makroi su svestrani alati koji značajno poboljšavaju podrazumevanu funkcionalnost i omogućavaju kreiranje skripti prilagođenih vašim potrebama. Podstičemo vas da istražite našu biblioteku API metoda i razvijete sopstvene makroe. Ako imate bilo kakva pitanja ili ideje, slobodno kontaktirajte! We’re always open to feedback and collaboration. Best of luck in your exploratory endeavors!

O autoru makroa

How to calculate the estimated reading time of your text using an ONLYOFFICE macro.

 

 

Create your free ONLYOFFICE account

View, edit and collaborate on docs, sheets, slides, forms, and PDF files online.