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

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

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

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Python

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

Q&A

解決済

1回答

913閲覧

word2vecで単語ベクトルを取得し、結果をnumpyで保存したい。

kanpan

総合スコア20

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Python

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

0グッド

0クリップ

投稿2018/11/15 01:37

PythonでMeCabとword2vecを使用して、MeCabで文章を分かち書きしたあと、word2vecで単語ごとにベクトルを取得して、文章ごとにリストに収めたあと、それをnumpyでnpyファイルに保存したいと思っているのですが、ベクトルを格納したはずのリストをprintさせても、空であると表示されてしまいます。なぜ、うまく格納されないのでしょうか?

・ソースコード

python

1import numpy as np 2import MeCab 3import gensim 4from gensim.models import KeyedVectors 5 6tagger = MeCab.Tagger("-Owakati") 7#東北大学 乾・岡崎研究室のモデル 8model = KeyedVectors.load_word2vec_format('./entity_vector.model.bin', binary=True) 9 10sentence = ['私はあなたが好きです。','あなたは私が嫌いです。'] 11j = 0 12for data in sentence: 13 str_output = tagger.parse(data) 14 #listに変換する 15 list_output = str_output.split(' ') 16 17 data_x_vec = [] 18 tmp = [] 19 20 for i in range(len(list_output)): 21 if list_output[i] == '\n': 22 continue 23 24 try: 25 tmp.append(model[list_output[i]]) 26 except: 27 continue 28 29 data_x_vec.append(tmp) 30 tmp.clear() 31 32 33print(data_x_vec) 34# 書き込み 35np.save('sample_1.npy', data_x_vec) 36 37# 読み込み 38print(np.load('sample_1.npy')) 39

・実行結果

(base) C:\jikken>python np_save.py C:\Anaconda\lib\site-packages\gensim\utils.py:1212: UserWarning: detected Windows; aliasing chunkize to chunkize_serial warnings.warn("detected Windows; aliasing chunkize to chunkize_serial") [[]] []

・欲しかった結果

data_x_vec = [["私"のベクトル,"は"のベクトル,"あなた"のベクトル,"が"のベクトル,"好き"のベクトル,"です"のベクトル], ["あなた"のベクトル,"は"のベクトル,"私"のベクトル,"が"のベクトル,"嫌い"のベクトル,"です"のベクトル]]

word2vecで得られる単語ベクトルは200行1列の以下のようなベクトルです。

array([ 1.4522485 , 0.04266869, -1.3145635 , 0.0103809 , 2.7146432 , 1.3091757 , 0.802017 , 2.2191021 , -0.43020186, -1.7658863 , 1.5023764 , 1.213417 , -1.0170546 , -0.12700103, -0.04173641, 1.5412171 , 1.2416103 , 1.501988 , 1.4261323 , 0.16340448, 0.87180495, -0.59273034, 3.0954676 , 1.4311508 , 4.2153907 , 5.8746614 , 0.6575025 , -1.074974 , -3.2938914 , 1.0199703 , -0.34435567, 1.2081221 , -0.5034162 , 3.226747 , 0.40079248, 0.77572685, -2.068213 , -0.21763347, 3.5904012 , 0.86079735, -0.86942136, -1.6164799 , -0.651685 , -0.79369366, 1.7577229 , 1.3327714 , 0.63143826, 0.12535831, 1.4369024 , 1.3595035 , 2.8829439 , -1.7675776 , 1.3938715 , -0.35173512, 0.19019534, -3.0023935 , -0.9494672 , 0.982821 , -2.081971 , 0.15653495, 0.9720962 , 1.9611359 , 2.0833683 , -1.5082417 , -3.1117804 , -3.609543 , -1.1916243 , 2.891177 , 1.1544986 , 0.06777657, -0.02478487, -2.019789 , -1.8323377 , -2.5940342 , 3.1580236 , -2.5885394 , -0.20758942, 0.5749865 , 1.0025102 , -0.568453 , -0.92974734, 0.4565711 , -1.3667253 , 2.4174387 , 2.356126 , -2.1848226 , -1.1966314 , 0.48268434, -1.0936134 , -1.1235027 , 2.1653993 , 1.2934444 , 0.3924849 , -2.9237237 , -1.3660322 , -1.5797284 , 1.3429633 , -1.9038339 , 0.2773021 , -0.03807131, -0.32137507, 2.0982592 , -1.3527583 , -3.5366893 , -3.8792498 , -2.9492972 , 0.8980781 , 0.51784784, 0.48769444, 0.8142578 , -0.19003999, 0.48950762, 2.4018388 , 0.8540998 , -0.5143393 , -0.9923559 , -0.7632082 , 1.3733277 , -2.3880694 , 1.5025864 , -0.4966458 , 1.1615905 , 0.35962322, -0.82772887, 0.07709988, 1.1050506 , -0.39464945, -0.8462559 , -1.0753242 , 1.4379293 , 0.8043046 , -1.7649789 , 2.8666272 , -0.47593567, -2.735309 , -0.269547 , 0.60270613, 0.9508652 , -0.13188379, 1.7586544 , 2.2654328 , -0.5256415 , 1.1117989 , -0.66938037, 2.2696607 , 0.67115885, 0.02315071, 3.0756881 , 0.16011916, -0.6820178 , 2.1040874 , -0.100918 , -1.7970197 , 1.6861928 , 2.7883036 , -0.5719831 , -1.2626705 , 0.50438493, 2.4293935 , 1.895061 , 0.28086612, 4.2976794 , 1.3399448 , 1.6479485 , 1.5680934 , -1.9213887 , -0.33113384, 2.960834 , 0.49226335, -0.5178774 , 1.3876581 , -3.50663 , -2.96172 , 1.3701856 , 3.0913582 , -0.7281498 , 1.4399695 , 2.1103332 , 0.6517826 , 0.338213 , 0.3616513 , 1.0242277 , -1.1828195 , 1.9843862 , -2.6027162 , -1.678596 , 1.7431408 , 1.3628417 , -1.0193801 , 1.9505013 , -2.7822866 , 3.002444 , 0.2745436 , -1.6385939 , 0.81160736, -2.3400724 , -1.6534172 , -0.6015138 , -0.03469371, 0.41278246], dtype=float32)]

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

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

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

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

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

guest

回答1

0

ベストアンサー

python

1 data_x_vec.append(tmp) 2 tmp.clear()

appendで追加されるのは値じゃなくて参照なので、あとでclearするとdata_x_vecの中身の方も内容が消えます。

ループごとにtmpは空リストに初期化している訳で、clearは要らなかったですね。

投稿2018/11/15 01:48

hayataka2049

総合スコア30933

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

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

kanpan

2018/11/15 02:59

そういうことだったのですね 解決しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問