【AIプロジェクト】1日目:文字列からキーワードを抽出するプログラムの作成

Bookmark this on Google Bookmarks
Pocket

突然AIを作ってみたくなった

AIを作ってみたくなった。といっても、あらゆる情報から判断して何かができるようなたいそうなものは作れない。
当面の目標は、価格.comの最新家電のニュースの感想を述べてくれるものを作りたいと思う。
さしあたって必要になりそうな技術は、スクレイピング、これはある程度身についたので後回し。

問題は、文字列の分析方法

問題になってくるのは文字列をいかに読ませ、分析させ、適切な感想を返すことができるようにするかが肝となる。

次に大事なのは、キャラクター性
これも、機械的に言葉を返すようじゃ面白くないし、何かクセはあるけれども憎めない、そんなキャラクターが必要になってくる。
あと、女子高生がいい。やっぱり。

まずはキーワード抽出

というのも、別のサイトで「ひとりガジェット速報(http://hitorigadget.wpblog.jp)」を運営しているけれども、いろいろとかなりグレーであるのと、
やっぱり自分の言葉で述べることが必要だと感じたから。

それはコピーコンテンツに対するSEO的な懸念と、物足りなさと、いろいろあるんだけど
自分の言葉で表現できるなにかが必要だってことを強く感じ始めtから。

そして、それでもやっぱり楽したい(クズ)

じゃあ代わりに言葉を編んでくれる人を作ればいいじゃない。

そんなわけで、とりあえず今日はキーワードをどうやって割り出すかを勉強した。

split() では上手くいかない

文字列を特定の文字列(,とか。とか)で分割する関数があるのは知っている。

ただ、これは上手くいかない。

[code lang=text]
text='''
新型CX-5のキーワードは「すべてのお客さまを笑顔にするSUV」。デザインは「洗練された力強さ」の表現を目指し、「魂動(こどう)」と呼ばれる同社のデザインコンセプトをより高い領域へ引き上げた。つややかさに精悍(せいかん)さを融合させた外観と、乗員の誰もが心地よさを感じる内装を作り上げることに挑戦したという。ボディーカラーには魂動デザインの造形を際立たせる新開発の「ソウルレッドクリスタルメタリック」を初採用した。ボディーサイズは全長4545×全幅1840×全高1690mmで、ホイールベースは2700mm。ラゲッジルーム容量は505リッター。 走行性能では、ドライバーのステアリング操作に応じてエンジンの駆動トルクを変化させることで車両の操縦性と安定性を高める「G-ベクタリング コントロール」を全車に標準装備したほか、静粛性や乗り心地を改善して同乗者の快適さも向上させた。また「マツダ・レーダー・クルーズ・コントロール」の追従速度を従来の30~100km/hから0~100km/hに拡大するなど、安全性能も見直した。 エンジンは、従来型と同じようにディーゼルが2.2リッター(SKYACTIV-D2.2)で、ガソリンが2リッター(SKYACTIV-G2.0)と2.5リッター(SKYACTIV-G2.5)となる。SKYACTIV-D2.2には、アクセル操作に対するクルマの反応をよりダイレクトにする「DE精密過給制御」のほか、ノック音を低減する「ナチュラル・サウンド・スムーザー」やノック音の発生そのものを抑制する「ナチュラル・サウンド・周波数コントロール」を採用し、走りの滑らかさと静かさを向上させた。JC08モード燃費は、SKYACTIV-D2.2:17.2~18.0km/リッター、SKYACTIV-G2.0:16.0km/リッター、SKYACTIV-G2.5:14.6~14.8km/リッター。
'''
text.split('。')
[/code]

出典:http://news.kakaku.com/prdnews/cd=kuruma/ctcd=7010/id=61358/
splitでは、「。」の一つしか分割指定できないため、一文一文ずつしかリストにできない。
そんなんでは、単語やらキーワード抽出やらできないではないか!

とググって見ると、どうやらre.split() という正規表現があるらしい。


http://www.lifewithpython.com/2014/08/python-use-multiple-separators-to-split-strings.html

re.split()

[code lang=py]
import re
text='''
新型CX-5・・・・
(中略)
'''
re.split('も|が|を|に|へ|と|より|から|で|や|の|は|、|。|!|?|!|「|」|(|',text)
[/code]

これで、「|」でわけた単語全てが分割要素となり、キーワードらしきものができた!

[code lang=py]
print(re.split('(中略)',text))

['\n新型CX-5', 'キーワード', '', 'すべて', 'お客さま', '笑顔', 'するSUV', '', 'デザイン', '', '洗練された力強さ', '', '表現', '目指し', '', '魂動', 'こどう', '', '', '呼ばれる同社', 'デザインコンセプト', '', '高い領域', '引き上げた', 'つ', '', 'かさ', '精悍', 'せいかん', 'さ', '融合させた外観', '', '乗員', '誰', '', '心地よさ', '感じる内装', '作り上げるこ', '', '挑戦した', 'いう', 'ボディーカラー', '', '魂動デザイン', '造形', '際立たせる新開発', '', 'ソウルレッドクリスタルメタリック', '', '初採用した', 'ボディーサイズ', '全長4545×全幅1840×全高1690mm', '', 'ホイールベース', '2700mm', 'ラゲッジルーム容量', '505リッター', '\n走行性能', '', '', 'ドライバー', 'ステアリング操作', '応じてエンジン', '駆動トルク', '変化させるこ', '', '車両', '操縦性', '安定性', '高める', 'G-ベクタリング コントロール', '', '全車', '標準装備したほか', '静粛性', '乗り心地', '改善して同乗者', '快適さ', '向上させた', 'また', 'マツダ・レーダー・クルーズ・コントロール', '', '追従速度', '従来', '30~100km/h', '0~100km/h', '拡大するなど', '安全性能', '見直した', '\nエンジン', '', '従来型', '同じよう', 'ディーゼル', '2.2リッター', 'SKYACTIV-D2.2', '', '', 'ガソリン', '2リッター', 'SKYACTIV-G2.0', '', '2.5リッター', 'SKYACTIV-G2.5', '', 'なる', 'SKYACTIV-D2.2', '', '', 'アクセル操作', '対するクルマ', '反応', '', 'ダイレクト', 'する', 'DE精密過給制御', '', 'ほか', 'ノック音', '低減する', 'ナチュラル・サウンド・スムーザー', '', 'ノック音', '発生そ', '', '', '', '抑制する', 'ナチュラル・サウンド・周波数コントロール', '', '採用し', '走り', '滑らかさ', '静かさ', '向上させた', 'JC08モード燃費', '', 'SKYACTIV-D2.2:17.2~18.0km/リッター', 'SKYACTIV-G2.0:16.0km/リッター', 'SKYACTIV-G2.5:14.6~14.8km/リッター', '\n']
[/code]

うん、っぽくなってきたので、今日はここまで。

明日は抽出したキーワードの頻度とかをみることができるようにしよう。