回答例(基本問題0501)

[ edit ]

   1 #!/usr/bin/env python
   2 # -*- coding: utf-8 -*-
   3 # ==============================================================================
   4 # * Copyright (c) 2018 IIJIMA, Tadashi
   5 # *       (IIJIMA Laboratory, Dept. of Science and Technology, Keio University).
   6 # ==============================================================================
   7 # ソフトウェア工学[11] 例題[05]-(001a)  BP_05_001a_word_frequency_list.py
   8 # BP(Basic Problem) 05-001a: 英文文字列中の単語の出現頻度表 (単語順に表示)
   9 #        2018-12-19 飯島 正 (iijima@ae.keio.ac.jp)
  10 # ==============================================================================
  11 # operatorモジュールをインポートします.
  12 import operator
  13 # ==============================================================================
  14 # ===== 関数定義: 単語の出現頻度をカウントします =====
  15 def counting_words( text, word_freq_table ):
  16     for word in text.split():
  17         word_lower = word.lower().strip(",.;:")
  18         word_freq_table[word_lower] = word_freq_table.get( word_lower, 0 ) + 1
  19     return( word_freq_table )
  20 # ==============================================================================
  21 # ===== 関数定義: 単語の出現頻度を表示します =====
  22 def print_table( f, word_count_list, threshold ):
  23     for (word, count) in word_count_list:
  24         if count >= threshold:
  25             f.write( "  |{0:16s}|{1:2d}|{2:s}".format( word, count, "*"*count ) )
  26             f.write( "\n" )
  27 # ==============================================================================
  28 # ===== 関数定義: 単語の出現頻度を単語順に表示します =====
  29 def sort_by_word( word_freq_table ):
  30     result = word_freq_table.items()
  31     result = sorted( result, key=operator.itemgetter(0) )
  32     return( result )
  33 # ==============================================================================
  34 # ===== 関数定義: 単語の出現頻度を単語順に表示します =====
  35 def sort_by_freq( word_freq_table ):
  36     result = word_freq_table.items()
  37     result = sorted( result, key=operator.itemgetter(1),reverse=True )
  38     return( result )
  39 # ==============================================================================
  40 # ===== 【メイン・プログラム】 =====
  41 # ----- オープニングメッセージ -----
  42 print( "英文文字列中の単語の出現頻度表 (単語順に表示): " )
  43 print( "    ※⇒ファイル入力をやりましょう." )
  44 print()
  45 # ==============================================================================
  46 # ----- データを準備する (日本国憲法の前文です) -----
  47 #      出典:日本法令外国語訳データベースシステム
  48 #      http://www.japaneselawtranslation.go.jp/law/detail/?id=174
  49 #      利用規約に基づいて,引用転載していますが,改行や段落の字下げの挿入などの編集加工を行っています.
  50 
  51 input_file_name = "kenpo.txt"
  52 output_file_name = "result.txt"
  53 
  54 ## ----- ファイルをオープンします(モードを省略すると読み込み) -----
  55 with open( input_file_name ) as f:
  56     ## ----- データの読み込み -----
  57     text = f.read()
  58 
  59 # ----- 単語の出現頻度をカウントする -----
  60 word_freq_table = {}
  61 word_freq_table = counting_words( text, word_freq_table )
  62 
  63 with open( output_file_name, "w", encoding="Shift_JIS" ) as f:
  64     f.write( text )
  65     f.write( "\n" )
  66     # ----- 単語の出現頻度を単語順に表示します (出現頻度がthreshold以上のもの) -----
  67     threshold = 3
  68     f.write( "単語の出現頻度(単語順) : 出現頻度が" + str( threshold ) + "以上のもの\n" )
  69     print_table( f, sort_by_freq( word_freq_table ), threshold )
  70     f.write( "\n" )
  71 # ==============================================================================

SoftEng: BP0501 (last edited 2018-12-25 07:13:04 by TadashiIijima)