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

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

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

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

Python

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

Q&A

解決済

1回答

1493閲覧

python janomeの簡略辞書使用時のエラーについて

---stax---

総合スコア148

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/06/18 01:46

編集2018/06/18 03:03

表題の件で質問させてください
テキストデータを読み込んで形態素解析をしたのですが
01st
02st
03st
というような言葉があった場合
01
st
02
st
03
st
のように数字と英語で区切られてしまいます
そこで簡略辞書を用いて「01st」という言葉として認識させようとしています

以下が作成した簡略辞書です「100.csv」
簡略辞書

イメージ説明

この辞書を読み込ませると

#作成した辞書使う場合 --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-13-13ce50d97c07> in <module>() 53 #t = Tokenizer() 54 #作成した辞書使う場合 ---> 55 t = Tokenizer(r'C:\Users\Desktop\100.csv', udic_type='simpledic', udic_enc="utf8") 56 57 ret = [] ~\AppData\Local\Continuum\anaconda3\lib\site-packages\janome\tokenizer.py in __init__(self, udic, udic_enc, udic_type, max_unknown_length, wakati, mmap) 166 if udic.endswith('.csv'): 167 # build user dictionary from CSV --> 168 self.user_dic = UserDictionary(udic, udic_enc, udic_type, connections) 169 elif os.path.isdir(udic): 170 # load compiled user dictionary ~\AppData\Local\Continuum\anaconda3\lib\site-packages\janome\dic.py in __init__(self, user_dict, enc, type, connections) 372 """ 373 build_method = getattr(self, 'build' + type) --> 374 compiledFST, entries = build_method(user_dict, enc) 375 Dictionary.__init__(self, [compiledFST], entries, connections) 376 ~\AppData\Local\Continuum\anaconda3\lib\site-packages\janome\dic.py in buildsimpledic(self, user_dict, enc) 402 for line in f: 403 line = line.rstrip() --> 404 surface, pos_major, reading = line.split(',') 405 part_of_speech = ','.join([pos_major, u'*', u'*', u'*']) 406 morph_id = len(surfaces) ValueError: not enough values to unpack (expected 3, got 1)

というエラーが発生しどこが原因か分からず悩んでいます

以下コードです

python

1import pandas as pd 2from janome.tokenizer import Tokenizer 3from janome.analyzer import Analyzer 4from janome.tokenfilter import POSStopFilter 5from collections import Counter 6from gensim.models import word2vec 7import logging 8import nltk 9import re 10from nltk.collocations import * 11 12#from IPython.core.debugger import Pdb; Pdb().set_trace() 13#データフレーム作成-------------------------------------------------------------------------------- 14 15#ファイル指定 16input_file_name = (r'C:\Users\Desktop\Book11.xlsm') 17 18#ファイル読み込み 19input_book = pd.ExcelFile(input_file_name) 20 21#シート名取得(sheet_namesメソッドでExcelブック内の各シートの名前をリスト型で取得) 22input_sheet_name = input_book.sheet_names 23 24#シート総数取得 25num_sheet = len(input_sheet_name) 26 27#シート総数表示 28print('シートの数:', num_sheet) 29#シート名表示 30print('シートの名前:',input_sheet_name) 31#type確認 32print('type :',type(input_book)) 33 34#DataFrameとして2枚目(標準トラブルシート)のsheetを読み込み 35#skiprows = 5 : 先頭5行読み飛ばす 36#skip_footer = 1 : 最後1行読み飛ばす 37#usecols = 'Z,AD:AF' : Z列、AD,AE,AF列を読み込む 38#names = range(0,4) : 列名に0~4を付与 39input_sheet_df = input_book.parse(input_sheet_name[1], 40 skiprows = 5, 41 skip_footer = 1, 42 usecols = 'Z,AD:AF', 43 names = range(0,4)) 44 45#列名変更 46input_sheet_df = input_sheet_df.rename(columns={0:'異常発生個所',1:'異常名称',2:'現象',3:'原因'}) 47print('type :',type(input_sheet_df)) 48 49 50#形態素解析--------------------------------------------------------------------------------------- 51 52# Tokenizerのインスタンス生成 53#t = Tokenizer() 54#作成した辞書使う場合 55t = Tokenizer(r'C:\Users\Desktop\100.csv', udic_type='simpledic', udic_enc="utf8") 56 57ret = [] 58 59 60docking = input_sheet_df.values.tolist() 61 62#print(type(docking)) 63 64 65for wordlist in docking: 66 #print(wordlist) 67 tokens = t.tokenize(str(wordlist)) 68 for token in tokens: 69 if token.part_of_speech.split(',')[0] in ['名詞']: 70 if not token.part_of_speech.split(',')[1] in ['サ変接続']: 71 ret.append(token.base_form) 72print(ret) 73 74 75 76 77

また、簡略辞書を使う為にはjanomeのバージョンが0.2.7以上である必要があるのですが0.3.6を使用しているので問題ないかと思います

初歩的な内容かと思いますがアドバイス宜しくお願い致します

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

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

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

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

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

quickquip

2018/06/18 02:15

例外のtracebackが省略されていてはエラーがどこで発生しているのか調べられません。
---stax---

2018/06/18 02:26

ご指摘ありがとうございます。エラー内容追記致しました。
LouiS0616

2018/06/18 02:38

デリミタがタブになっている気がします。100.csvをメモ帳で開くと、どのように表示されますか。
guest

回答1

0

ベストアンサー

ファイルの最後に何も書いてない行がありませんか?

Plain

12319st,カスタム名詞,ジュウキュウステーション⏎ 420st,カスタム名詞,ニジュウイチステーション⏎ 56

みたいな。

投稿2018/06/18 05:27

quickquip

総合スコア11038

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

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

---stax---

2018/06/18 07:03

回答ありがとうございます かなり初歩的なミスでした 文字コードがANSIとなっていました UTF-8に変換し読み直したところ成功致しました ご迷惑おかけしてすいませんでした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問