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

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

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

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

Python

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

Q&A

解決済

2回答

855閲覧

UnicodeDecodeErrorの直し方を知りたい

pippip

総合スコア30

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/09/14 02:18

編集2018/09/14 02:32

#知りたいこと
PythonでKNPを使って構文解析をやりたいのですが、以下のコードでエラーが出ます。参考にしたサイト通りなのですが、何が悪いのでしょうか。

python

1from pyknp import KNP 2 3def select_normalization_representative_notation(fstring): 4 """ 正規化代表表記を抽出します 5 """ 6 begin = fstring.find('正規化代表表記:') 7 end = fstring.find('/', begin + 1) 8 return fstring[begin + len('正規化代表表記:') : end] 9 10def select_dependency_structure(line): 11 """係り受け構造を抽出します 12 """ 13 14 # KNP 15 knp = KNP(option = '-tab -anaphora') 16 17 # 解析 18 result = knp.parse(line) 19 20 # 文節リスト 21 bnst_list = result.bnst_list() 22 23 # 文節リストをidによるディクショナリ化する 24 bnst_dic = dict((x.bnst_id, x) for x in bnst_list) 25 26 tuples = [] 27 for bnst in bnst_list: 28 if bnst.parent_id != -1: 29 # (from, to) 30 tuples.append((select_normalization_representative_notation(bnst.fstring), select_normalization_representative_notation(bnst_dic[bnst.parent_id].fstring))) 31 32 return tuples 33 34 35if __name__ == '__main__' : 36 line = '太郎は花子が読んでいる本を次郎に渡した' 37 tuples = select_dependency_structure(line) 38 for t in tuples: 39 print(t[0] + ' => ' + t[1]) 40 41エラー内容 42 File "C:/Users/proto/PycharmProjects/cutyasai_1/koubun.py", line 37, in <module> 43 tuples = select_dependency_structure(line) 44 File "C:/Users/proto/PycharmProjects/cutyasai_1/koubun.py", line 18, in select_dependency_structure 45 result = knp.parse(line) 46 File "C:\Users\proto\venv\lib\site-packages\pyknp\knp\knp.py", line 63, in parse 47 juman_lines = self.juman.juman_lines(sentence) 48 File "C:\Users\proto\venv\lib\site-packages\pyknp\juman\juman.py", line 70, in juman_lines 49 return self.subprocess.query(input_str, pattern=self.pattern) 50 File "C:\Users\proto\venv\lib\site-packages\pyknp\juman\process.py", line 71, in query 51 line = self.stdouterr.readline()[:-1].decode('utf-8') 52UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 7: invalid start byte

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

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

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

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

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

quickquip

2018/09/14 02:46

OSが違いますよね
quickquip

2018/09/14 06:26 編集

pyknpはpipからインストールしたか。bash が使える状態になっているか。 bash -c jumanpp のあと文章を入れたら解析できるか。 (編集メモ)knpじゃなくてjumanppでした
guest

回答2

0

ベストアンサー

jumanを標準のwindows用インストーラーで入れるとshift-jis版で入ります。エラーはそのせいだと思います。

割と根本的な問題なので、対処は難しいのですが・・・

hackして直してる人がいたり、
PyKNPをWindows10にインストールする(お土産付き)

あとはソースからビルドすればUTF-8版で作れるはず。どうやってビルドするの? という問題はありますが・・・(検索するとやってる人とか野良ビルドも出てきます。トライする気概があればどうぞ)。

もしかしたら他にうまい回避策があるかもしれませんが、軽く検索した範囲では見つかりませんでした。

まあ、素直にlinux環境でやった方が楽といえば楽。

投稿2018/09/14 07:27

編集2018/09/14 07:28
hayataka2049

総合スコア30933

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

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

0

ソースファイルの文字コードはUTF8になってるでしょうか

投稿2018/09/14 03:57

y_waiwai

総合スコア87719

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問