それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

正規表現で、漢字、カタカナだけを抜き出す。

以前、正規表現で手早く、文字をぶった切る方法を試していた。

今度はPHPからRubyで同じことやった。

PHPで分かち書きするのに、mecabとか入れてられない。

単語境界で文字を分割する。

文字の境界で、文章を分割する。

#/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, "阪神"]]