【Python】文章に出現する文字・文字列(単語)の回数を数える(setdefaultメソッド)

時計 2020.10.07 / 時計

【Python】文章に出現する文字・文字列(単語)の回数を数える(setdefaultメソッド)

とある文章でアルファベットや文字列(単語)の出現回数を数えたいことってありませんか?

私は一回もないです。

ですが、そういった機能をもったアプリをPythonで作りたいという人向けに、本記事では文章に出現する文字・文字列(単語)の回数を数える方法を解説していきます。

今回解説する方法は、単に出現回数を数えるだけにとどまらず、応用すれば様々なことに使用できる、と思っています。

文章に現れる文字の出現回数を数える

ここでは特定の文章中に出現する文字の出現回数を数えるプログラムを作成していきます。
対象の文章は英文とします。

作り方としては何パターンか思いつくかと思います。
例えば、すべてのアルファベットに初期値0を設定して、出現したら1をプラスするという方法があります。

しかしここでは便利なメソッドを使って、より簡単にプログラムを作成してみましょう。

ここで使用するメソッドはsetdefault()メソッドです。

以下記事では、setdefault()メソッドを使って、辞書にキーがない場合にキーと値のペアを登録するのに使用しています。

今回はsetdefault()メソッドで初期値を設定するために使用しています。
以下サンプルプログラムを通して使い方を説明します。

sentence = "they’re things we do around the house like doing the laundry, washing the dishes and so on."
alp = {}

for character in sentence:
    alp.setdefault(character, 0)
    alp[character] = alp[character] + 1

print(alp)

# {'t': 5, 'h': 8, 'e': 9, 'y': 2, '’': 1, 'r': 3, ' ': 16, 'i': 5, 'n': 7, 'g': 3, 's': 6, 'w': 2,
'd': 6, 'o': 6, 'a': 4, 'u': 3, 'l': 2, 'k': 1, ',': 1, '.': 1}

上記プログラムでは、setdefalt()メソッドを使用して辞書にアルファベット(キー)が登録されていなければ、初期値0(値)で辞書にアルファベットと初期値の組み合わせを登録します。

そして辞書に対象アルファベットが登録されていれば、setdefalt()メソッドは何もせずに、値に1を足しています。

アルファベットを並び替える

次に結果がより見やすくなるように、アルファベットでソート(並び替え)を行います。
辞書の並び替えには、sorted()メソッドを使用します。

sentence = "they’re things we do around the house like doing the laundry, washing the dishes and so on."
alp = {}

for character in sentence:
    alp.setdefault(character, 0)
    alp[character] = alp[character] + 1

alp = sorted(alp.items())
print(alp)
# [(' ', 16), (',', 1), ('.', 1), ('a', 4), ('d', 6), ('e', 9), ('g', 3), ('h', 8), ('i', 5),
('k', 1), ('l', 2), ('n', 7), ('o', 6), ('r', 3), ('s', 6), ('t', 5), ('u', 3), ('w', 2), ('y', 2), ('’', 1)]

この方法ではタプル型のリストになるので、取り扱いに注意が必要ですね。

文章に現れる文字列(単語)の出現回数を数える

次は文字ではなく文字列(単語)の出現回数を数えるプログラムを作成していきます。

ここでもsetdefault()メソッドを使用します。
上述している文字の出現回数を数えるプログラムと比べて大きな違いはありません。

以下にサンプルプログラムを記載します。

sentence = "they're things we do around the house like doing the laundry, washing the dishes and so on. Let's do it."
word = ""
words = {}
for character in sentence:
    if character == " " or character == "," or character == ".":
        if not word == "":
            words.setdefault(word,0)
            words[word] = words[word] + 1
            word = ""
    else:
        word = word + character
print(words)

スペースまたはカンマ、ピリオドが出現するまでを一つの単語とし、その単語は辞書のキーとして、出現回数を値としています。

まとめ

特定の文章の文字・単語の出現回数を数えたい場合は、上記プログラムではsentenceにその文章を格納すれば計算することができます。

より柔軟なプログラムを作るなら、tkinterなどを使ってGUIアプリを作成するといいです。