fix(cmd): query

Better word indexation
pull/3/head
sundowndev 2020-04-13 20:26:24 +01:00
parent aa6dd43775
commit 493e6d1ea7
4 changed files with 14 additions and 6 deletions

View File

@ -50,11 +50,12 @@ var queryCmd = &cobra.Command{
if err != nil {
panic(err)
}
text := string(f)
queryResults = append(queryResults, &engine.QueryResult{
File: file,
Count: score,
FirstMatch: engine.GetFirstMatchingLine(string(f), word),
FirstMatch: engine.GetFirstMatchingLine(text, word),
})
}

View File

@ -44,7 +44,10 @@ func (c *RedisClient) AddFile(file, content string) error {
// GetKey search for a key
func (c *RedisClient) GetKey(key string) ([]string, error) {
return c.conn.ZRevRange(key, 0, -1).Result()
return c.conn.ZRevRangeByScore(key, &redis.ZRangeBy{
Offset: 0,
Count: -1,
}).Result()
}
// GetScore get score of element

View File

@ -4,6 +4,7 @@ import (
"bufio"
"bytes"
"net/http"
"regexp"
"strings"
)
@ -24,7 +25,9 @@ func GetWordsFromText(text string) (words []string) {
scanner := bufio.NewScanner(bytes.NewBufferString(text))
scanner.Split(bufio.ScanWords)
for scanner.Scan() {
words = append(words, strings.ToLower(scanner.Text()))
w := strings.ToLower(scanner.Text())
re, _ := regexp.Compile("[,|.|(|)|_]")
words = append(words, re.ReplaceAllString(w, ""))
}
return words
@ -42,8 +45,9 @@ func IsTextFile(file []byte) bool {
func GetFirstMatchingLine(text string, word string) string {
scanner := bufio.NewScanner(bytes.NewBufferString(text))
scanner.Split(bufio.ScanLines)
for scanner.Scan() {
if strings.Index(scanner.Text(), word) > -1 {
if strings.Index(strings.ToLower(scanner.Text()), word) > -1 {
return scanner.Text()
}
}

View File

@ -10,7 +10,7 @@ func TestText(t *testing.T) {
assert := assert.New(t)
t.Run("CountWord", func(t *testing.T) {
text := "Contrairement à une opinion répandue, le Lorem Ipsum n'est pas simplement du texte aléatoire. Il trouve ses racines dans une oeuvre de la littérature latine classique datant de 45 av. J.-C., le rendant vieux de 2000 ans. Un professeur du Hampden-Sydney College, en Virginie, s'est intéressé à un des mots latins les plus obscurs, consectetur, extrait d'un passage du Lorem Ipsum, et en étudiant tous les usages de ce mot dans la littérature classique, découvrit la source incontestable du Lorem Ipsum."
text := "Contrairement à une opinion répandue, le Lorem Ipsum n'est pas simplement du texte aléatoire.\nIl trouve ses racines dans une oeuvre de la littérature latine classique datant de 45 av. J.-C., le rendant vieux de 2000 ans.\n\nUn professeur du Hampden-Sydney College, en Virginie, s'est intéressé à un des mots latins les plus obscurs, consectetur, extrait d'un passage du Lorem Ipsum, et en étudiant tous les usages de ce mot dans la littérature classique, découvrit la source incontestable du Lorem Ipsum."
assert.Equal(3, CountWord(text, "la"), "should be equal")
})
@ -18,7 +18,7 @@ func TestText(t *testing.T) {
t.Run("GetWordsFromText", func(t *testing.T) {
text := "Un professeur du Hampden-Sydney College, en Virginie, s'est intéressé à un des mots latins les plus obscurs, consectetur, extrait d'un passage du Lorem Ipsum."
assert.Equal([]string{"un", "professeur", "du", "hampden-sydney", "college,", "en", "virginie,", "s'est", "intéressé", "à", "un", "des", "mots", "latins", "les", "plus", "obscurs,", "consectetur,", "extrait", "d'un", "passage", "du", "lorem", "ipsum."}, GetWordsFromText(text), "should be equal")
assert.Equal([]string{"un", "professeur", "du", "hampden-sydney", "college", "en", "virginie", "s'est", "intéressé", "à", "un", "des", "mots", "latins", "les", "plus", "obscurs", "consectetur", "extrait", "d'un", "passage", "du", "lorem", "ipsum"}, GetWordsFromText(text), "should be equal")
})
t.Run("IsTextFile", func(t *testing.T) {