質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • Python 3.x

    9865questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • 正規表現

    924questions

    正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

  • Jupyter

    423questions

  • 自然言語処理

    153questions

    自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

【python超初心者】正規表現を用いて単語カウントを行うには?

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 105

honasora

score 0

1バイト文字のみのtxtの大文字⇔小文字変換。スペース区切り(正規表現)で単語リストを作り、出現回数降順でカウントリストを作る

Pythonで自然言語処理を行うために文字列操作の練習を始めた者です。
txtやcsvをインポートして文字列操作(大文字⇔小文字、半角⇔全角、スペース区切り、カンマ区切り)して単語ごとの出現頻度を算出できるようになりたくて、jupyter-notebookにて課題に取り組んでおりますが、最初の課題で躓いてしまいました。

該当のソースコード

Python3
ソースコード
import re

f_test = open('hoge.txt','r') #txtをインポート。ちゃんとできたかprintで確認。
lines = f_test.readlines()
for line in lines:
print(line)

f_test.close()

with open('hoge.txt','r') as f: #全て小文字に変換。ちゃんとできたかprintで確認。
lines=f.read().lower()
print(lines)

def words_list(lines): #スペースで区切って単語リストを作る。printで確認できない。
return re.split(("[^a-z]+",lines)[:-1])
print(word_list)

def words_to_count(word_list): #辞書を作って単語をカウント。printで確認できない。
wdict={word:0 for word in set(word_list)}
for w in word_list:
wdict[w] += 1
return wdict
print(wdict)

def print_words(word_dict): #降順に並び替え。printで確認できない。
for word in sorted(word_dict,key=lambda x:(-word_dict[x],x)):
print(word,word_dict[word])

試したこと

txtのインポート、大文字を小文字に変換する、は正しくできたかどうかをprint()で確認できたのですが、その後の正規表現を用いてスペース区切りにて単語をリストに分割、で躓き、以後の単語ごとに出現回数をカウント、出現回収降順に並び替える、が上手くいかず、本やWebで調べたものの上手くいきませんでした。

補足情報(FW/ツールのバージョンなど)

jupyternotebookでコードが正しいか都度確認するようにしていますが、正規表現以降ではエラーも何もでないものの以後うまくいかない。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • can110

    2019/05/16 08:12 編集

    インデントがなくなりソースが読めませんし実行もできません。
    まずはソースをコードブロック```で囲んでください。

    キャンセル

  • honasora

    2019/05/17 08:49

    返信が遅くなりすいません。マークダウンについて調べてましたが、本業に手を取られて理解できず…質問する資格ないです。ごめんなさい。

    キャンセル

回答 2

0

インデントが潰れていて読めないので若干憶測含みですが、関数の概念が理解できていないのではないでしょうか。

>>> def add1(x):  # ここで実行される訳ではない
...     print(x+1)
... 
>>> add1(1)  # 関数呼び出しを行って初めて呼び出される
2
>>> hoge = 10
>>> add1(hoge)  # 適当な変数名でもいい(引数名と合わせる必要はない)
11
>>> def add2(x):
...     x = x + 2  # 関数の中で引数に代入してみる
...     print(x)
... 
>>> fuga = 20
>>> add2(fuga)
22
>>> fuga # 呼び出し元には影響が波及しない(代入に関してであって、属性アクセスなどはまた別)
20

というあたりをよく勉強してください(文字列操作どうこう以前にやるべきことが多そう)。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/17 08:48

    おっしゃる通りで、質問する資格ないですね。恥ずかしい限りです。アドバイスありがとうございます。

    キャンセル

  • 2019/05/17 08:59

    「質問する資格」なんてものはないですよ! ただ回答できるようにか書かないと解決は難しいですよ。

    サンプルデータと そのサンプルを実行した時の結果を乗せたほうが回答が得られると思いますよ

    キャンセル

  • 2019/05/17 15:55

    https://teratail.com/tour
    とかを質問する前に見てください。
    今回は、

    ```python
    ここにコードを書く
    ```

    とか書けば良いだけです。あとは投稿する前にプレビューを見てうまくいっているか確認してください。
    そして指摘を受けたのなら、それに従って質問を編集してください。

    キャンセル

  • 2019/05/17 15:57

    私は「質問する資格がない」なんて書いていませんし、不慣れな質問も見慣れているので大して気になりません。もちろん可能なら見やすく直してほしいけど、それより回答内容にまったく関係ないコメントをされたので困惑しています。

    キャンセル

-2

マークダウンにコードを埋め込む方法があるので 利用してはいかがでしょうか

import re

f_test = open('hoge.txt','r') #txtをインポート。ちゃんとできたかprintで確認。
lines = f_test.readlines()
for line in lines:
print(line)

f_test.close()

with open('hoge.txt','r') as f: #全て小文字に変換。ちゃんとできたかprintで確認。
    lines=f.read().lower()
    print(lines)

def words_list(lines): #スペースで区切って単語リストを作る。printで確認できない。
    return re.split(("[^a-z]+",lines)[:-1])

print(word_list)

def words_to_count(word_list): #辞書を作って単語をカウント。printで確認できない。
    wdict={word:0 for word in set(word_list)}
    for w in word_list:
        wdict[w] += 1
    return wdict

print(wdict)

def print_words(word_dict): #降順に並び替え。printで確認できない。
    for word in sorted(word_dict,key=lambda x:(-word_dict[x],x)):

print(word,word_dict[word])

コード修正の参考に
https://qiita.com/hatchinee/items/a904c1f8d732a4686c9d

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/17 08:46

    返信が遅くなりすいません。皆様にご指摘頂いてるとおりマークダウン方式を理解していないです。

    キャンセル

  • 2019/05/17 09:01

    質問を作成するページの 下の方にヘルプが出ますよ

    キャンセル

同じタグがついた質問を見る

  • Python 3.x

    9865questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • 正規表現

    924questions

    正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

  • Jupyter

    423questions

  • 自然言語処理

    153questions

    自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。