python coding : 【Python入門】テキストファイルから単語をカウント(レベル⭐️)
リンク先のnotebookを参考に、chatGPTが書きました。
動かしてみてください。
【Python入門】テキストファイルから単語をカウント!試行錯誤しながら学ぶステップバイステップガイド
プログラミング初心者の皆さん、今回は「テキストファイルから単語を数える」プログラムを作成します。プログラミングの楽しさは「試行錯誤の積み重ね」にあります。実際にどんなふうに考え、試行錯誤しながらコードを完成させていくのか、一緒に体験してみましょう!
課題の内容
「turtle.txt」というテキストファイルを読み込み、その中に含まれる単語の出現回数を数えて出力する関数を作りましょう!
1. テキストファイルの準備
まずは数えたい単語が入ったテキストファイル「turtle.txt」を作成します。このファイルに、次のテキストを保存します。
text_save = """
Turtles are reptiles of the order Testudines. They are characterized by a special bony or cartilaginous shell
developed from their ribs and acting as a shield. The earliest known turtles date from the Jurassic period.
Modern turtles are divided into two major groups: Cryptodira and Pleurodira. Turtles are found in most
climates around the world and are known for their long lifespans. Some species of turtles can live over
100 years, making them one of the longest-living vertebrates on Earth.
"""
# テキストをファイルに書き込む
with open('turtle.txt', 'w') as file:
file.write(text_save
2. ファイルを読み込んでみる
Pythonで「turtle.txt」ファイルを読み込み、内容を確認します。ここでは「with open」構文を使ってファイルを読み込んでいます。
# ファイルを読み込み
with open('turtle.txt', 'r') as file:
text = file.read()
print(text)
ファイルが正しく読み込まれると、コンソールにテキストの内容が表示されます。
3. テキストの前処理
プログラムで単語を正確にカウントするには、次のような前処理が必要です:
大文字・小文字の違いをなくすために、テキスト全体を小文字に変換
句読点の削除(「.」や「,」など)
まず、テキスト全体を小文字に変換します。
# テキストを小文字に変換
text = text.lower()
print(text)
次に、句読点を削除します。ここでは、削除すべき句読点をまとめたリスト「punctuations」を用意し、1文字ずつチェックして句読点でないものだけを抽出する方法で行います。
# 削除したい句読点のリストを作成
punctuations = '!"#$%&\\'()*+,-./:;<=>?@[\\\\]^_`{|}~'
# サンプルテキストで句読点削除をテスト
text_sample = "Hello, world!. Let's"
clean_text = ''
for char in text_sample:
print("文字:", char)
if char not in punctuations:
clean_text += char
print("句読点削除後:", clean_text)
print("完成:", clean_text)
実行結果で、句読点が正しく削除されたことを確認します。たとえば、「Hello, world!. Let's」は「Hello world Lets」に変わります。
4. 課題テキストで句読点削除を実行
次に、課題のテキスト全体で句読点を削除してみましょう。さきほどのコードを使い、「turtle.txt」の内容から句読点を削除します。
clean_text = ''
for char in text:
if char not in punctuations:
clean_text += char
print(clean_tex)
この段階で、テキストから句読点がなくなり、単語ごとに分割してカウントする準備が整いました。
5. 単語の分割
次に、句読点を削除したテキストを単語ごとに分割します。Pythonの「split()」メソッドを使うと、空白で区切られた単語がリスト形式で取り出せます。ここで分割を確認してみましょう。
# 単語の分割
words = clean_text.split()
print(words)
この出力結果から、テキストが単語ごとのリストに分割されていることを確認できます。
6. 単語をカウントする
分割した単語を1つずつ取り出し、それぞれの出現回数をカウントします。Pythonの辞書(dictionary)を使うと、単語をキーにして、出現回数を値として保存できます。
まずは簡単なテストで辞書に単語を保存し、カウントする方法を確認してみます。
# テスト:リスト内の単語をカウント
word_list = ['This', 'is', 'a', 'sample', 'text.', 'is']
word_count_dict = {}
for word in word_list:
if word in word_count_dict:
word_count_dict[word] += 1
else:
word_count_dict[word] = 1
print(word_count_dict)
ここで、'is': 2 のように、単語が辞書にあればカウントを増やし、なければ新規追加して1に設定しています。
7. 本番テキストで単語のカウントを実行
テストがうまくいったら、課題のテキスト「turtle.txt」の単語リストで同じ処理を行います。
word_count_dict = {}
for word in words:
if word in word_count_dict:
word_count_dict[word] += 1
else:
word_count_dict[word] = 1
print(word_count_dict)
この段階で、各単語の出現回数が辞書に保存され、{'turtles': 5, 'are': 5, 'reptiles': 1, ...} のように表示されるはずです。
8. 出力結果を見やすくソートして表示
最後に、アルファベット順や出現回数の多い順にソートして結果を表示しましょう。以下のコードでは、アルファベット順でソートし、単語とその出現回数をコンソールに表示します。
# アルファベット順にソートして出力
for word, count in sorted(word_count_dict.items()):
print(f"{word} {count}")
また、出現回数の多い順にソートしたい場合は以下のように書き換えられます:
# 出現回数の多い順にソートして出力
for word, count in sorted(word_count_dict.items(), key=lambda x: x[1], reverse=True):
print(f"{word} {count}")
9. 完成した関数にまとめる
最後に、これらの処理をすべて関数にまとめ、ファイル名を指定して実行するだけで単語数を表示できるようにしてみましょう。
# 単語カウント関数
def word_count(filename):
with open(filename, 'r') as file:
text = file.read()
text = text.lower()
punctuations = '!"#$%&\\'()*+,-./:;<=>?@[\\\\]^_`{|}~'
clean_text = ''
for char in text:
if char not in punctuations:
clean_text += char
words = clean_text.split()
word_count_dict = {}
for word in words:
if word in word_count_dict:
word_count_dict[word] += 1
else:
word_count_dict[word] = 1
for word, count in sorted(word_count_dict.items()):
print(f"{word} {count}")
# 実行
word_count('turtle.txt')
まとめ
今回のプロジェクトでは、ファイル操作、文字列の前処理、リストや辞書の使い方、ソートなど、Pythonの基本的な機能にたくさん触れました。少しずつ試行錯誤を重ねていくことで、徐々に理解が深まり、やりたいことができるようになっていきます。
最後に
この記事の課題は、私が師と仰ぐ、
「かめ@米国データサイエンティスト」 さんのコミュニティーの中の coding_challenge の課題を参考にしています。
3年くらい前から、「かめ@米国データサイエンティスト」 さんのブログ、Udemy講座などで、pythonとDSをゆっくり勉強中です。