[Tutor] Please look at my wordFrequency.py
Kent Johnson
kent37 at tds.net
Tue Oct 11 12:24:29 CEST 2005
Dick Moores wrote:
> (Execution took about 30 sec. with my computer.)
That's way too long
>
> Specifically, I'm hoping for comments on or help with:
> 2) I've tried to put in remarks that will help most anyone to understand
> what the code is doing. Have I succeeded?
Yes, i think so
> 3) No modularization. Couldn't see a reason to do so. Is there one or two?
> Specifically, what sections should become modules, if any?
As Danny says, breaking it up into functions makes it easier to understand and test
> 4) Variable names. I gave up on making them self-explanatory. Instead, I
> put in some remarks near the top of the script (lines 6-10) that I hope
> do the job. Do they? In the code, does the "L to newL to L to newL to L"
> kind of thing remain puzzling?
Some of your variables seem unnecessary. For example
newWord = word.strip(chars)
word = newWord
could be just
word = word.strip(chars)
> 5) Ideally, abbreviations that end in a period, such as U.N., e.g., i.e.,
> viz. op. cit., Mr. (Am. E.), etc., should not be stripped of their final
> periods (whereas other words that end a sentence SHOULD be stripped). I
> tried making and using a Python list of these, but it was too tough to
> write the code to use it. Any ideas?
You should be able to do this with regular expressions or searching in the word. You want to test for a word that ends with a period but doesn't include any periods. Somenthing like
if word.endswith('.') and '.' not in word[:-1]:
word = word[:-1]
Other notes:
Use re.split() to do all the splits at once. Something like
L = re.split(r'\s+|--|/', textAsString)
#remove empty elements in L
while "" in L:
L.remove("")
The above iterates L twice for each empty word! The remove() calls are expensive too because the remaining elements of L must be shifted down. Do the whole thing in one pass over L with
L = [ w for w in L if w ]
You only need to remove empty elements once, when the rest of the processing is done.
for e in saveRemovedForLaterL:
L.append(e)
could be
L.extend(e)
More information about the Tutor
mailing list