-
Notifications
You must be signed in to change notification settings - Fork 0
/
stringUtils.py
144 lines (93 loc) · 3.81 KB
/
stringUtils.py
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
import json
# Dato un txt in ingresso, lo legge e crea un dizionario che ha come chiavi il nome della pagina con il numero di
# colonna (0 o 1), e come valore un array di interi ordinato con il testo che indica la quantita' di parole per ogni
# riga
def getWordsCounterDict(lines):
columnsLengthDict = dict()
for i in range(len(lines)):
# Trovo nel txt le righe speciali di inizio paragrafo, saranno chiave nel dizionario
if lines[i][0] == "_":
columnsLengthDict[lines[i][:-1]] = []
# Per ogni riga adesso conto quante parole ci sono e me lo salvo
j = i + 1
while j < len(lines) and lines[j][0] is not "_":
columnsLengthDict[lines[i][:-1]].append(wordCounter(lines[j]))
j += 1
# per risparmiare cicli adesso riparto dal nuovo paragrafo
i = j
return columnsLengthDict
def wordCounter(line):
words = line.split()
return len(words)
def histWords(lines):
histWords = dict()
for i in range(len(lines)):
if lines[i][0] == "_":
continue
else:
words = lines[i].split()
for word in words:
if word[len(word) - 1] is "=" or word[len(word) - 1] is ".":
if word[: len(word) - 2] in histWords:
histWords[word[: len(word) - 2]] += 1
else:
histWords[word[: len(word) - 2]] = 1
else:
if word in histWords:
histWords[word] += 1
else:
histWords[word] = 1
return histWords
def getNmostFrequentWords(hist, n):
frequent = []
for key in hist.keys():
frequent.append(hist[key])
frequent.sort(reverse=True)
print(frequent)
mostFrequentWords = []
for i in range(n):
for key in hist.keys():
if hist[key] is frequent[i]:
mostFrequentWords.append(key)
return mostFrequentWords
def getDictWordPosition(lines, specificWord):
wordDict = dict()
page = ""
nLine = 0
for i in range(len(lines)):
# Trovo nel txt le righe speciali di inizio paragrafo, primo elemento della tupla
if lines[i][0] == "_":
page = lines[i][:-1]
nLine = 0
# Altrimenti trovo una riga vera, splitto le parole e le conto
else:
words = lines[i].split()
for i in range(len(words)):
if words[i][len(words[i]) - 1] == "=" or words[i][len(words[i]) - 1] == ".":
if words[i][: len(words[i]) - 2] == specificWord:
wordDict[str((page, nLine, i))] = 1
elif words[i] == specificWord:
wordDict[str((page, nLine, i))] = 1
nLine += 1
return wordDict
"""
# Leggo il ground truth e me lo salvo in un file come dizionario json, per non stare a rileggerlo ad ogni esecuzione
groundTruth = open("genesis1-20.txt", "r")
lines = groundTruth.readlines()
#dictionary = getWordsCounterDict(lines)
#with open('JsonUtils/groundTruthDictionary.json', 'w') as fp:
# json.dump(dictionary, fp)
#hist = histWords(lines)
#mostFrequentWords = getNmostFrequentWords(hist, 20)
#with open('JsonUtils/20mostFrequentWords.json', 'w') as fj:
# json.dump(mostFrequentWords, fj)
with open('JsonUtils/20mostFrequentWords.json') as mf:
mostFrequentWords = json.load(mf)
# Dizionario che ha come chiave la tupla per ritrovare la parola nel testo, pagina e colonna, numero riga e numero di
# parola
# tupla = ('_P0_C0', 20, 3)
for frequentWord in mostFrequentWords:
with open('JsonUtils/{frequentWord}Positions.json'.format(frequentWord=frequentWord), 'w') as fw:
json.dump(getDictWordPosition(lines, frequentWord), fw)
print("Finished")
"""