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

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

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

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

Q&A

3回答

6691閲覧

pythonで日本語が文字化けする

syen2501

総合スコア38

Python 3.x

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

0グッド

1クリップ

投稿2018/06/27 17:50

編集2018/06/29 11:09

<相談したい事>
pythonで日本語で記載されたテキストファイルを読み込ませて、処理結果を出力しようと
すると文字化けしていしまいます。
open関数で読み込むときにencoding = 'utf8'と変換をした後で読み込んで文字化けなどを
しないようにしているつもりなのですが、原因が分からなくて困っています。

python

1import nltk 2from nltk import ngrams 3from pyknp import KNP 4import jctconv 5import re 6 7# knpで形態素解析を行ったあとの結果をリストで返す 8def separate(text,option = '-tab'): 9 number_word = [] 10 tokens = [] 11 knp = KNP(option = option) 12 result = knp.parse(jctconv.h2z(text,digit = True)) 13 14 for mrph in result.mrph_list(): 15 tokens.append(mrph.midasi) 16 return tokens 17 18 19# 形態素解析を行った結果から、共起の結果を得る 20def word_cooccurrence(list): 21 bigrams = nltk.bigrams(list) # バイグラムを作成 22 fd = nltk.FreqDist(bigrams) # バイグラムの出現頻度分布 23 return fd.items() 24 25 26if __name__ == '__main__': 27 with open('text.txt','r', encoding = 'utf8') as f: 28 text = f.read() 29 result = word_cooccurrence(separate(text)) 30 print(result) 31 32<text.txtの中身> 33ポット内の温度が100℃より低い場合、水が沸騰しない。 34 35<実行結果> 36dict_items([(('�|�b�g', '��'), 1), (('��', '��'), 1), (('��', '���x'), 1), (('���x', '��'), 1), (('��', '�P�O�O'), 1), (('�P�O�O', '��'), 1), (('��', '���'), 1), (('���', '�Ⴂ'), 1), (('�Ⴂ', '�ꍇ'), 1), (('�ꍇ', '�A'), 1), (('�A', '��'), 1), (('��', '��'), 1), (('��', '����'), 1), (('����', '��'), 1), (('��', '�Ȃ�'), 1), (('�Ȃ�', '�B'), 1)])

<試したこと>
文字コードを宣言したり、文字コードを指定してファイルを開くなどの方法は
行ったが結果は変わらなかった。

pythonのバージョンはpython3.6.1
OSはWindows10です。

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

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

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

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

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

can110

2018/06/28 01:37

ファイルから読み込まずに「text = 'ポット内の温度が~'」と直接文字列を渡した場合でも文字化けしますか?
syen2501

2018/06/28 16:18

はい、文字化けしてしまいます。
hayataka2049

2018/06/29 10:41

OSとpythonのバージョンの情報を追記した方が良いかもしれません
guest

回答3

0

問題が起きているところを、絞りこんで探していくことをしましょう。

Python

1from pyknp import KNP 2sentence = KNP(option='-tab').parse('ポット内の温度が100℃より低い場合、水が沸騰しない。') 3print([m.midasi for m in sentence.mrph_list()]) 4print(len(sentence.mrph_list()[0].midasi)) 5print(ord(sentence.mrph_list()[0].midasi[0]))

これをたとえばPython対話環境で動かした結果はどうなりますか?

plain

1['ポット', '内', 'の', '温度', 'が', '100', '℃', 'より', '低い', '場合', '、', '水', 'が', '沸騰', 'し', 'ない', '。'] 23 312509

になりますか? (12509はのコードポイントです)

それがokだと確信が持ててはじめて、次を検証します。

python

1import nltk 2bigrams = nltk.bigrams(['ポット', '内', 'の', '温度', 'が', '100', '℃', 'より', '低い', '場合', '、', '水', 'が', '沸騰', 'し', 'ない', '。']) 3fd = nltk.FreqDist(bigrams) 4print(fd.items())

はどうですか?

dict_items([(('ポット', '内'), 1), (('内', 'の'), 1), (('の', '温度'), 1), (('温度', 'が'), 1), (('が', '100'), 1), (('100', '℃'), 1), (('℃', 'より'), 1), (('より', '低い'), 1), (('低い', '場合'), 1), (('場合', '、'), 1), (('、', '水'), 1), (('水', 'が'), 1), (('が', '沸騰'), 1), (('沸騰', 'し'), 1), (('し', 'ない'), 1), (('ない', '。'), 1)])

になりますか?

ここまで確認できてはじめて、ファイルの入出力が問題なんだなと考えます。

python

1with open('text.txt','r', encoding = 'utf8') as f: 2 print(ord(f.read()[0]))

の結果は12509ですか?


OSはなんですか? KNPはどうインストールしましたか?

投稿2018/06/28 01:59

編集2018/06/28 02:16
quickquip

総合スコア11038

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

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

syen2501

2018/06/28 16:25

解答して頂きありがとうございます。 確認の手順をご指摘してくださった通りに行おうとしたのですが、 一番最初の部分で出力結果が、下記のようになってしまいます。 ['�|�b�g', '��', '��', '���x', '��', '�P�O�O', '��', '���', '�Ⴂ', '�ꍇ', '�A', '��', '��', '����', '��', '�Ȃ�', '�B'] 3 12509
quickquip

2018/06/29 03:16

print('ポット') がそもそもまともに表示されないのでは?
syen2501

2018/06/29 10:32

返信ありがとうございます。 print('ポット')しても文字化けします。
quickquip

2018/06/29 12:00

きっとWindowsだと思うので別の質問を立てるのもいいでしょうし、文字化けを気にしないでこのまま、ファイルから読んでファイルに書き込む方向で作りこんでいくのでもいいかと思いました。
guest

0

with open('text.txt','r', encoding = 'utf8') as f:

このencodingは、
読み出し:ファイル内容がUTF8という前提で読み込む
書き込み:書き込む文字列をUTF8にして書き込む

ってことなんで、ファイルのナカミがUTF8ではない場合、文字化けします

まずは元ファイルの文字コードがなにか調べてみることです

投稿2018/06/27 22:34

y_waiwai

総合スコア87749

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

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

0

テキストファイルの文字コードがutf-8になっているでしょうか?
テキストエディタでファイルを保存するとき[名前を付けてファイルを保存]のようなメニューに[文字コード]を設定できるので試されては?

投稿2018/06/27 20:06

Orlofsky

総合スコア16415

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問