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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

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

正規表現

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

自然言語処理

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

Q&A

2回答

565閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

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

正規表現

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

自然言語処理

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

0グッド

0クリップ

投稿2019/05/15 22:55

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2019/05/15 23:25 編集

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

退会済みユーザー

2019/05/16 23:49

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

回答2

0

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

python

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

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

投稿2019/05/16 04:03

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/16 23:48

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

2019/05/16 23:59

「質問する資格」なんてものはないですよ! ただ回答できるようにか書かないと解決は難しいですよ。 サンプルデータと そのサンプルを実行した時の結果を乗せたほうが回答が得られると思いますよ
hayataka2049

2019/05/17 06:55

https://teratail.com/tour とかを質問する前に見てください。 今回は、 ```python ここにコードを書く ``` とか書けば良いだけです。あとは投稿する前にプレビューを見てうまくいっているか確認してください。 そして指摘を受けたのなら、それに従って質問を編集してください。
hayataka2049

2019/05/17 06:57

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

0

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

pyhon

1import re 2 3f_test = open('hoge.txt','r') #txtをインポート。ちゃんとできたかprintで確認。 4lines = f_test.readlines() 5for line in lines: 6print(line) 7 8f_test.close() 9 10with open('hoge.txt','r') as f: #全て小文字に変換。ちゃんとできたかprintで確認。 11 lines=f.read().lower() 12 print(lines) 13 14def words_list(lines): #スペースで区切って単語リストを作る。printで確認できない。 15 return re.split(("[^a-z]+",lines)[:-1]) 16 17print(word_list) 18 19def words_to_count(word_list): #辞書を作って単語をカウント。printで確認できない。 20 wdict={word:0 for word in set(word_list)} 21 for w in word_list: 22 wdict[w] += 1 23 return wdict 24 25print(wdict) 26 27def print_words(word_dict): #降順に並び替え。printで確認できない。 28 for word in sorted(word_dict,key=lambda x:(-word_dict[x],x)): 29 30print(word,word_dict[word])

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

投稿2019/05/16 00:32

編集2019/05/16 04:10
Kentaro0919

総合スコア258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/16 23:46

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

2019/05/17 00:01

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問