1package convert
2
3import (
4 "github.com/DavidBelicza/TextRank/v2/parse"
5 "github.com/DavidBelicza/TextRank/v2/rank"
6)
7
8// TextToRank function converts a ParsedSentence object to Rank object, it is
9// the preparing process to later text ranking.
10func TextToRank(sentence parse.ParsedSentence, lang Language, ranks *rank.Rank) {
11 sentenceId := addSentence(ranks, sentence)
12 addWord(ranks, sentence.GetWords(), lang, sentenceId)
13}
14
15func addWord(ranks *rank.Rank, words []string, lang Language, sentenceID int) {
16 prevWordID := -1
17 var curWordID int
18
19 for _, word := range words {
20 if !lang.IsStopWord(word) {
21 if found, rootWord := lang.FindRootWord(word); found {
22 word = rootWord
23 }
24
25 if !ranks.IsWordExist(word) {
26 curWordID = ranks.AddNewWord(word, prevWordID, sentenceID)
27 } else {
28 curWordID = ranks.UpdateWord(word, prevWordID, sentenceID)
29 }
30
31 ranks.Relation.AddRelation(curWordID, prevWordID, sentenceID)
32 ranks.UpdateRightConnection(prevWordID, curWordID)
33
34 prevWordID = curWordID
35 }
36 }
37}
38
39func addSentence(ranks *rank.Rank, sentence parse.ParsedSentence) int {
40 ranks.SentenceMap[len(ranks.SentenceMap)] = sentence.GetOriginal()
41
42 return len(ranks.SentenceMap) - 1
43}