Bug fixes and features #1

Merged
witten merged 12 commits from deroshkin/novel-stats-fork:deroshkin_branch into master 2021-10-22 20:05:18 +00:00
1 changed files with 25 additions and 15 deletions
Showing only changes of commit dcfea89ec7 - Show all commits

View File

@ -33,19 +33,26 @@ def main():
word_count_by_status = collections.defaultdict(int)
word_count_by_act = collections.defaultdict(int)
status_by_chapter = {}
Review

Clever!

Clever!
current_status = None
for line in open(filename).readlines():
if line.startswith(CHAPTER_MARKER):
word_count_by_act[act_heading] += word_count_by_chapter[chapter_heading]
total_word_count += word_count_by_chapter[chapter_heading]
if chapter_heading in status_by_chapter:
word_count_by_status[status_by_chapter[chapter_heading]] += 1
chapter_heading = line[len(CHAPTER_MARKER):].strip('()\n')
word_count_by_chapter[chapter_heading] = count_words(chapter_heading) # Count the words in chapter heading, because the chapter number and title count as words.
status_by_chapter[chapter_heading] = collections.defaultdict(int)
current_status = None
elif line.startswith(STATUS_MARKER):
status_by_chapter[chapter_heading] = line[len(STATUS_MARKER):].strip('()\n')
if current_status == None:
current_status = line[len(STATUS_MARKER):].strip('()\n')
status_by_chapter[chapter_heading][current_status] = count_words(chapter_heading)
else:
current_status = line[len(STATUS_MARKER):].strip('()\n')
status_by_chapter[chapter_heading][current_status] += 0
elif line.startswith(ACT_MARKER):
act_heading = line[len(ACT_MARKER):].strip('()\n')
word_count_by_act[act_heading] = count_words(act_heading)
@ -55,29 +62,32 @@ def main():
line_word_count = count_words(line)
word_count_by_chapter[chapter_heading] += line_word_count
if chapter_heading in status_by_chapter:
word_count_by_status[status_by_chapter[chapter_heading]] += line_word_count
if current_status:
word_count_by_status[current_status] += line_word_count
status_by_chapter[chapter_heading][current_status] += line_word_count
witten marked this conversation as resolved
Review

What does the += 0 do? Maybe should just be = 0?

What does the `+= 0` do? Maybe should just be `= 0`?
Review

The += 0 is intentional.

If this status hasn't been used in this chapter yet it's no different from = 0, mainly here to initialize.

If this status has been used, it leaves it unchanged.

Didn't want to do a split logic.

The `+= 0` is intentional. If this status hasn't been used in this chapter yet it's no different from `= 0`, mainly here to initialize. If this status has been used, it leaves it unchanged. Didn't want to do a split logic.
Review

Okay, I see now! Is it necessary to initialize though? Like won't the previous status_by_chapter[chapter_heading][current_status] = count_words(chapter_heading) still work even if it hasn't been initialized? Or is the idea that sometimes you want to report statuses even if there are zero words for them?

Okay, I see now! Is it necessary to initialize though? Like won't the previous `status_by_chapter[chapter_heading][current_status] = count_words(chapter_heading)` still work even if it hasn't been initialized? Or is the idea that sometimes you want to report statuses even if there are zero words for them?
Review

Yep, you're right.

I think the only time that line would do anything is if you put a status change at the end of the file (the way it is in my version would report a 0 for that status), and now that I think about it, deleting that line would be an improvement, in my opinion.

Also same thing if you switch status twice in a row.

Yep, you're right. I think the only time that line would do anything is if you put a status change at the end of the file (the way it is in my version would report a 0 for that status), and now that I think about it, deleting that line would be an improvement, in my opinion. Also same thing if you switch status twice in a row.
Review

Makes sense. I'll remove it after merging!

Makes sense. I'll remove it after merging!
# Do some final accounting after the last chapter.
word_count_by_act[act_heading] += word_count_by_chapter[chapter_heading]
total_word_count += word_count_by_chapter[chapter_heading]
if chapter_heading in status_by_chapter:
word_count_by_status[status_by_chapter[chapter_heading]] += 1
# Print out word counts.
for chapter_heading, chapter_word_count in word_count_by_chapter.items():
if chapter_heading is None:
continue
chapter_status = status_by_chapter.get(chapter_heading)
print(
'chapter {}: {:,} words{}'.format(
chapter_heading,
chapter_word_count,
' ({})'.format(chapter_status) if chapter_status else '',
)
)
if len(status_by_chapter[chapter_heading]) > 1:
print(f'chapter {chapter_heading}:')
for chapter_status, status_count in status_by_chapter[chapter_heading].items():
print(f'\t {status_count:,} ({chapter_status})')
print(f'\t {chapter_word_count:,} words (total)')
elif len(status_by_chapter[chapter_heading]) == 1:
chapter_status = list(status_by_chapter[chapter_heading].keys())[0]
print(f'chapter {chapter_heading}: {chapter_word_count:,} ({chapter_status})')
else:
print(f'chapter {chapter_heading}: {chapter_word_count:,}')
print()