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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

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

Python

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

Q&A

1回答

1513閲覧

pythonでSVMの分類器を作りたい

jon07

総合スコア1

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2020/09/22 07:56

前提・実現したいこと

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=どうたら、というようなものがないのはおかしいのでは?と思いましたが解決策がわかりません。

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

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

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

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

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

guest

回答1

0

nlp.util 自体を削除すれば動くように見受けられます。

正確なことは作者に聞かないとわからないですが、
作者は一つのファイル内で全処理を書いていたのではなく、
classファイルを分けていたのではないでしょうか。

なので作者は実際は、import XXXXX as nlp_util のような形でインポートをしていたから
nlp_uitl.wakati_word_list_create()と書いているのだと思います。

投稿2020/09/22 09:07

atabo

総合スコア9

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

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

jon07

2020/09/22 10:26

回答ありがとうございます。 wakati_word_list = nlp_util.wakati_word_list_create(search_tweet_list, GET_WORD_CLASS) からnlp_utilという部分だけ消せという意味だと捉えさせていただきます。 消してみた所、今度は NameError Traceback (most recent call last) <ipython-input-15-c1a5fb64a3ce> in <module> 27 28 #twitterデータから、指定品詞の分かち分割形式の単語リストを生成 ---> 29 wakati_word_list = wakati_word_list_create(search_tweet_list, GET_WORD_CLASS) 30 #tfidfベクトル化 31 from sklearn.feature_extraction.text import TfidfVectorizer NameError: name 'search_tweet_list' is not defined というようになってしまいました・・・。また定義されてないものをナチュラルに使っていて、どうしたらいいのか・・・。
atabo

2020/09/22 11:15 編集

> nlp_utilという部分だけ消せという意味だと捉えさせていただきます。 その趣旨で相違ないです。 > NameError: name 'search_tweet_list' is not defined というようになってしまいました・・・。また定義されてないものをナチュラルに使っていて、どうしたらいいのか・・・。 今回のqiita記事にも記載があるように下記を参考にする必要があるようです。 search_tweet_listは下記に存在しています。 > ① twitterからテキストデータの取得 データ取得は、以下の記事を参考にしてみてください。 https://qiita.com/teri/items/e10a3be38113b31c0c9a ただ大変失礼かと思いますが、今回のご質問内容から見る限り、プログラミング自体に慣れていらっしゃらないようですので、どこの誰が書いたかも正常動作するかもわからないqiitaの記事でトライしてみるのは少々しんどいのではないかという印象を受けています。(わからないけどやってみる!という姿勢は私も学ばせていただきましたが・・・) 今回やってみたい内容は何でしょうか?「SVM」でしょうか?「twitterからAPIでデータを取得すること」でしょうか?あるいは「自然言語処理」でしょうか? そのあたりを明確にして、書籍で学習された方が早く身につくような気がします。
jon07

2020/09/23 07:57

丁寧に教えて頂いて、本当にありがとうございます。質問以前に全くもって自分の理解も事前準備も足りていないことに気付きました。プログラミング自体もあまり経験が無く、やってみたかったのは ・中身の理解は置いておいてとりあえず【SVM】でデータの解析(分類)をしてみたい という感じでした。 twitterのデータをpythonで取る方法だとか、Rで解析する方法やらを頭では一切理解しないまま実装できていたので、その調子でチャレンジしてみたのですが・・・。 (正直、中身の理解はとりあえずいいから物を作りたい、という感じだったのですが、理解できないと作れなさそうですね・・・)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問