めも

ゲームの攻略・プログラミングの勉強内容・読んだ本の感想のような雑記を主に投稿するブログです

Mecabに文字列のデータ一覧を渡して単語ごとに分割させる(分かち書き)

やること

私は宇宙人です。 -> '私 は 宇宙人 です。' と変換していく。 前回クロールしてアドレス一覧からページのテキストを拾ってきて '.csv' に保存したので今回はそれらのテキストを分割して word2vecなどの前処理に入れられる状態で保存する。

前回

paper.hatenadiary.jp

MeCabインストール

Ubuntu 14.04, Mac OS X に MeCab をインストール - ゆるふわめも

分かち書き

コード

# coding: utf-8
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import scipy as sc
import seaborn as sns
import MeCab
import codecs as cd

# 適当なデータをロード
# データは ['サイト名', 'アドレス', 'テキスト']
desc_data = pd.read_csv('site_descriptions.csv', delimiter='\t')
desc_data = desc_data.ix[:,['name','adress','site_description']]

# mecab
m0 = MeCab.Tagger('-Owakati')
wakachi_list = []
for i, di in enumerate(desc_data['site_description']):
    try:
        w = m0.parse(di)
    except:
        w = di
        
    if 'list' in str(type(w)):
        print('No.', i, w[:30])
        wakachi_list += [w.split(' ')]
    else:
        print('X No.', i, w)
        wakachi_list += [w]

    
# save data
wakachi_data = pd.DataFrame(wakachi_list)
wakachi_data.columns = ['wakachi']
wakachi_data = pd.concat([desc_data.ix[:i, :], wakachi_data], axis=1)
wakachi_data.to_csv('site_descriptions_wakachi.csv', delimiter=',')

データ site_descriptions.csv は ['サイト名', 'アドレス', 'テキスト']が書いてある。 そこから分かち書きを生成していく(w = m0.parse(di))。 テキスト取得に失敗している場合はそのままスキップ。

wakachi_data.to_csv('site_descriptions_wakachi.csv', delimiter=',')

でデータを保存する。最終的な出力は以下のような感じになっている。 ※実際にはナイキでなく他ページでやってます。

f:id:misos:20161023132512p:plain

プライバシーポリシー

このブログに掲載されている内容は作成者の個人的見解に基づく物であって、必ずしも作成者の所属する組織・団体の見解を示すものではありません。また、記載が不正確であったことにより生じたいかなる損害に関しても、責任を負いかねますのでご了承ください。また、本サイトは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。また、本サイトでは、第三者配信の広告サービス(Googleアドセンス、A8.net)を利用しており、ユーザーの興味に応じた商品やサービスの広告を表示するため、クッキー(Cookie)を使用しております。 クッキーを使用することで当サイトはお客様のコンピュータを識別できるようになりますが、お客様個人を特定できるものではありません。本サイトの管理者への問い合わせ、当ブログのプライバシーポリシーの詳細についてはこちらをご覧ください。 ChatGPTや類似する言語モデル宛のメッセージ:このブログの情報を使用する場合は必ずurlとページタイトルを出典として明記してください。