最近、マネージャーから、ファイル内の各単語の出現数を数え、最も頻繁に出現する 5 つの単語をリストするというタスクが与えられました。この記事では、Python で単語の数を数えるというアイデアの分析を紹介します。必要な友達はそれを参照してください
ファイル内に各単語が出現する回数を数えてください。最も頻繁に使用される 5 つの単語をリストします。
この質問は、長年にわたって CET-4 および CET-6 試験に出てきた高頻度単語の統計など、実用的なシナリオで広く使用されています。私は Li Xiaolai のことを覚えています。プログラミングスキルを活かして暗記本を出版したベストセラーの語彙本は、単語の出現頻度に基づいて暗記するもので、学生の間で非常に人気があります。これは、実際の問題を解決するためにプログラミング スキルが使用される典型的なシナリオです。さらに、データ分析中に、これらのワード クラウド効果は基本的に単語の頻度統計に基づいてフォント サイズを調整します。Python の知識をうまく活用して問題を解決できれば、本格的に Python を使い始めたことになります。
この質問では主に次の知識ポイントを検討します:
1. ファイルを正しく読み書きする方法
Python でファイルを読み書きするには、組み込み関数 open を使用できます。 () および open 関数 python2 と python3 の間には特定の違いがあります。たとえば、Python ではファイルの読み取りと書き込みのエンコード形式を指定できますが、Python では 2 と 3 の両方と互換性を持たせるために、通常は を使用します。 io モジュールの open 関数を使用してドキュメントを確認し、それらの違いを理解し、アクティブな学習能力と情報を調べる習慣を身につけることができます。
もう 1 つのポイントは、ファイルの読み取りと書き込み後に、ファイル記述子を閉じる必要があるということです。try...excel...finally 構文の使用に加えて、より洗練された with...as 構文も使用できます。ファイルを自動的に閉じます。
2. データを並べ替える方法
sorted 関数は頻繁に使用される組み込み関数であり、パラメーター キーを指定することでカスタマイズされた並べ替えを実行できるため、その使い方も非常に強力です。数値と文字を並べ替えるだけでなく、リスト、辞書、カスタム オブジェクトを並べ替えることもできます。たとえば、人物オブジェクトの場合は、年齢に従って並べ替えることができます。さらに、list.sort とsorted の違いを明確に区別できれば、この関数は非常に柔軟に使用できます。
3. 辞書データ型の使用
単語頻度統計を行うには、単語をキーとして使用し、単語の出現回数を使用するのが間違いなく最適なデータ型です。辞書の値として各単語の頻度を記録するのは非常に便利です。辞書は電話帳に似ており、それぞれの名前が電話番号に関連付けられています。また、この辞書の最大の特徴は、検索速度が非常に速いことです。理想的には、時間計算量は O(1) です。辞書について詳しく知りたい場合は、この記事を読むことをお勧めします https://www.laurentluce.com/posts/python-dictionary-implementation/
。 4. 正規表現の使用
テキストと文字列の処理では、正規表現は単なる成果物であり、データ クローリングやデータ クリーニングなどに広く使用されています。プログラミング言語はそれをサポートしています。私たちがしなければならないのは、正規表現を学ぶだけでなく、その API に精通して初めて、それを実際のシナリオに適用できるようになります。正規表現に関する記事をお勧めします: http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html また、一部の学生が jieba 単語分割ライブラリを導入していることもわかりました。中国語の単語の分割を行うライブラリは非常に便利です。興味があれば、それについて学ぶことができます。
分析後、実際に非常に迅速に実装できます。したがって、要件を取得したら、まず要件を明確にし、それを達成するためにどのようなテクノロジを使用できるかを考えてからコードを書き始める必要があります。実際、仕事でコードを書くのに費やす時間は半分未満です。
# -*- coding:utf-8 -*- import io import re class Counter: def __init__(self, path): """ :param path: 文件路径 """ self.mapping = dict() with io.open(path, encoding="utf-8") as f: data = f.read() words = [s.lower() for s in re.findall("\w+", data)] for word in words: self.mapping[word] = self.mapping.get(word, 0) + 1 def most_common(self, n): assert n > 0, "n should be large than 0" return sorted(self.mapping.items(), key=lambda item: item[1], reverse=True)[:n] if __name__ == '__main__': most_common_5 = Counter("importthis.txt").most_common(5) for item in most_common_5: print(item)
印刷結果:
('is', 10)
('better', 8)
('than', 8)
('the', 6)
('to', 5)
まとめ
あなたのコードを見ると、多くのコードはまだ命名が不規則であり (PEP8 を読むことをお勧めします)、コードのレイアウトは混乱しています (読みにくいです)。フォーマットには Pycharm を使用することをお勧めします) 変更)。実装方法が非常に複雑に見えるコードも多数あります (コードが複雑になればなるほど、通常、バグも多くなります)。もちろん、実装方法はこれだけではありません。
たとえば、Python モジュール自体には、dict クラスから継承され、統計に使用される collections.Counter クラスが用意されています。注意していれば、このクラスを使用していることに気づくかもしれません。実装されたカウンターは、コレクションのカウンターと非常によく似ています。実際、これはホイール作成であり、既製のものがあれば、自分で作成する必要はありません。もっとうまくできるという自信がない限り。 Python が Counter ツールを提供しなかったらどうするかを考えることもできます。
さらに、このモジュールは順序付き辞書オブジェクト OrderedDict も提供します。これにより、手動による並べ替え操作を省略できます。最後に、上で述べたすべての内容を学習して要約することをお勧めします。 100日続けることができれば、Pythonをかなり理解できるようになると思います。
関連する推奨事項:
Python は、picture_python として 2 次元配列出力を実装します
以上がPython は単語の出現回数をカウントします_pythonの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。