以前、正規表現で手早く、文字をぶった切る方法を試していた。
単語境界で文字を分割する。
文字の境界で、文章を分割する。
#/usr/bin/env ruby require 'rubygems' $KCODE ='u' s = "これはテストです。動作するかなぁ" regex = /[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+/ p s.scan( regex ) #=>["これは", "テスト", "です", "動作", "するかなぁ"]
こんな感じになりました。そこそこ使えそうですね。文字コード指定しないと動かないようです。
ニュースの中から、キーワードの登場回数を数えた。
というわけで、阪神タイガースのニュースの中から、キーワードが何回出てくるか数えてみた。まぁそこそこ、類推に使えるんじゃないかなと。
阪神ニュース.rb
$KCODE = 'u' require 'rubygems' require 'nokogiri' require 'open-uri' def splits(str) regex = /[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+/ str.scan regex end url = "http://www.nikkansports.com/rss/baseball/professional/tigers.rdf" doc = Nokogiri(open(url)) words = doc.xpath("//item/description").map{|e| splits(e.text) }.flatten.delete_if{|e| e.size < 4 }.sort keywords = words.uniq keywords_with_counts = keywords.map{|e| [(words.select{|word| e == word}.count),"#{e}"] }.sort p keywords_with_counts puts "end" #[[1, "いた"], [1, "うれしい"], [1, "えっ"], [1, "えながら"], [1, "えに"], [1, " #える"], [1, "かう"], [1, "かぶる"], [1, "きく"], [1, "けない"], [1, "ける"], #[1, "げた"], [1, "この"], [1, "され"], [1, "さんに"], [1, "しい"], [1, "したが #"], [1, "しながら"], [1, "しを"], [1, "することが"], [1, "そらうれしいよ"], [1, #"たな"], [1, "って"], [1, "ってくれ"], [1, "です"], [1, "での"], [1, "では"], #[1, "でも"], [1, "として"], [1, "とな"], [1, "となり"], [1, "となる"], [1, "とに #かく"], [1, "なら"], [1, "にして"], [1, "について"], [1, "にな"], [1, "になれて #うれしい"], [1, "のうち"], [1, "のごっつい"], [1, "はあま"], [1, "ぶりに"], [1, #"への"], [1, "また"], [1, "やっぱり"], [1, "れない"], [1, "をあげた"], [1, "をか #えそう"], [1, "をまた"], [1, "んだ"], [1, "アニキ"], [1, "アー"], [1, "ウエスタ #"], [1, "ウエスタン"], [1, "ウエスタンリーグ"], [1, "ウソ"], [1, "グランドスラム #"], [1, "ゴロ"], [1, "サマサマ"], [1, "ジェット"], [1, "ストップ"], [1, "ストレ #ッチ"], [1, "スライダー"], [1, "ダンス"], [1, "ドッカーン"], [1, "ナイン"], [1, #"バックスクリーン"], [1, "フィリーズ"], [1, "フォーク"], [1, "ブラ"], [1, "ベン #チ"], [1, "ホロ"], [1, "ポール"], [1, "ミスター"], [1, "メッセンジャー"], [1, " #一撃"], [1, "一発"], [1, "三塁"], [1, "上田博志"], [1, "下柳"], [1, "久保田智之 #投手"], [1, "二塁打"], [1, "今季初勝利"], [1, "今季初白星"], [1, "今年"], [1, " #依然"], [1, "先制点"], [1, "初回"], [1, "判定弾"], [1, "前日"], [1, "勲章"], #[1, "反省"], [1, "右肩痛"], [1, "右越"], [1, "回表"], [1, "回裏"], [1, "回途中 #"], [1, "土日祝日"], [1, "城島立"], [1, "夏休"], [1, "女性"], [1, "好投"], [1, " #安打"], [1, "宮崎幸一"], [1, "山本貴一塁塁審"], [1, "左前"], [1, "左翼"], [1, " #左翼線越"], [1, "平野"], [1, "年目"], [1, "年目下柳"], [1, "度目"], [1, "当然 #"], [1, "復活"], [1, "感謝"], [1, "戦力"], [1, "戦目"], [1, "戦目初勝利"], [1, " #打球"], [1, "打線"], [1, "打者"], [1, "打者武内"], [1, "投壊"], [1, "握手"], #[1, "援護"], [1, "放物線"], [1, "救世主"], [1, "新戦力"], [1, "日米通算"], [1, " #昨季"], [1, "昨日"], [1, "普段"], [1, "暴投"], [1, "期間中"], [1, "本目"], [1, " #死一"], [1, "死満"], [1, "決勝"], [1, "満塁"], [1, "満塁弾"], [1, "炎上"], [1, " #点右翼越"], [1, "由規"], [1, "番手"], [1, "発目"], [1, "発表"], [1, "直撃"], #[1, "直球"], [1, "真弓明信監督"], [1, "真弓監督"], [1, "移籍初"], [1, "移籍後初 #"], [1, "葛城"], [1, "藤村富美男"], [1, "表情"], [1, "記憶"], [1, "評価"], [1, " #試合"], [1, "認定"], [1, "責任"], [1, "走者"], [1, "軍戦"], [1, "逆転"], [1, "連 #敗中"], [1, "連続出場"], [1, "野手"], [1, "金本知憲外野手"], [1, "金本阪神"], #[1, "長嶋超"], [1, "阪神上園"], [1, "阪神下柳粘"], [1, "阪神公式戦"], [1, "阪神 #城島"], [1, "阪神恐怖"], [1, "阪神真弓監督"], [1, "阪神西村憲投手"], [1, "阪神金 #本"], [1, "風船"], [2, "えた"], [2, "から"], [2, "した"], [2, "にした"], [2, "ぶ #り"], [2, "まで"], [2, "クレイグ"], [2, "シート"], [2, "デビュー"], [2, "プロ #"], [2, "ラン"], [2, "中日戦"], [2, "久保田"], [2, "今季"], [2, "内野手"], [2, " #初勝利"], [2, "判定"], [2, "加藤哉"], [2, "勝利"], [2, "四日市"], [2, "執念"], #[2, "失点"], [2, "復活星"], [2, "投球"], [2, "抗議"], [2, "新外国人"], [2, "来日 #初先発"], [2, "来日初登板"], [2, "河南真一"], [2, "満塁本塁打"], [2, "無失点"], #[2, "笑顔"], [2, "自虐的"], [2, "西村"], [2, "設置"], [2, "阪神下柳剛投手"], #[2, "阪神対"], [3, "する"], [3, "ぶりの"], [3, "ジェイソン"], [3, "投手"], [3, " #本塁打"], [3, "登板"], [3, "連敗"], [3, "阪神上園啓史投手"], [3, "阪神城島健司捕 #手"], [3, "阪神金本知憲外野手"], [4, "ビデオ"], [4, "上園"], [4, "城島"], [4, " #金本"], [5, "った"], [5, "ブラゼル"], [6, "スタンリッジ"], [6, "撮影"], [17, "甲 #子園"], [20, "ヤクルト"], [20, "日記"], [33, "阪神"]]