diff options
author | 2023-10-06 20:57:53 -0700 | |
---|---|---|
committer | 2023-10-06 22:04:31 -0700 | |
commit | 7b541af2536ce8337758390c5e5b51db3eb75cef (patch) | |
tree | 6475fbc466dde2e7c83726269ad89ae60d560753 /internal/reader/readingtime/readingtime.go | |
parent | 09e9b0361dbca3881fb34964325d5b4656e861c9 (diff) | |
download | v2-7b541af2536ce8337758390c5e5b51db3eb75cef.tar.gz v2-7b541af2536ce8337758390c5e5b51db3eb75cef.tar.zst v2-7b541af2536ce8337758390c5e5b51db3eb75cef.zip |
Replace github.com/rylans/getlang with github.com/abadojack/whatlanggo
github.com/rylans/getlang doesn't seems to be updated anymore
Diffstat (limited to 'internal/reader/readingtime/readingtime.go')
-rw-r--r-- | internal/reader/readingtime/readingtime.go | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/internal/reader/readingtime/readingtime.go b/internal/reader/readingtime/readingtime.go new file mode 100644 index 00000000..faf78471 --- /dev/null +++ b/internal/reader/readingtime/readingtime.go @@ -0,0 +1,31 @@ +// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +// Package readtime provides a function to estimate the reading time of an article. +package readingtime + +import ( + "math" + "strings" + "unicode/utf8" + + "miniflux.app/v2/internal/reader/sanitizer" + + "github.com/abadojack/whatlanggo" +) + +// EstimateReadingTime returns the estimated reading time of an article in minute. +func EstimateReadingTime(content string, defaultReadingSpeed, cjkReadingSpeed int) int { + sanitizedContent := sanitizer.StripTags(content) + langInfo := whatlanggo.Detect(sanitizedContent) + + var timeToReadInt int + if langInfo.IsReliable() && (langInfo.Lang == whatlanggo.Jpn || langInfo.Lang == whatlanggo.Cmn || langInfo.Lang == whatlanggo.Kor) { + timeToReadInt = int(math.Ceil(float64(utf8.RuneCountInString(sanitizedContent)) / float64(cjkReadingSpeed))) + } else { + nbOfWords := len(strings.Fields(sanitizedContent)) + timeToReadInt = int(math.Ceil(float64(nbOfWords) / float64(defaultReadingSpeed))) + } + + return timeToReadInt +} |