Advertisement
Guest User

Untitled

a guest
Oct 21st, 2019
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.27 KB | None | 0 0
  1. #!/usr/bin/python3
  2. import re
  3.  
  4. def countLines(file="phil.txt"):
  5.     count = sum(1 if not re.match(r"^\s*$", line) else 0 for line in open(file, 'r'))
  6.     return count
  7.  
  8. def countWords(file="phil.txt"):
  9.     with open(file, 'r') as f:
  10.         count = len(f.read().split())
  11.     return count
  12.  
  13. def countLetters(file="phil.txt"):
  14.     with open(file, 'r') as f:
  15.         count = len(re.findall(r"\w", f.read()))
  16.     return count
  17.  
  18. def frequency(pattern, file="phil.txt", top=7):
  19.     unique = {}
  20.     with open(file, 'r') as f:
  21.         matches = re.findall(pattern, f.read().lower())
  22.         count = len(matches)
  23.         for word in matches:
  24.             if word not in unique:
  25.                 unique[word] = 0
  26.             unique[word] += 1
  27.    
  28.     output = []
  29.     temp = sorted(unique.items(), key = lambda x: x[1], reverse=True)
  30.     for _, val in enumerate(temp):
  31.         percent = (val[1] / count) * 100
  32.         output.append("'{0}': {1} | {2:.1f}%".format(val[0], val[1], percent))
  33.     return "\n".join(output[:top])
  34.  
  35. def wordFrequency(file="phil.txt", top=7):
  36.     return frequency(r"\b\w+\b", file, top)
  37.  
  38. def letterFrequency(file="phil.txt", top=7):
  39.     return frequency(r"\w", file, top)
  40.  
  41. def listAll(file="phil.txt", top=7):
  42.     output = {
  43.         "lines": countLines(file),
  44.         "words": countWords(file),
  45.         "letters": countLetters(file),
  46.         "word_frequency": wordFrequency(file, top),
  47.         "letter_frequency": letterFrequency(file, top),
  48.     }
  49.  
  50.     return "\n".join(["{}:\n{}".format(key, val) for key, val in output.items()])
  51.  
  52. def goodbye():
  53.     return "Good bye!"
  54.  
  55. def present(menu):
  56.     output = []
  57.     for key, val in enumerate(menu):
  58.         output.append("{} - {}".format(key+1, val))
  59.     return "Available choices:\n{}".format("\n".join(output))
  60.  
  61. def main(args):
  62.     menu = {
  63.         "q": goodbye,
  64.         "all": listAll,
  65.         "lines": countLines,
  66.         "words": countWords,
  67.         "letters": countLetters,
  68.         "wfreq": wordFrequency,
  69.         "lfreq": letterFrequency,
  70.     }
  71.     show = present(menu)
  72.     choice = ""
  73.     while choice != "q":
  74.         print(show)
  75.         choice = input("--> ")
  76.         if choice in menu:
  77.             print(menu[choice]())
  78.  
  79. if __name__ == "__main__":
  80.     import sys
  81.     main(sys.argv[1:])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement