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}