-
Notifications
You must be signed in to change notification settings - Fork 3
/
textmood.rb
65 lines (60 loc) · 1.58 KB
/
textmood.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
module TextMood
#Module variables
filestring = "AFINN-111-emo.txt"
#end
file = File.new(filestring)
@fileArr = file.readlines()
#Returns the mood score of the string
def self.score(s = "")
sArr = TextMood.textToArray(s)
score = 0
n = 0
while n<sArr.length
wordscore = TextMood.searchScoreW(sArr[n]) #string
score += Integer(wordscore)
n+=1
end
score
end
#Takes a string and turns it into a string array
#TODO remove punctuation from words
def self.textToArray (text)
length = text.length()
n = 0
wordStart = 0
textArr = []
while (n < length)
if(text[n] == ' ' || n == length - 1)
if (n == length - 1) #fixes off by one at end
n+=1
end
textArr += [text[wordStart..n-1]]
wordStart = n+1
end
n+=1
end
textArr
end
#Returns the mood score of a given word (wrapper)
def self.searchScoreW(word = nil)
if(word != nil)
word.downcase!
TextMood.searchScore(@fileArr,word,0,@fileArr.length-1)
end #word not nil
end #searchScore
#Returns the mood score of a given word (recursive binary search)
def self.searchScore(arr, word, lo, hi)
return 0 if (hi<lo)
mid = ((lo+hi)/2)
arrLine = arr[mid]
stop = arrLine.index("\t")
arrWord = arrLine[0..(stop-1)]
if(arrWord.==(word))
arrLine[stop+1..arrLine.length()-1]
elsif(arrWord.<(word))
TextMood.searchScore(arr, word, mid+1, hi)
elsif(arrWord.>(word))
TextMood.searchScore(arr, word, lo, mid-1)
end
end
end