Documentation
¶
Overview ¶
Library for quick counting the simplest statistics on the text:
Index ¶
- Variables
- type Counter
- func (c Counter) AuthorPages() float32
- func (c Counter) Duration(wps int) time.Duration
- func (c Counter) Pages() int
- func (c *Counter) ReadFrom(r io.Reader) (n int64, err error)
- func (c *Counter) Reset()
- func (c Counter) String() string
- func (c *Counter) Write(s []byte) (n int, err error)
- func (c *Counter) WriteString(s string) (n int, err error)
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( // One typewritten page accommodates 1860 printed signs (including spaces) PageChars = 1_860 // In the USSR and the Russian Federation, an account of the author's leaf // is equal to 40,000 printed signs (including punctuation marks, numbers // and spaces between words to the fields) AuthorChars = 40_000 )
var IgnoreHTMLTags = map[string]struct{}{
"script": {},
"style": {},
"head": {},
"title": {},
}
IgnoreHTMLTags contains the list of names of the HTML tags, the contents of which are ignored.
Functions ¶
This section is empty.
Types ¶
type Counter ¶
type Counter struct {
Chars int `json:"chars"` // Total number of characters
Spaces int `json:"spaces"` // Number of spaces and separators
Puncts int `json:"puncts"` // Number of punctuations
Numbers int `json:"numbers"` // Number of numerics
Words int `json:"words"` // Number of words
}
Counter contains data with statistical counting results.
func FromHTML ¶
FromHTML extracts text from HTML and returns statistical information on text. The contents of the tag from the IgnoreHTMLTAGS list is ignored.
Example ¶
package main
import (
"fmt"
"strings"
"github.com/mdigger/wstat"
)
func main() {
sample := `<html>
<head>
<title> 123 </title>
<style type="text/css">
<!--
h1 {text-align:center;
font-family:Arial, Helvetica, Sans-Serif;
}
p {text-indent:20px;
}
-->
</style>
</head>
<body bgcolor = "#ffffcc" text = "#000000">
<h1>Lorem Ipsum</h1>
<p><strong>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</strong><br/>
Nunc sit amet ipsum vel nunc interdum ultricies eu non augue. Donec sit amet
nisl aliquet, ultricies enim id, malesuada libero. Ut maximus felis neque, sed
porta est accumsan in. Curabitur tincidunt fringilla ultrices. Suspendisse
porttitor non mauris quis tincidunt. Vivamus sit amet ante vel dui pellentesque
mollis sit amet sit amet nibh. Vivamus id ante ultricies mi tincidunt sodales et
pretium ex. In placerat purus vitae ligula tincidunt consectetur. Vivamus vel
leo ut est molestie molestie non et odio. Nam a iaculis magna, sit amet accumsan
elit. Nullam quam sapien, accumsan nec porta non, sollicitudin ut magna.
Suspendisse sed gravida nisl. Nullam porta ultricies pellentesque. Nunc viverra
convallis mauris, ac aliquam velit commodo in. Nulla facilisis commodo massa in
egestas. Quisque at enim risus.</p>
<p>Nulla facilisi. Morbi odio ligula, hendrerit vitae mi ullamcorper, fermentum
laoreet ligula. Aliquam ornare enim nec tortor sagittis faucibus. Morbi pretium
dui at nibh placerat semper. Maecenas et libero vitae orci fringilla pretium sit
amet a est. In at ipsum est. Sed laoreet efficitur consequat. Ut pharetra mauris
sed mi consequat, ac suscipit dolor convallis. Vestibulum in est sollicitudin,
mattis urna a, malesuada felis. Duis nibh lectus, viverra in aliquet sed,
ullamcorper et justo. In et elementum sem.</p>
<p>Vivamus purus tellus, feugiat ac convallis sed, sollicitudin id justo. Donec
aliquam ullamcorper ipsum, congue pretium dui interdum a. Maecenas vel neque ac
magna ornare tempus. Pellentesque tincidunt tincidunt sollicitudin. Morbi neque
nulla, porttitor vel sagittis quis, dapibus ut leo. In a arcu nec magna cursus
porta. Donec fermentum dolor a augue viverra feugiat vel eu odio. Sed eu dapibus
libero. Quisque lacus risus, accumsan ac suscipit non, molestie vel neque.
Aliquam consequat non neque at molestie. Nunc sed erat ultrices, viverra elit
quis, tincidunt purus. Fusce vitae diam auctor, ultricies massa at, dictum metus.
Ut at nibh id velit sollicitudin facilisis ut sit amet dui. Sed ac sapien
dignissim, accumsan metus et, tempor est.</p>
<p>Praesent mollis sagittis neque vel pellentesque. Phasellus laoreet sollicitudin
ante quis consectetur. Pellentesque hendrerit porta commodo. Proin eget congue
mauris. Ut nec ornare tellus, id rhoncus nibh. Donec eget elit non nunc egestas
tempor ac quis massa. Ut nisi augue, gravida in quam aliquet, mollis varius
augue. Nam vehicula commodo egestas. Phasellus vel odio sollicitudin, sodales
lacus non, lobortis lorem. Quisque nisl metus, porta vitae mollis sit amet,
semper eu nulla. Maecenas rhoncus urna ac lacus facilisis, fringilla suscipit
libero pharetra. Aliquam ornare metus eget magna accumsan tincidunt.</p>
<p>In pellentesque neque vel ex sodales feugiat vel nec nibh. Nullam eleifend velit
at enim congue tempor. Suspendisse gravida gravida enim id convallis. Class
aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos
himenaeos. Pellentesque rutrum orci in mi consectetur, sit amet bibendum elit
vehicula. Curabitur tincidunt metus id ex pulvinar, in cursus dui interdum.
Curabitur nec semper lectus, a tempor dui. Integer porta ligula nec sollicitudin
feugiat. Vivamus ornare ligula vel elit pellentesque, id sagittis neque
dignissim. Nulla purus nunc, fermentum ut efficitur eu, ultrices vel odio.
Proin id accumsan nisi. Praesent sem felis, lacinia vel quam a, interdum
fringilla velit.</p>
</body>
</html>`
stat, err := wstat.FromHTML(strings.NewReader(sample))
if err != nil {
panic(err)
}
fmt.Println("reading time:", stat)
}
Output: reading time: 2m36s (520 words)
func String ¶
String returns statistical information about the text from string.
Example ¶
package main
import (
"fmt"
"github.com/mdigger/wstat"
)
func main() {
sample := `Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Nunc sit amet ipsum vel nunc interdum ultricies eu non augue. Donec sit amet
nisl aliquet, ultricies enim id, malesuada libero. Ut maximus felis neque, sed
porta est accumsan in. Curabitur tincidunt fringilla ultrices. Suspendisse
porttitor non mauris quis tincidunt. Vivamus sit amet ante vel dui pellentesque
mollis sit amet sit amet nibh. Vivamus id ante ultricies mi tincidunt sodales et
pretium ex. In placerat purus vitae ligula tincidunt consectetur. Vivamus vel
leo ut est molestie molestie non et odio. Nam a iaculis magna, sit amet accumsan
elit. Nullam quam sapien, accumsan nec porta non, sollicitudin ut magna.
Suspendisse sed gravida nisl. Nullam porta ultricies pellentesque. Nunc viverra
convallis mauris, ac aliquam velit commodo in. Nulla facilisis commodo massa in
egestas. Quisque at enim risus.
Nulla facilisi. Morbi odio ligula, hendrerit vitae mi ullamcorper, fermentum
laoreet ligula. Aliquam ornare enim nec tortor sagittis faucibus. Morbi pretium
dui at nibh placerat semper. Maecenas et libero vitae orci fringilla pretium sit
amet a est. In at ipsum est. Sed laoreet efficitur consequat. Ut pharetra mauris
sed mi consequat, ac suscipit dolor convallis. Vestibulum in est sollicitudin,
mattis urna a, malesuada felis. Duis nibh lectus, viverra in aliquet sed,
ullamcorper et justo. In et elementum sem.
Vivamus purus tellus, feugiat ac convallis sed, sollicitudin id justo. Donec
aliquam ullamcorper ipsum, congue pretium dui interdum a. Maecenas vel neque ac
magna ornare tempus. Pellentesque tincidunt tincidunt sollicitudin. Morbi neque
nulla, porttitor vel sagittis quis, dapibus ut leo. In a arcu nec magna cursus
porta. Donec fermentum dolor a augue viverra feugiat vel eu odio. Sed eu dapibus
libero. Quisque lacus risus, accumsan ac suscipit non, molestie vel neque.
Aliquam consequat non neque at molestie. Nunc sed erat ultrices, viverra elit
quis, tincidunt purus. Fusce vitae diam auctor, ultricies massa at, dictum metus.
Ut at nibh id velit sollicitudin facilisis ut sit amet dui. Sed ac sapien
dignissim, accumsan metus et, tempor est.
Praesent mollis sagittis neque vel pellentesque. Phasellus laoreet sollicitudin
ante quis consectetur. Pellentesque hendrerit porta commodo. Proin eget congue
mauris. Ut nec ornare tellus, id rhoncus nibh. Donec eget elit non nunc egestas
tempor ac quis massa. Ut nisi augue, gravida in quam aliquet, mollis varius
augue. Nam vehicula commodo egestas. Phasellus vel odio sollicitudin, sodales
lacus non, lobortis lorem. Quisque nisl metus, porta vitae mollis sit amet,
semper eu nulla. Maecenas rhoncus urna ac lacus facilisis, fringilla suscipit
libero pharetra. Aliquam ornare metus eget magna accumsan tincidunt.
In pellentesque neque vel ex sodales feugiat vel nec nibh. Nullam eleifend velit
at enim congue tempor. Suspendisse gravida gravida enim id convallis. Class
aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos
himenaeos. Pellentesque rutrum orci in mi consectetur, sit amet bibendum elit
vehicula. Curabitur tincidunt metus id ex pulvinar, in cursus dui interdum.
Curabitur nec semper lectus, a tempor dui. Integer porta ligula nec sollicitudin
feugiat. Vivamus ornare ligula vel elit pellentesque, id sagittis neque
dignissim. Nulla purus nunc, fermentum ut efficitur eu, ultrices vel odio.
Proin id accumsan nisi. Praesent sem felis, lacinia vel quam a, interdum
fringilla velit.`
stat := wstat.String(sample)
fmt.Printf(`
--- stats -----------
chars: %v
spaces: %v
puncts: %v
numbers: %v
words: %v
--- pages -----------
typewritten: %v
author's: %v
--- reading time ----
duration: %v
---------------------
`,
stat.Chars, stat.Spaces, stat.Puncts, stat.Numbers, stat.Words,
stat.Pages(), stat.AuthorPages(), stat.Duration(228))
}
Output: --- stats ----------- chars: 3504 spaces: 566 puncts: 111 numbers: 0 words: 518 --- pages ----------- typewritten: 2 author's: 0.0876 --- reading time ---- duration: 2m16s ---------------------
func (Counter) AuthorPages ¶
AuthorPages returns the number of author pages that occupy processed text.
func (Counter) Duration ¶
Duration will return the approximate text reading time at a given speed reading (words per minute).
The average speed by languages (wps):
English — 228 Spanish — 218 France — 195 Russian — 184 Turkish — 166 Finnish — 161 Chinese — 158 Arabic — 138
func (Counter) Pages ¶
Pages returns an approximate number of standard typewritten pages, which takes the processed text.
func (*Counter) ReadFrom ¶
ReadFrom calc and add statistical information about the text from stream. io.ReaderFrom interface support.
func (Counter) String ¶
String Returns a string with the reading time and the number of words. The reading speed uses the 200 WPS value used by default in most of the calculation algorithms for this kind.