Make the mvc example interactive

This commit is contained in:
Crista Lopes
2014-01-01 17:42:19 -08:00
parent 636b98be97
commit 2c92d844b0

View File

@@ -1,23 +1,21 @@
#!/usr/bin/env python
import sys, re, operator, collections
#
# Model
#
class WordFrequenciesModel:
""" Models the data. In this case, we're only interested
in words and their frequencies as an end result """
freqs = {}
def __init__(self, path_to_file):
stopwords = set(open('../stop_words.txt').read().split(','))
words = re.findall('[a-z]{2,}', open(path_to_file).read().lower())
self.freqs = collections.Counter(w for w in words if w not in stopwords)
self.update(path_to_file)
#
# View
#
def update(self, path_to_file):
try:
stopwords = set(open('../stop_words.txt').read().split(','))
words = re.findall('[a-z]{2,}', open(path_to_file).read().lower())
self.freqs = collections.Counter(w for w in words if w not in stopwords)
except IOError:
print "File not found"
self.freqs = {}
class WordFrequenciesView:
def __init__(self, model):
self._model = model
@@ -27,18 +25,21 @@ class WordFrequenciesView:
for (w, c) in sorted_freqs[:25]:
print w, '-', c
#
# Controller
#
class WordFrequencyController:
def __init__(self, model, view):
self._model = model
self._view = view
self._model, self._view = model, view
view.render()
#
# Main
#
def run(self):
while True:
print "Next file: "
sys.stdout.flush()
filename = sys.stdin.readline().strip()
self._model.update(filename)
self._view.render()
m = WordFrequenciesModel(sys.argv[1])
v = WordFrequenciesView(m)
c = WordFrequencyController(m, v)
c.run()