Size: 401
Comment:
|
← Revision 5 as of 2018-10-24 16:06:22 ⇥
Size: 402
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 10: | Line 10: |
==== 例題() ==== | ==== 例題(6) ==== |
例題(6)
Contents
概要
*
ポイント
この課題で使うPythonの機能 (学習のヒント)
[ edit ]
- この例題のポイント ...
- この目的専用ともいえるcollections.Counterというオブジェクト(クラス)もありますが,ここでは,Dictの使い方を覚える目的ですので,Dictを使って実装してみましょう.
この例題における解法 (問題解決のヒント)
[ edit ]
- この例題における解法 (問題解決のヒント) ....
- 単語をキーとして,頻度を値とする辞書を作ります.
- str.split()で文字列から単語を切り出します
- 空白文字などで区切って,リストに分けてくれます
- 文頭の単語は,大文字始まりなので,str.lower()で全体を小文字に揃えます
- カンマなどを単語の末尾に付けたまま切り出されることがあります
- 区切り文字の調整でも対応できると思いますが...
- (実際に,次回は,例題でカンマ区切りのCSVファイルの読み込みも試みます)
- str.strip(",.;:")として,前後の余分な文字を切り取ることもできます.
- 区切り文字の調整でも対応できると思いますが...
実行例
*
本質的な部分 (授業中に順次公開します)
[ 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()関数に与えるだけで大丈夫です.
- タプルの最初の項(第1項,ゼロ始まりなのでゼロ項といった方がよいかもしれませんね)をキーとしてソートされます.
# ===== 関数定義: 単語の出現頻度を単語順に表示します =====
def sort_by_word( word_freq_table ):
result = word_freq_table.items()
result = sorted( result )
return( result )
- キーを指定するには,operatorモジュールのitemgetterを使うとよいでしょう.
- 高度な話題として,λ式を使う方法もよくつかわれますが,それは後日取り上げましょう.
import operator
# ===== 関数定義: 単語の出現頻度を頻度順に表示します =====
def sort_by_word( word_freq_table ):
result = word_freq_table.items()
result = sorted( result, key=operator.itemgetter(0) )
return( result )
高度な話題 (授業中,もしくは授業後に順次公開します)
[ edit ]
⇒ 高度な話題へのリンク: 授業の流れを阻害しないように別ページにします
- (後日の回の授業内容にはなる可能性がありますが,この回の授業内容には含めません).
配布コード (授業中に順次公開します)