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

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

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

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

Q&A

解決済

1回答

456閲覧

Pythonでの形態素解析について

sam_mk3

総合スコア13

Python

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

0グッド

0クリップ

投稿2019/02/14 05:41

前提・実現したいこと

プログラミング初心者です。

使用環境
windows7
python 3.72
janome 0.3.7
xlrd 1.2.0
xlsxwriter 1.14

Python初心者が1時間以内にjanomeで形態素解析できた方法
上を参考に形態素解析を行いたいのですが、実装中に以下のエラーメッセージが発生しました。

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

C:\Users\Administrator>C:\Users\XX\Desktop\python\NPS.py Traceback (most recent call last): File "C:\Users\XX\Desktop\python\YYYY.py", line 22, in <module> tokens = t.tokenize(val) File "C:\Users\XX\AppData\Local\Programs\Python\Python37-32\lib\sit e-packages\janome\tokenizer.py", line 197, in tokenize return list(self.__tokenize_stream(text, wakati, baseform_unk, '')) File "C:\Users\XX\AppData\Local\Programs\Python\Python37-32\lib\sit e-packages\janome\tokenizer.py", line 200, in __tokenize_stream text = text.strip() AttributeError: 'float' object has no attribute 'strip'

該当のソースコード

import xlrd import xlsxwriter from collections import Counter from itertools import chain from janome.tokenizer import Tokenizer ## Excelファイル読み込み # 例)C:\Users\〜\Documents\〜 # ファイル名の前に'r'を入れてください。理由:rを使うとraw文字列として扱われ、エスケープシーケンスとして処理されなくなります。(わからなければスルーしてください) book = xlrd.open_workbook(r"C:\Users\XX\Desktop\python\解析用ファイル\ZZ\YY.xlsx") # エクセルシートの1枚目を変数に格納 sheet_1 = book.sheet_by_index(0) # 1列目のみ読み取るのでcol(columnの略)に0を格納(0が1番目を表す為) col = 0 data = [] each_data = [] # 1列目に記載されているすべてのセルを1行目から順に読み取ります t = Tokenizer() for row in range(sheet_1.nrows): val = sheet_1.cell(row, col).value tokens = t.tokenize(val) for token in tokens: partOfSpeech = token.part_of_speech.split(',')[0] # 今回抽出するのは名詞だけとします。(もちろん他の品詞を追加、変更、除外可能です。) if partOfSpeech == u'名詞': each_data.append(token.surface) # token.surfaceは表層形(語彙)です。詳しくはこちら...http://ailaby.com/janome/ # すべての形態素を含ませたいのであればif構文を外し、each_data.append(token.surface)のみ記載してください。 data.append(each_data) each_data = [] ## 文章を形態素毎に分割したデータをいれるエクセルファイル作成(今回は名詞のみ) # 例)C:\Users\〜\Documents\〜 # パスの前のrは省略しないでください data_book = xlsxwriter.Workbook(r"C:\Users\XX\Desktop\python\解析用ファイル\ZZ\YYコメント形態素解析.xlsx") # シート作成・変数定義 data_sheet = data_book.add_worksheet('data') for row in range(len(data)): for i in range(len(data[row])): data_sheet.write(row, i, data[row][i]) # エクセルを保存 data_book.close() #すべての語彙を同じ配列に格納 chain_data = list(chain.from_iterable(data)) c = Counter(chain_data) result_ranking = c.most_common(100) # 出現頻度100位までを変数に格納 # 語彙出現ランキングを記述するエクセルを作成(パスは上記参考に適当にいれてください) result_book = xlsxwriter.Workbook(r"C:\Users\XX\Desktop\python\解析用ファイル\ZZ\YY語群出現ランキング.xlsx") # resultという名前のシートを作ります result_sheet = result_book.add_worksheet('result') for row in range(len(result_ranking)): for i in range(len(result_ranking[row])): result_sheet.write(row, i, result_ranking[row][i]) # エクセルを保存 result_book.close()

試したこと

プログラミング初心者のため、うまくエラーの原因がわかりません。
初歩的な内容かもしれませんがアドバイスをお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

解析用ファイルのセルに「12.34」など数値のみが含まれていると提示エラーが発生します。
tokens = t.tokenize(str(val))と修正すると、数値のみのセルが存在しても動作するようになります。

投稿2019/02/14 05:56

編集2019/02/14 06:03
can110

総合スコア38262

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

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

sam_mk3

2019/02/14 05:59

ご丁寧にありがとうございます。解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問