-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtext2Cloud.py
98 lines (68 loc) · 2.45 KB
/
text2Cloud.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
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import re
import operator
def cleanText(text):
# Salvamos los guiones
text = text.replace('-\n', '')
# Quito signos de puntuacion
text = re.sub('[.,:!@#$%^&*()/_|•><\-¡¿?]', '', text)
# Fuera números
text = re.sub('[0-9]', '', text)
# Devuelvo una lista de palabras
text = re.sub('\n', ' ', text)
# Filtro las palabras por número de letras
text = ' '.join([w for w in text.split() if len(w)>3])
return text.lower()
def applySubs(text, filename):
# Cargo la lista de reemplazos
replaceList = open(filename, 'r')
# Efectuo los reemplazos
for line in replaceList:
replace = line.split()
text = re.sub(replace[0] + ' ', replace[1], text)
return text
if __name__ == '__main__':
# Número de palabras en el Cloud
wordNum = 100
for arg in sys.argv:
inputFile = arg
# Lectura del texto extraido del pdf
textFile = open(inputFile, 'r')
text = textFile.read()
# Limpieza del texto y aplicación de sustituciones
text = cleanText(text)
text = applySubs(text, 'replaceWords.txt')
# Separo el texto en palabras
words = text.split()
# Diccionario donde la palabra actua como clave y las repeticiones como valor
wordcount = {}
# Lista de stop words
stopWordList = open('stopWords.txt', 'r')
stopWords = [str(line).rstrip() for line in stopWordList]
# Bucle para contar el número de repeticiones de cada palabra
for word in words:
if word not in stopWords:
if word not in wordcount:
wordcount[word] = 0
wordcount[word] += 1
# Ordenos el vector con los resultados
wordsSorted = sorted(wordcount.items(), key=operator.itemgetter(1))
wordsSorted.reverse()
# Resultados normalizados max:100 min:10
maxval = wordsSorted[0][1]
minval = wordsSorted[wordNum-1][1]
rangeval = maxval-minval
# String con el array
result = '['
for i in range(0,wordNum-2):
result += '["%s",%d],' % (wordsSorted[i][0], (wordsSorted[i][1]-minval)*90/rangeval+10)
result += '["%s",%d]]' % (wordsSorted[wordNum-1][0], (wordsSorted[wordNum-1][1]-minval)*90/rangeval+10)
cloudFile = open('cloudTemplate.html', 'r')
cloud = cloudFile.read()
cloud = re.sub('resultArray', result, cloud)
cloudFile.close
outFile = open('index.html', 'w')
outFile.write(cloud)
outFile.close