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

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

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

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

Mecab

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

Q&A

解決済

1回答

1646閲覧

簡略辞書フォーマットを追加して、janomeで形態素解析をしたいです。

SKIYO

総合スコア15

Python 3.x

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

Mecab

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

0グッド

0クリップ

投稿2018/07/10 05:04

janomeを使って、形態素解析を行っています。

簡略辞書(※)を追加したいのですが、エラーになります。。
(※)以下のホームページの簡略辞書フォーマットを参考に、自分なりの dict_simple.csv を作成しました。
http://mocobeta.github.io/janome/

t = Tokenizer(udic = "dict_simple.csv", udic_type = "simpledic", udic_enc = "utf8")
だと以下のようなエラーになり、

t = Tokenizer(udic = "dict_simple.csv", udic_type = "simpledic", udic_enc = "Shift-JIS")
にするとエラーは出ないのですが、自作辞書が反映されません。

どうすれば自作簡略辞書を反映させた形態素解析ができるのか、ご教授ください。

(エラー文)
Traceback (most recent call last):
File ".\tokenizing.py", line 23, in <module>
t = Tokenizer(udic = "dict_simple.csv", udic_type = "simpledic", udic_enc = "utf8")
File "C:\Users---\AppData\Local\Programs\Python\Python36\lib\site-packages\janome\tokenizer.py", line 168, in init
self.user_dic = UserDictionary(udic, udic_enc, udic_type, connections)
File "C:\Users---\AppData\Local\Programs\Python\Python36\lib\site-packages\janome\dic.py", line 374, in init
compiledFST, entries = build_method(user_dict, enc)
File "C:\Users---\AppData\Local\Programs\Python\Python36\lib\site-packages\janome\dic.py", line 402, in buildsimpledic
for line in f:
File "C:\Users---\AppData\Local\Programs\Python\Python36\lib\codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 1: invalid start byte

以下コードです。

python

1import xlrd 2import xlsxwriter 3from collections import Counter 4from itertools import chain 5from janome.tokenizer import Tokenizer 6import os 7 8book = xlrd.open_workbook(r"C:\---.xlsx") 9 10sheet_1 = book.sheet_by_index(0) 11 12col = 9 #9列目の'memo'が対象 13 14data = [] 15each_data = [] 16 17#t = Tokenizer(udic = "dict_simple.csv", udic_type = "simpledic", udic_enc = "utf8") 18t = Tokenizer(udic = "dict_simple.csv", udic_type = "simpledic", udic_enc = "Shift-JIS") 19 20for row in range(sheet_1.nrows): 21 val = sheet_1.cell(row, col).value 22 tokens = t.tokenize(val) 23 for token in tokens: 24 partOfSpeech = token.part_of_speech.split(',')[0] 25 if partOfSpeech == u'名詞': #今回抽出するのは名詞のみ(他の品詞も追加、変更、除外可能) 26 each_data.append(token.surface) 27 28 data.append(each_data) 29 each_data = [] 30 31 32data_book = xlsxwriter.Workbook(r"result\morphological_separate_dictsimple.xlsx") 33 34data_sheet = data_book.add_worksheet('data') 35 36for row in range(len(data)): 37 for i in range(len(data[row])): 38 data_sheet.write(row, i, data[row][i]) # (行, 列, 追加するデータ) 39data_book.close() #エクセル保存 40

なお、プライバシー上気になる箇所を --- にして伏せています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Pythonおよびjanomeはあまり使わないのですが、ひょっとしたら、ということで。

元のXLSがShift_JISで、Pythonおよびjanome辞書がUTF-8なので処理出来ないのは、と思います。

for row in range(sheet_1.nrows): ・・・

あたりになるんでしょうか、読み込んだ1行ずつをUTF-8に変換するか、試験的にCSVに出来るならCSVにして、テキストエディタでUTF-8に変換して処理させたらどうでしょうか?

投稿2018/07/10 05:46

SaintKnowledge

総合スコア368

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問