ホームページ  >  記事  >  バックエンド開発  >  Pythonで単語数をカウントする考え方を詳しく解説

Pythonで単語数をカウントする考え方を詳しく解説

不言
不言オリジナル
2018-05-08 16:18:492848ブラウズ

この記事では主に Python で単語数をカウントする詳細なアイデアを紹介します。また、興味のある方は一緒に見てください

問題の説明:

Python を使用する関数 count_words() を実装します。この関数は文字列 s と数値 n を受け取り、s 内で最も頻繁に出現する n 個の単語を返します。戻り値は、最も出現頻度の高い n 個の単語とその回数を含むタプルのリストです。つまり、[(, )、(, ) ;), ... ] を出現順に並べ替えます。

すべての入力は小文字であり、句読点やその他の文字は含まれていない (文字と 1 つのスペースのみ) と想定できます。同じ数の出現がある場合は、アルファベット順に並べられます。

例:

print count_words("betty bought a bit of butter but the butter was bitter",3)

出力:

[('butter', 2), ('a', 1), ('betty', 1)]

解決するアイデア問題:

1. 文字列 s を空白で分割して、すべての単語リストを取得します。例: ['betty'、'bought'、'a'、'bit'、'of'、'butter'、 ' but', 'the', 'butter', 'was', 'bitter']

2. マップリストを作成し、split_s を次のようなタプルのリストに変換します: [('betty', 1), ( '買った', 1), ('a', 1), ('bit', 1), ('of', 1), ('butter', 1), ('but', 1), ('the ' , 1), ('butter', 1), ('was', 1), ('bitter', 1)]

3. タプルの最初のインデックス値が同じ場合、マップリスト内の要素をマージします。 、その後、その 2 番目のインデックス値が追加されます。

// 注:defaultdict を使用する準備をします。取得したデータは次のとおりです: {'betty': 1, 'bought': 1, 'a': 1, 'bit': 1, 'of': 1, 'butter': 2, 'but': 1, 'the ': 1, 'was': 1, 'bitter': 1}

4. キーでアルファベット順に並べ替えると、次のようになります: [('a', 1), ('betty', 1), ( 'ビット', 1), ('苦い', 1), ('買った', 1), ('しかし', 1), ('バター', 2), ('の', 1), ('ザ ' , 1), ('was', 1)]

5. 二次ソートを実行し、値でソートし、次を取得します: [('butter', 2), ('a', 1), ('betty ' 、1)、('ビット'、1)、('苦い'、1)、('買った'、1)、('しかし'、1)、('の'、1)、('その'、1 ), ('was', 1)]

6. スライスを使用して * より高い頻度でデータのグループを抽出します

概要:defaultdict を使用しない並べ替え結果も python3 では正しいですが、python2 では正しくありません。 defaultdict 自体には順序がありません。リストを区別するには、ソートする必要があります。

サードパーティのモジュールを使用せずに自分で作成してみることもできます

解決策 1 (defaultdict を使用):

from collections import defaultdict
"""Count words."""
def count_words(s, n):
  """Return the n most frequently occuring words in s."""
  split_s = s.split()
  map_list = [(k,1) for k in split_s]
  output = defaultdict(int)
  for d in map_list:
    output[d[0]] += d[1]
  output1 = dict(output)
  top_n = sorted(output1.items(), key=lambda pair:pair[0], reverse=False)
  top_n = sorted(top_n, key=lambda pair:pair[1], reverse=True)
  return top_n[:n]
def test_run():
  """Test count_words() with some inputs."""
  print(count_words("cat bat mat cat bat cat", 3))
  print(count_words("betty bought a bit of butter but the butter was bitter", 4))
if __name__ == '__main__':
  test_run()

解決策 2 (Counter を使用)

from collections import Counter
"""Count words."""
def count_words(s, n):
  """Return the n most frequently occuring words in s."""
  split_s = s.split()
  split_s = Counter(name for name in split_s)
  print(split_s)
  top_n = sorted(split_s.items(), key=lambda pair:pair[0], reverse=False)
  print(top_n)
  top_n = sorted(top_n, key=lambda pair:pair[1], reverse=True)
  print(top_n)
  return top_n[:n]
def test_run():
  """Test count_words() with some inputs."""
  print(count_words("cat bat mat cat bat cat", 3))
  print(count_words("betty bought a bit of butter but the butter was bitter", 4))
if __name__ == '__main__':
  test_run()

関連する推奨事項:

円周率の値を任意の桁に計算する方法の Python の例

以上がPythonで単語数をカウントする考え方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。