Changeset 187

Show
Ignore:
Timestamp:
08/16/08 21:01:22 (11 months ago)
Author:
rgrp
Message:

[shakespeare/stats][l]: implement basic statistical analysis of texts. Currently implemented as core standalone module and plus a WUI controller.

Location:
trunk/shakespeare
Files:
8 added
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/shakespeare/model/dm.py

    r176 r187  
    4545    Column('material_id', types.Integer, ForeignKey('material.id')), 
    4646    Column('word', types.String(50)), 
    47     Column('occurrences', types.Integer, default=1), 
     47    Column('freq', types.Integer), 
    4848    ) 
    4949 
     
    6767    @classmethod 
    6868    def byName(self, name): 
    69         return self.query.filter_by(name=name).one() 
     69        return self.query.filter_by(name=name).first() 
    7070     
    7171    def get_text(self, format=None): 
     
    9292        cfgp.readfp(fileobj) 
    9393        for section in cfgp.sections(): 
    94             try: 
    95                 item = Material.byName(section) 
    96             except: 
     94            item = Material.byName(section) 
     95            if item is None: 
    9796                item = Material(name=section) 
     97            assert item is not None 
    9898            for key, val in cfgp.items(section): 
    9999                setattr(item, key, val) 
     100            Session.flush() 
    100101 
    101102class Statistic(object): 
  • trunk/shakespeare/tests/__init__.py

    r150 r187  
    1818from routes import url_for 
    1919 
    20 __all__ = ['url_for', 'TestController'] 
     20__all__ = ['url_for', 'TestController', 'make_fixture' ] 
    2121 
    2222here_dir = os.path.dirname(os.path.abspath(__file__)) 
     
    3232cmd.run([test_file]) 
    3333 
     34sonnet18_text = \ 
     35'''Shall I compare thee to a summer's day? 
     36Thou art more lovely and more temperate: 
     37Rough winds do shake the darling buds of May, 
     38And summer's lease hath all too short a date: 
     39 
     40Sometime too hot the eye of heaven shines, 
     41And often is his gold complexion dimm'd, 
     42And every fair from fair sometime declines, 
     43By chance, or nature's changing course untrimm'd:  
     44 
     45But thy eternal summer shall not fade, 
     46Nor lose possession of that fair thou ow'st, 
     47Nor shall death brag thou wander'st in his shade, 
     48When in eternal lines to time thou grow'st, 
     49 
     50  So long as men can breathe, or eyes can see, 
     51  So long lives this, and this gives life to thee. 
     52''' 
     53 
     54# must use make_fixture rather than just create object as we need to be in 
     55# current db session 
     56def make_fixture(): 
     57    import shakespeare.model as model 
     58    sonnet18_name = 'test_sonnet18' 
     59    sonnet18 = model.Material.byName(sonnet18_name) 
     60    if not sonnet18: 
     61        sonnet18 = model.Material(name=sonnet18_name, 
     62                title='Sonnet 18', 
     63                ) 
     64        model.Session.flush() 
     65    sonnet18.content = sonnet18_text 
     66    return sonnet18 
     67 
     68 
    3469class TestController(object): 
    3570 
  • trunk/shakespeare/tests/test_model.py

    r176 r187  
    4848        self.text = model.Material(name=self.name, title=self.title) 
    4949        self.word = 'jones' 
    50         self.occurrences = 5 
     50        self.freq = 5 
    5151        self.cc1 = model.Statistic( 
    5252                text=self.text, 
    5353                word=self.word, 
    54                 occurrences=self.occurrences 
     54                freq=self.freq 
    5555                ) 
    5656        model.Session.flush() 
     
    6969        out1 = model.Statistic.query.get(self.statid) 
    7070        assert out1.text.name == self.name 
    71         assert out1.occurrences == self.occurrences 
     71        assert out1.freq == self.freq 
    7272 
    7373    def test_select(self):