<s> from __future__ import print_function <EOL> import os , sys , re <EOL> from xml . dom import minidom <EOL> class HamshahriReader ( ) : <EOL> """<STR_LIT>""" <EOL> def __init__ ( self , root ) : <EOL> self . _root = root <EOL> self . _invalids = set ( [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] ) <EOL> self . _paragraph_pattern = re . compile ( r'<STR_LIT>' ) <EOL> def docs ( self ) : <EOL> for root , dirs , files in os . walk ( self . _root ) : <EOL> for name in sorted ( files ) : <EOL> if name in self . _invalids : <EOL> continue <EOL> try : <EOL> elements = minidom . parse ( os . path . join ( root , name ) ) <EOL> for element in elements . getElementsByTagName ( '<STR_LIT>' ) : <EOL> doc = { } <EOL> doc [ '<STR_LIT:id>' ] = element . getElementsByTagName ( '<STR_LIT>' ) [ <NUM_LIT:0> ] . childNodes [ <NUM_LIT:0> ] . data <EOL> doc [ '<STR_LIT>' ] = element . getElementsByTagName ( '<STR_LIT>' ) [ <NUM_LIT:0> ] . childNodes [ <NUM_LIT:0> ] . data <EOL> for cat in element . getElementsByTagName ( '<STR_LIT>' ) : <EOL> doc [ '<STR_LIT>' + cat . attributes [ '<STR_LIT>' ] . value ] = cat . childNodes [ <NUM_LIT:0> ] . data . split ( '<STR_LIT:.>' ) <EOL> for date in element . getElementsByTagName ( '<STR_LIT>' ) : <EOL> if date . attributes [ '<STR_LIT>' ] . value == '<STR_LIT>' : <EOL> doc [ '<STR_LIT:date>' ] = date . childNodes [ <NUM_LIT:0> ] . data <EOL> elm = element . getElementsByTagName ( '<STR_LIT>' ) [ <NUM_LIT:0> ] <EOL> doc [ '<STR_LIT:title>' ] = elm . childNodes [ <NUM_LIT:1> ] . data if len ( elm . childNodes ) > <NUM_LIT:1> else '<STR_LIT>' <EOL> doc [ '<STR_LIT:text>' ] = '<STR_LIT>' <EOL> for item in element . getElementsByTagName ( '<STR_LIT>' ) [ <NUM_LIT:0> ] . childNodes : <EOL> if item . nodeType == <NUM_LIT:4> : <EOL> doc [ '<STR_LIT:text>' ] += item . data <EOL> doc [ '<STR_LIT:text>' ] = self . _paragraph_pattern . sub ( r'<STR_LIT>' , doc [ '<STR_LIT:text>' ] ) . replace ( '<STR_LIT>' , '<STR_LIT:\n>' ) <EOL> yield doc <EOL> except Exception as e : <EOL> print ( '<STR_LIT>' , name , e , file = sys . stderr ) <EOL> def texts ( self ) : <EOL> for doc in self . docs ( ) : <EOL> yield doc [ '<STR_LIT:text>' ] </s>
