Pythonで文字列内の各単語の出現頻度をカウントする3つの方法
テキスト分析では、さまざまなアルゴリズムで処理を行うために、単語を数えて重み付けすることがよくあります。本記事では、与えられた文中の各単語の頻度(出現回数)を求める方法を紹介します。主に以下の3つのアプローチがあります。
1. collectionsモジュールのCounterを使う方法
標準ライブラリのcollectionsモジュールに含まれるCounter()を使うと、単語の頻度を簡単に取得できます。まずsplit()で文章を単語に分割し、その結果に対してmost_common()を適用することで、出現回数の多い順に並べたリストが得られます。
コード例
from collections import Counter line_text = "Learn and practice and learn to practice" freq = Counter(line_text.split()).most_common() print(freq)
上記のコードを実行すると、以下のような結果が出力されます。
[('and', 2), ('practice', 2), ('Learn', 1), ('learn', 1), ('to', 1)]2. NLTKのFreqDist()を使う方法
自然言語処理ツールキット(NLTK)が提供するFreqDist関数は、文字列内の総単語数だけでなく、ユニークな単語の種類数も確認できます。most_common()を適用すれば、各単語の頻度を取得できます。
コード例
from nltk import FreqDist text = "Learn and practice and learn to practice" words = text.split() fdist1 = FreqDist(words) print(fdist1) print(fdist1.most_common())
上記のコードを実行すると、以下のような結果が出力されます。
<FreqDist with 5 samples and 7 outcomes>
[('and', 2), ('practice', 2), ('Learn', 1), ('learn', 1), ('to', 1)]3. 辞書(Dictionary)とcount()を使う方法
このアプローチでは、まず文章をsplit()で単語のリストに分割し、リスト内包表記でcount()を適用して各単語の出現回数を求めます。その後、zip()で単語と頻度値を組み合わせ、最終的な結果を辞書として表示します。
コード例
text = "Learn and practice and learn to practice" words = [] words = text.split() wfreq=[words.count(w) for w in words] print(dict(zip(words,wfreq)))
上記のコードを実行すると、以下のような結果が出力されます。
{'Learn': 1, 'and': 2, 'practice': 2, 'learn': 1, 'to': 1}まとめ
単語の頻度を数える方法として、標準ライブラリのみで手軽に実装できるCounter、統計情報も併せて確認できるNLTKのFreqDist、依存ライブラリなしで柔軟に制御できる辞書とcount()の組み合わせの3つを紹介しました。用途や規模に応じて最適な手法を選択してください。なお、大文字と小文字は区別されるため、必要に応じてlower()などで正規化してからカウントするとよいでしょう。
-
Pythonでアナグラム単語の最大サブセットサイズを求める方法
小文字からなる単語のリストが与えられたとき、互いにアナグラムの関係にある文字列からなる最大サブセットのサイズを求めるのが本記事の課題です。アナグラムとは、一方の文字列がもう一方の文字列の並べ替え(文字の順番を入れ替えたもの)になっている関係を指します。たとえば、「python」と「typhon」はアナグラムです。Pythonでは、標準ライブラリのcollections.Counter()メソッドを活用することで、この問題を非常に効率的に解決できます。アルゴリズムの手順ステップ1:スペース区切りの入力文字列を単語ごとに分割する。ステップ2:リスト内の各文字列を文字順にソートする。ステップ3:Co
-
Pythonで文字列内の最初に繰り返される単語を見つける方法
文字列が1つ与えられ、その中で最初に繰り返し出現する単語を見つけるのが本記事のテーマです。この問題を実装する際には、Pythonの標準ライブラリである「collections」モジュールを活用します。collectionsが提供するCounter()クラスを使うことで、各単語の出現回数を簡単に集計できます。 アルゴリズム 処理の手順は以下のとおりです。 与えられた文字列をスペースで区切り、単語のリストに分割します。 単語のリストをCounter(辞書形式)に変換し、各単語の出現回数を集計します。 単語のリストを先頭から順に走査し、出現回数が1より多い最初の単語を特定します。 サンプルコード