前提・実現したいこと
pythonでsvmを使い分類器を作りたいです。
以下のURLのものをそのまま用いてみようとしたのですが、エラーがでてしまいます。
https://qiita.com/teri/items/bc4e04316a1b14ae8365#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB
発生している問題・エラーメッセージ
NameError Traceback (most recent call last) <ipython-input-8-2a37e0c1a79b> in <module> 24 25 #twitterデータから、指定品詞の分かち分割形式の単語リストを生成 ---> 26 wakati_word_list = nlp_util.wakati_word_list_create(search_tweet_list, GET_WORD_CLASS) 27 #tfidfベクトル化 28 from sklearn.feature_extraction.text import TfidfVectorizer NameError: name 'nlp_util' is not defined
該当のソースコード
python
1 2import spacy 3from spacy.util import get_lang_class 4nlp = get_lang_class('xx') 5def wakati_word_list_create(sentences:list, get_word_class:list) -> list: 6 #複数文から、指定の品詞(GET_WORD_CLASS)を抽出した単語リスト 7 sentences_word_list = [] 8 9 for sentence in sentences: 10 #一文から、指定の品詞(GET_WORD_CLASS)を抽出した単語リスト 11 one_sentence_word_str = '' 12 #形態素解析 13 node = mecab.parseToNode(sentence) 14 15 while node: 16 17 #語幹 18 word = node.feature.split(",")[-3] 19 #品詞 20 word_class = node.feature.split(",")[0] 21 #(指定の品詞(GET_WORD_CLASS)である) and (語幹が*のもの(つまり未知語))場合は、単語リストに追加 22 if word_class in get_word_class and word != '*': 23 one_sentence_word_str = one_sentence_word_str + " " + word 24 25 node = node.next 26 sentences_word_list.append(one_sentence_word_str) 27 return sentences_word_list 28 29#twitterデータから、指定品詞の分かち分割形式の単語リストを生成 30wakati_word_list = nlp_util.wakati_word_list_create(search_tweet_list, GET_WORD_CLASS) 31#tfidfベクトル化 32from sklearn.feature_extraction.text import TfidfVectorizer 33 34tfidf = TfidfVectorizer(use_idf=True, token_pattern=u'(?u)\b\w+\b') 35#tfidfモデルの作成 36tfidf_model = tfidf.fit(wakati_word_list) 37#tfidfベクトルに変換 38vectors = tfidf_model.transform(wakati_word_list).toarray() 39from sklearn.model_selection import train_test_split 40from sklearn.preprocessing import StandardScaler 41 42input_train, input_test, output_train, output_test = train_test_split(vectors, targets, test_size=0.3, random_state=None ) 43 44sc = StandardScaler() 45sc.fit(input_train) 46input_train_std = sc.transform(input_train) 47input_test_std = sc.transform(input_test) 48from sklearn.svm import SVC 49# 学習インスタンス生成 50svc_model = SVC(kernel='linear', random_state=None) 51 52# 学習 53svc_model.fit(input_train_std, output_train) 54from sklearn.metrics import accuracy_score 55 56#traning dataのaccuracy 57pred_train = svc_model.predict(input_train_std) 58accuracy_train = accuracy_score(output_train, pred_train) 59print('traning data accuracy: %.2f' % accuracy_train)
試したこと
ソースコード2行目をnlp = spacy.load("ja_core_news_sm")から変更した。
(nlp_utilは多言語処理なのでは?という推測のため)
pythonのダウングレードを行い3.6.8を導入した(反映されたのかどうかわからない)
(conda install python=3.6.8 と入力しただけ)
補足情報(FW/ツールのバージョンなど)
Anacondaprompt,jupyter notebook使用。
バージョンは最新のもの。(python3.6.8も入れてはみた)
URLのものではエラーが起き、エラーコードを1つずつ潰した結果、最初に3つコードを足すことになりました。
Anacondapromptではこのようなエラーでしたが、anakondaではなくコマンドプロンプトから行った場合には別のエラーがでたりでなかったり(今試した際には出なかった)
ちなみにひとつ前のエラーコードが
ModuleNotFoundError: No module named 'sudachidict'
During handling of the above exception, another exception occurred:
というもので、この修正はsudachidict_coreというファイル名をsudanchidictに変えたこと、もしくはanacondapromptを使うようにしたこと、このどちらかで消えました。(今回のエラーに関係あるかもしれないと思い記載させていただきました。)
そもそもnlp_utilがどんなものなのか、エラーコード該当箇所の前にnlp_util=どうたら、というようなものがないのはおかしいのでは?と思いましたが解決策がわかりません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/22 10:26
2020/09/22 11:15 編集
2020/09/23 07:57