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

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

ただいまの
回答率

90.52%

  • Python

    7972questions

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

  • Python 3.x

    6387questions

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

  • Python 2.7

    1264questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

word2vecを使って,各単語のベクトルの和から1文あたりのベクトルの求めるプログラムがわかりません

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 540

yamadatarou

score 4

Word2vecを使って,各単語のベクトルの和から1文あたりのベクトルを求めるプログラムを書いているのですが,うまく動きません.
どのように書けばうまく求めれるの教えていただきたいです.

自分でやってみた方法として,文章を文単位に分割し,Mecabを使って分かち書きを行いました.

分かち書きを行なった単語からWord2vecを使ってベクトルの算出はできるのですが,リストに空の値が出てきたしして,各単語のベクトルを足した1文あたりのベクトルが求めることができません.

途中まで,自力でコードを書いてみたのですが,空の要素などをうまく削除できないため,全てのベクトルを算出することができません.
どなたか力を貸していただけないでしょうか?

import MeCab
import re
from gensim.models import word2vec



#テキストファイル読み込み
f = open('test2.txt')
data1 = f.read()  # ファイル終端まで全て読んだデータを返す
f.close()

#分かち書き
tagger = MeCab.Tagger("-Owakati")
result = tagger.parse(data1)
result1 = re.sub('[、]', '',result)
print(result1)


#文章を文単位に分割
print(result)
data2 = result.split('。')
#word2vec学習データ
data = word2vec.Text8Corpus('test2_wakati.txt')
model = word2vec.Word2Vec(data, size=100,min_count=1)
model.save("sample.model")
print(data)

#print(data1)




#print(data2)
#data3 = data2.split(' ')
#print(data2)
#各文と単語の二重リストを作成
data4 = []
data3_1 = []
for i in range(len(data2)):
    print(i)
    data3 = data2[i].split(' ')
    data3.pop()
    data4.append(data3)



#print(data4)

#word2cevから各単語の特徴ベクトルを算出
for i in range(len(data4)):
    for b in range(len(data4[i])):
        print(b)
        print(model[data4[i][b]])
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

質問の要点がはっきりしませんが、とりあえず次について回答します。

空の要素などをうまく削除できない

Googleで適当に検索してみたところ、いくつか解決策が見つかりました。
これらのページは、全て検索結果の1ページ目に表示されました... ちゃんと調べましたか?


発見次第消す方法

my_list = ['This', '', 'is', 'an', '', 'apple']
while my_list.count(''):
    my_list.remove('')
my_list = ['This', '', 'is', 'an', '', 'apple']
while True:
    try:
        my_list.remove('')
    except:
        break

内包表記を利用する方法

my_list = ['This', '', 'is', 'an', '', 'apple']
my_list = [word for word in my_list if word != '']

フィルタをかける方法

my_list = ['This', '', 'is', 'an', '', 'apple']
my_list = list(filter(lambda word: word != '', my_list))

あと、気になったんですが...

for i in range(len(data4)):
    for b in range(len(data4[i])):
        print(b)
        print(model[data4[i][b]])

こんな書き方しなくても平気ですよ。

for data4_i in data4:
    for j, data4_ij in enumerate(data4_i):
        print(j)
        print(model[data4_ij])

変数に連番で名前を付けるのもやめましょう。意味が分からないです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    MeCab.jarの生成について

    前提・実現したいこと MeCabを使って形態素解析をしようとしています。 発生している問題・エラーメッセージ javaバインディングの際にmakeするあたりが分からずに困

  • 解決済

    pythonでMecabを利用した語彙解析がうまくできない。

    ●環境 ・Windows Edition:Windows 7 Professional  Service Pack 1 ・pythonバージョン:Python 3.6.2 (v3.

  • 解決済

    mecab 品詞 選択

    やりたいこと 選択したテキストファイル内の文章をmecabを用いて形態素解析し、 品詞(名詞、動詞など)を絞り込みたいと考えています。 現在、テキストファイルの文章を形態素解析する

  • 解決済

    複数のテキストファイルをLDAモデルに

    やりたいこと 複数のテキストファイルを入力とし、指定したトピック数に分類するプログラムを作成したいと考えています。 現在、一つのテキストファイルをLDAモデルに投入するプログラムは

  • 解決済

    指定した言葉を排除したい

    やりたいこと テキストファイルからトピックモデルを作成するプログラムを実装中なのですが、コーパスを生成するのに用いる辞書に指示語(あれ、ここ、そちら)や、それ自体に重要な意味を持た

  • 解決済

    mecabでセリフのみを抽出したい

    やりたいこと mecabを用いて入力したテキストファイルのセリフ部分(「」や『』で囲まれている部分)の 名詞(代名詞,非自立名詞,数,固有名詞を除く)を取り出して行列selsに格納

  • 解決済

    テキストに番号を付けて管理したい

    困っていること 入力したファイルのトピックを抽出するための前段階として 指定したディレクトリ内の.txtファイルを用いてLDAモデルを作成するプログラムを実装したのですが、 現在の

  • 受付中

    1つのファイルのトピックを調べたい(LDAモデル)

    質問 LDAモデルに詳しい方に質問です。 また、以下に記すプログラムで 複数の小説のテキストファイルからLDAモデルを作成したとき、その中に含まれる 1つの文書のトピックを参照

同じタグがついた質問を見る

  • Python

    7972questions

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

  • Python 3.x

    6387questions

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

  • Python 2.7

    1264questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

  • トップ
  • Pythonに関する質問
  • word2vecを使って,各単語のベクトルの和から1文あたりのベクトルの求めるプログラムがわかりません