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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

861閲覧

初心者です!教えて下さい!

haruchin

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/01/15 23:05

編集2023/01/17 18:40

pythonで単語の出現頻度を調べるプログラムを作成しました。形態素解析を使っています。
これを応用して、句読点とその前の品詞をペアにした出現頻度を調べるプログラムを作成したいと思っています。
知恵をお貸しください。

「単語の出現頻度を調べるプログラム」

import os, glob
import MeCab
import numpy as np
import pickle

savefile = "./ok-spam.pickle"
tagger = MeCab.Tagger()
word_dic = {"__id": 0}
files = []

def read_files(dir, label):
files = glob.glob(dir + '/*.txt')
for f in files:
read_file(f, label)

def read_file(filename, label):
words = []
with open(filename, "rt", encoding="utf-8") as f:
text = f.read()
files.append({
"label": label,
"words": text_to_ids(text)
})

def text_to_ids(text):
word_s = tagger.parse(text)
words = []
for line in word_s.split("\n"):
if line == 'EOS' or line == '': continue
word = line.split("\t")[0]
params = line.split("\t")[4].split("-")
hinsi = params[0]
hinsi2 = params[1] if len(params) > 1 else ''
org = line.split("\t")[3]
if not (hinsi in ['名詞', '動詞', '形容詞']): continue
if hinsi == '名詞' and hinsi2 == '数詞': continue
id = word_to_id(org)
words.append(id)
return words

def word_to_id(word):
if not (word in word_dic):
id = word_dic["__id"]
word_dic["__id"] += 1
word_dic[word] = id
else:
id = word_dic[word]
return id

def make_freq_data_allfiles():
y = []
x = []
for f in files:
y.append(f['label'])
x.append(make_freq_data(f['words']))
return y, x

def make_freq_data(words):
cnt = 0
dat = np.zeros(word_dic["__id"], 'float')
for w in words:
dat[w] += 1
cnt += 1
dat = dat / cnt
return dat

if name == "main":
read_files("ok", 0)
read_files("spam", 1)
y, x = make_freq_data_allfiles()
pickle.dump([y, x, word_dic], open(savefile, 'wb'))
print("単語頻出データ作成完了")

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

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

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

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

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

can110

2023/01/17 08:00 編集

質問本文にそのままコードを書くとインデントがなくなり読めません(実行できません)。 コードはコードブロックで囲んで提示ください。 あとタイトルは具体的に質問内容が分かるものにしたほうがよいです。 3-1. タイトルには要件を書きましょう ソースコードを書きましょう https://teratail.com/help/question-tips
1T2R3M4

2023/01/17 09:40

まずはそのコピペしてきたコードを理解するところからでは。
guest

回答2

0

まずはあなたがどこまでできるのか、あなたなりにコードを書いて提示しよう。
そうじゃないとお知恵の貸しようがありません。

まさか、pythonの基本的な文法を教えろとは言いませんよね。。

投稿2023/01/16 02:10

y_waiwai

総合スコア87719

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

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

0

正規表現

投稿2023/01/16 00:15

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問