例題(7)

*


概要

[ edit ]

*


ポイント

この課題で使うPythonの機能 (学習のヒント)

[ edit ]

この例題における解法 (問題解決のヒント)

[ edit ]

  • この例題における解法 (問題解決のヒント) ....
    • 単語をキーとして,頻度を値とする辞書を作ります.
    • str.split()で文字列から単語を切り出します
      • 空白文字などで区切って,リストに分けてくれます
    • 文頭の単語は,大文字始まりなので,str.lower()で全体を小文字に揃えます
    • カンマなどを単語の末尾に付けたまま切り出されることがあります
      • 区切り文字の調整でも対応できると思いますが...
        • (実際に,次回は,例題でカンマ区切りのCSVファイルの読み込みも試みます)
      • str.strip(",.;:")として,前後の余分な文字を切り取ることもできます.
*


実行例

[ edit ]

  • 実行例(1) ... クリックすると拡大します

fig-01

*


本質的な部分 (授業中に順次公開します)

[ edit ]

# ===== 関数定義: 単語の出現頻度をカウントします =====
def counting_words( text, word_freq_table ):
    for word in text.split():
        word_lower = word.lower().strip(",.;:")
        word_freq_table[word_lower] = word_freq_table.get( word_lower, 0 ) + 1
    return( word_freq_table )

# ===== 関数定義: 単語の出現頻度を表示します =====
def print_table( word_count_list, threshold ):
    for (word, count) in word_count_list:
        if count >= threshold:
            print( "  |{0:16s}|{1:2d}|".format( word, count ) )
  • 頻度順の順の並び替え(ソート)は,タプルのリストをsorted()関数に与える際にキーを指定する必要があります.
    • タプルの第二の項(第2項,ゼロ始まりでいえば第1項)をキーとしてソートされます.
    • キーを指定するには,operatorモジュールのitemgetterを使うとよいでしょう.
      • 高度な話題として,λ式を使う方法もよくつかわれますが,それは後日取り上げましょう.
    • 大きいものからソート(降順ソート)するために,reverse=Trueというキーワードパラメータを指定します.

import operator

# ===== 関数定義: 単語の出現頻度を頻度順に表示します =====
def sort_by_count( word_freq_table ):
    result = word_freq_table.items()
    result = sorted( result, reverse=True, key=operator.itemgetter(1) )
    return( result )

*


高度な話題 (授業中,もしくは授業後に順次公開します)

[ edit ]

  • 高度な話題へのリンク: 授業の流れを阻害しないように別ページにします

    • (後日の回の授業内容にはなる可能性がありますが,この回の授業内容には含めません).


配布コード (授業中に順次公開します)

*

*

SoftEng: Python/Prog/Example/04/Ex_007a (last edited 2018-11-05 07:55:59 by TadashiIijima)