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

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

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

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Python

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

Q&A

0回答

1432閲覧

MeCabでリストを作成する際のTypeerror

starspeeder100

総合スコア0

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Python

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

0グッド

0クリップ

投稿2020/12/13 12:18

前提・実現したいこと

MeCabでテキストと日付のみに編集したツイッターのテキストファイルをPNTableという感情極性辞書と照らし合わせPN値という感情の数値を出して、ツイートごとの感情分析をしようとしています。

用意しているツイートファイルの種類が違うだけで基本的にはこのサイトと同じことをしようとしています。
https://blog.statsbeginner.net/entry/2017/05/07/091435

発生している問題・エラーメッセージ

PN値のリストを作成する際にtyperrorが出てしまいます。

エラーを見る限りMeCabで形態素解析する場面で何らかのミスをしている気がしますがわかりません。

TypeError Traceback (most recent call last)
<ipython-input-7-d707ddf30431> in <module>
1 means_list = []
2 for tweet in df_tweets['text']:
----> 3 dl_old = get_diclist(tweet)
4 dl_new = add_pnvalue(dl_old)
5 pnmean = get_mean(dl_new)

<ipython-input-4-e0f77d9caa8f> in get_diclist(text)
6 def get_diclist(text):
7
----> 8 parsed = m.parse(text)
9 lines = parsed.split('\n') # 解析結果を1行(1語)ごとに分けてリストにする
10 lines = lines[0:-2] # 後ろ2行は不要なので削除

TypeError: in method 'Tagger_parse', argument 2 of type 'char const *'

該当のソースコード

モジュールのインポート
import re
import csv
import time
import pandas as pd
import matplotlib.pyplot as plt
import MeCab
import random

#tweets.csvの読み込み
df_tweets = pd.read_table('mytweet.txt',
sep=':',
encoding = 'utf-8',
names=('time','text'),
)
print(df_tweets)

#PN Tableを読み込み
pn_df = pd.read_table('pn_ja.dic.txt',
sep=':',
encoding='utf-8',
names=('Word','Reading','POS', 'PN')
)
word_list = list(pn_df['Word'])
pn_list = list(pn_df['PN'])
pn_dict = dict(zip(word_list,pn_list))
pn_df

MeCabインスタンス作成

m = MeCab.Tagger('') # 指定しなければIPA辞書

-----テキストを形態素解析して辞書のリストを返す関数-----

def get_diclist(text):

parsed = m.parse(text)   ←ここが原因なのでしょうか? lines = parsed.split('\n') # 解析結果を1行(1語)ごとに分けてリストにする lines = lines[0:-2] # 後ろ2行は不要なので削除 diclist = [] for word in lines: l = re.split('\t|,',word) # 各行はタブとカンマで区切られてるので d = {'Surface':l[0], 'POS1':l[1], 'POS2':l[2], 'BaseForm':l[7]} diclist.append(d) return(diclist)

形態素解析結果の単語ごとdictデータにPN値を追加する関数

def add_pnvalue(diclist_old):
diclist_new = []
for word in diclist_old:
base = word['BaseForm'] # 個々の辞書から基本形を取得
if base in pn_dict:
pn = float(pn_dict[base]) # 中身の型があれなので
else:
pn = 'notfound' # その語がPN Tableになかった場合
word['PN'] = pn
diclist_new.append(word)
return(diclist_new)

#各ツイートのPN平均値を求める
def get_mean(dictlist):
pn_list = []
for word in dictlist:
pn = word['PN']
if pn!='notfound':
pn_list.append(pn)
if len(pn_list)>0:
pnmean = np.mean(pn_list)
else:
pnmean = 0
return pnmean

means_list = []
for tweet in df_tweets['text']:
dl_old = get_diclist(tweet)
dl_new = add_pnvalue(dl_old)
pnmean = get_mean(dl_new)
means_list.append(pnmean)
この部分を実行すると先ほどのエラーが出ます
TypeError Traceback (most recent call last)
<ipython-input-7-d707ddf30431> in <module>
1 means_list = []
2 for tweet in df_tweets['text']:
----> 3 dl_old = get_diclist(tweet)
4 dl_new = add_pnvalue(dl_old)
5 pnmean = get_mean(dl_new)

<ipython-input-4-e0f77d9caa8f> in get_diclist(text)
6 def get_diclist(text):
7
----> 8 parsed = m.parse(text)
9 lines = parsed.split('\n') # 解析結果を1行(1語)ごとに分けてリストにする
10 lines = lines[0:-2] # 後ろ2行は不要なので削除

TypeError: in method 'Tagger_parse', argument 2 of type 'char const *'

試したこと

文字コードのエラーかなと思い、エンコードを書き換えたり、しましたが解決できませんでした。

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

python3 mecab

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問