Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで文中にちょうどK回出現する単語をすべて抽出・表示する方法

テキスト処理では、「文中に出現する単語のうち、ちょうどK回出現するものだけを取り出して表示したい」という要件がよくあります。Pythonでは、split()メソッドで文字列を単語に分割し、count()メソッドで出現回数を数えることで、この処理をシンプルに実装できます。

本記事では、基本的な実装方法から、標準ライブラリのcollections.Counterを使った効率的な方法まで、サンプルコードと実行結果付きで解説します。

基本的な実装例

まずは、split()count()を組み合わせた基本的な方法から見ていきましょう。

def key_freq_words(my_string, K):
    my_list = my_string.split(' ')
    for word in set(my_list):
        if my_list.count(word) == K:
            print(word)

my_string = 'hi there how are you, how are u'
K = 2

print('対象の文字列:')
print(my_string)
print(f'{K}回出現する単語:')
key_freq_words(my_string, K)

実行結果

対象の文字列:
hi there how are you, how are u
2回出現する単語:
how
are

コードの解説

  • 関数の定義: key_freq_words関数は、対象の文字列とキー(K)を引数として受け取ります。

  • 文字列の分割: split(' ')により、文字列が空白区切りで単語のリストに変換されます。

  • 重複の排除: set()でリストを集合に変換することで、同じ単語が複数回表示されるのを防ぎます。

  • 出現回数の判定: 各単語の出現回数がキーの値と一致した場合のみ、その単語をコンソールに表示します。

  • 関数の呼び出し: 関数の外側で文字列とキーを定義し、それらを引数として関数を呼び出すことで結果が出力されます。

注意点: ループ中のリスト操作は避ける

同様の処理を実装する際、ループ内でremove()を使って表示済みの単語をリストから削除する方法が用いられることがあります。しかし、イテレーション中にリストのサイズが変わると要素の読み飛ばしが発生し、意図しない結果になる可能性があります。重複表示を防ぎたい場合は、上記のようにset()を活用するのが安全です。

より効率的な方法: collections.Counterを活用

基本の方法では、単語ごとにcount()を呼び出すため、単語数が多くなると計算量がO(n²)に増大し、非効率になります。標準ライブラリのcollections.Counterを使えば、出現回数を一括で集計でき、より高速かつ簡潔に記述できます。

from collections import Counter

def key_freq_words(my_string, K):
    counter = Counter(my_string.split(' '))
    for word, freq in counter.items():
        if freq == K:
            print(word)

my_string = 'hi there how are you, how are u'
key_freq_words(my_string, 2)

補足: 句読点の扱いに注意

これらの方法では、単純に空白で文字列を分割しているため、「you,」のようにカンマが付いた単語は「you」とは別の単語として扱われます。句読点を無視して厳密に数えたい場合は、re.findall(r'\w+', my_string)のように正規表現で単語を抽出するとよいでしょう。

まとめ

文中にちょうどK回出現する単語を抽出するには、split()count()を組み合わせるのが最も手軽な方法です。ただし、データ量が多い場合や厳密な単語区切りが必要なケースでは、collections.Counterや正規表現を活用することで、より効率的かつ正確に処理できます。用途に応じて適切な方法を選択しましょう。

  1. 指定された文字列のすべての順列を出力するPythonプログラム

    本記事では、以下の問題に対する解決策について詳しく学んでいきます。 問題文 1つの文字列が与えられたとき、その文字列から作成できるすべての順列(並べ替えの組み合わせ)を表示する必要があります。 それでは、以下の実装例で具体的な解決策を見ていきましょう。 実装例 # リストを文字列に変換 def toString(List): return .join(List) # 順列の生成 def permute(a, l, r): if l == r: print(toString(a)) else: for i in range(l, r +

  2. 文字列の中から偶数の長さの単語を出力するPythonプログラム

    本記事では、与えられた問題を解決するための考え方と実装方法について解説します。Pythonの基本的な文字列操作を組み合わせることで、初心者の方でも簡単に実装できる内容となっています。 問題文 文字列が与えられたとき、その中に含まれる単語のうち、文字数が偶数であるものをすべて画面に表示するプログラムを作成します。 例えば、「tutorial point」という文字列が入力された場合、「tutorial」は8文字(偶数)なので出力され、「point」は5文字(奇数)なので出力されません。 解決のアプローチ この問題は、以下の手順で解決できます。 split()関数を使って、入力文字列を空白区切り