前提・実現したいこと
Pythonで単語が1列に書いてあるcsvファイルを読み込み、
各単語間の類似度を計算してその数値を表示するプログラムを書いています。
類似度が一定数以上の組み合わせを出力したいです。
sample.csv
りんご いぬ いちご くま みかん ねこ
出力したい結果(数値は仮)
りんご - いちご 0.3 ...
発生している問題・エラーメッセージ
前回の質問に対するご回答を受けて、
修正したのですが、以下のようなエラーが出てしまい、どのように修正したら良いかわからず困っています。
IndexError Traceback (most recent call last) <ipython-input-15-f5997b50ec24> in <module>() 4 for j in range(1, len(lines)-1): 5 w1_word = lines[i] ----> 6 w1_syn = wn.synsets(w1_word, lang='jpn')[0] 7 w2_word = lines[j] 8 w2_syn = wn.synsets(w2_syn, lang='jpn')[0] IndexError: list index out of range
該当のソースコード
Python
1import csv 2f = open("sample.csv", encoding='utf-8' ) 3lines = f.readlines() 4 5#行の長さを確認する 6import pandas as pd 7import numpy as np 8print(len(lines)) 9 10dataset1= pd.read_csv('sample.csv', header=None) 11dataset1 12 13#1行目からlen(lines)まで比較、2行目からlen(lines)まで比較を繰り返す 14from nltk.corpus import wordnet as wn 15for i in range(0, len(lines)-2): 16 for j in range(1, len(lines)-1): 17 w1_word = lines[i] 18 w1_syn = wn.synsets(w1_word, lang='jpn')[0] 19 w2_word = lines[j] 20 w2_syn = wn.synsets(w2_syn, lang='jpn')[0] 21 similarity = w1_syn.path_similarity(w2_syn) 22 if similarity > 0.3: 23 print( lines[i] + '-' + lines[j] + similarity)
補足情報(FW/ツールのバージョンなど)
Python 3.6.3
Mac OS High Sierra
Jupyter notebook 5.0.
###ご回答を受けて試したこと
①csvから読み込んだデータでもできるかどうか試しましたが、以下の結果が出てしまいました、
Python
1from nltk.corpus import wordnet as wn 2from jaconv import hira2kata 3data = open('sample.csv', 'r').readlines() 4data_with_syn = [] 5 6print(data) 7 8#結果 ['\ufeffりんご\n', 'いぬ\n', 'いちご\n', 'くま\n', 'みかん\n', 'ねこ'] 9 10for datum in data: 11 ret = wn.synsets(datum, lang='jpn') 12 if ret: 13 data_with_syn.append((datum, ret[0])) 14 continue 15 16 datum = hira2kata(datum) 17 ret = wn.synsets(datum, lang='jpn') 18 if ret: 19 data_with_syn.append((datum, ret[0])) 20 continue 21 22 print(f'Unknown word: {datum}.') 23 24print(*data_with_syn, sep='\n')
結果
Unknown word: リンゴ . Unknown word: イヌ . Unknown word: イチゴ . Unknown word: クマ . Unknown word: ミカン . ('ネコ', Synset('cat.n.01'))
②単語を英語にした場合、jaconvは使えないため、エラー処理に困る
python
1from nltk.corpus import wordnet as wn 2#from jaconv import hira2kata 3 4data = ['apple', 'dog', "strawberry", 'bear', 'orange', 'cats'] 5data_with_syn = [] 6 7for datum in data: 8 ret = wn.synsets(datum, lang='en') 9 if ret: 10 data_with_syn.append((datum, ret[0])) 11 continue 12 13 #datum = hira2kata(datum) 14 #ret = wn.synsets(datum, lang='en') 15 #if ret: 16 #data_with_syn.append((datum, ret[0])) 17 # continue 18 19 print(f'Unknown word: {datum}.') 20 21print(*data_with_syn, sep='\n')
エラー文
--------------------------------------------------------------------------- WordNetError Traceback (most recent call last) <ipython-input-29-f740c715a42a> in <module>() 1 for datum in data: ----> 2 ret = wn.synsets(datum, lang='en') 3 if ret: 4 data_with_syn.append((datum, ret[0])) 5 continue ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py in synsets(self, lemma, pos, lang, check_exceptions) 1494 1495 else: -> 1496 self._load_lang_data(lang) 1497 synset_list = [] 1498 for l in self._lang_data[lang][1][lemma]: ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py in _load_lang_data(self, lang) 1135 1136 if lang not in self.langs(): -> 1137 raise WordNetError("Language is not supported.") 1138 1139 f = self._omw_reader.open('{0:}/wn-data-{0:}.tab'.format(lang)) WordNetError: Language is not supported.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/06/18 05:09
2018/06/18 05:12
退会済みユーザー
2018/06/18 06:22
退会済みユーザー
2018/06/18 09:31
2018/06/18 09:34
退会済みユーザー
2018/06/18 09:40
2018/06/18 09:46
2018/06/18 09:59 編集
退会済みユーザー
2018/06/18 10:14