janomeで形態素解析を行っています。
utf-8対応の文章に対して、
utf-8の簡略辞書(csvファイル)を同コード内で作成し、それを形態素解析に反映させたいのですが、
なぜか上手くいきません。
(実行時にエラーが出るわけではなく、t = Tokenizer() と同じ結果しか得られない。)
どうすれば簡略辞書が反映されるのか、ご教授いただけたら幸甚です。
バージョン
Python 3.6.5
Janome 0.3.6
pandas 0.23.1
以下、コードです。
(なお、プライバシーに関係しそうな箇所を---にしています。)
Python
1import pandas as pd 2import codecs as cd 3import numpy as np 4import math 5import re 6import xlrd 7import xlsxwriter 8from collections import Counter 9from itertools import chain 10from janome.tokenizer import Tokenizer 11import os 12import csv 13 14 15 16with cd.open(r"\---\---.csv", "r", "utf-8") as file: 17 df = pd.read_csv(file, index_col=0) 18 19## 行drop 20df.dropna(how='any', inplace=True) 21#how='any':一つでもNaN(Not a Number)がある行/列(,axis=1)をdrop なお、how='all'は全てがNaNをdrop 22#inplace=True:元のdfが変更される。 23 24## 昇順ソート 25df.sort_index(inplace=True) #axis=1:列方向にソート ascending=False:降順でソート by='列名':その列内の値がソート基準になる 26 27## Create User dictionary in UTF-8 28#http://akiyoko.hatenablog.jp/entry/2017/12/09/010411 29def main(): 30 rows = [['展示会', 'カスタム名詞', 'テンジカイ'], ['中国市場', 'カスタム名詞', 'チュウゴクシジョウ'], ['可能性', 'カスタム名詞', 'カノウセイ']] 31 with open('dict_simple_utf8.csv', 'w', newline='', encoding='utf-8-sig') as f: 32 w = csv.writer(f, quoting=csv.QUOTE_ALL) 33 w.writerows(rows) 34 35if __name__ == '__main__': 36 main() 37 38 39## User dictionary 40t = Tokenizer(r"dict_simple_utf8.csv", udic_type="simpledic", udic_enc="utf8")#Tokenizer初期化 41 42data = [] 43each_data = [] 44c = 0 45for i in range(len(df.index)): 46 value = df.iat[i, 0] #.iat[行番号, 列番号] なお、.at['行ラベル', '列ラベル']も可能 47 tokens = t.tokenize(value) 48 for token in tokens: 49 partOfSpeech = token.part_of_speech.split(',')[0] #.part_of_speech.split(',')[0]:品詞 50 #なお、[1]~[3]は品詞細分類1~3 51 #その他、.infl_type:活用型、.infl_form:活用形、.base_form:原形、.reading:読み、.phonetic:発音 52 if partOfSpeech == u'名詞': #名詞を抽出する 53 each_data.append(token.surface) #.surface:表層形(tokenそのもの) 54 data.append(each_data) 55 each_data = [] 56 c += 1 57 if c == 2: 58 break 59 60##エクセル作成 61#ファイル作成 62output_Exl = xlsxwriter.Workbook(r"result_pd\morphology.xlsx") 63#シート作成 64output_sht = output_Exl.add_worksheet('tokens') 65 66 67for row in range(len(data)): 68 for i in range(len(data[row])): 69 output_sht.write(row, i, data[row][i]) # (行, 列, 追加するデータ) 70 71 72##data(リストのリスト)内のすべてのtokensを同じリストに格納 73#print(chain.from_iterable(data)) #<itertools.chain object at 0x000001B42F87D748> 74chain_data = list(chain.from_iterable(data)) #chain(.from_iterable)():iterableなオブジェクトを一つのオブジェクトにまとめる 75#http://coolpythontips.blogspot.com/2016/02/itertoolschain.html 76 77c = Counter(chain_data) #Counterは、keyに要素、valueに出現回数の、辞書型のサブクラス 78result_ranking = c.most_common(100) #(要素, 出現回数)という形のタプルを出現回数が多い順に並べたリストを返す。引数にnを入力すると、上位n位までを対象にする。 79#https://note.nkmk.me/python-collections-counter/ 80 81ranking = output_Exl.add_worksheet('count') 82for row in range(len(result_ranking)): 83 for i in range(len(result_ranking[row])): 84 ranking.write(row, i, result_ranking[row][i]) 85 86output_Exl.close() #エクセル保存 87

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/19 17:31
2018/07/20 00:35