SlideShare a Scribd company logo
1 of 15
Download to read offline
はてなダイアリーキーワード
   をつくってみたよ

   Tsukasa OISHI
はてなダイアリーキーワードとは

■はてなダイアリー
  株式会社はてなが運営しているWeb日記

■はてなダイアリーキーワード
  はてなユーザが共有するキーワード

 ▼キーワードごとに専用ページがある
  ・キーワードの説明
  ・関連商品、広告
  ・キーワードが最近使われた日記の一覧
  ・などなど

 ▼自動リンク
   日記中にキーワードが現れると、専用ページへのリンク
   を自動ではる
  
はてなダイアリーキーワードをつくりたい

■野良ブログでもはてなダイアリーキーワードを使いたい
  タグやカテゴリを記事ごとに指定するのが
  メンドくさくなってきた

 ▼はてなのAPIがある
  ・楽チン
  ・でもつまんない

 ▼つくってみよう
  ・技術者のはしくれだし
  ・なによりおもしろそう
  ・意地でもRubyでやってみる(Rubyistだもの)
キーワードの自動リンク

■自動リンクの方法

 ▼日記の保存時に、リンク処理を施してからDBへ
   ・パフォーマンスの低下が抑えられる
   ・新しいキーワードが登録されたときの対応が大変
   ・日記を編集したいときも面倒

 ▼日記の表示時に、リンク処理を施してからViewへ
   ・パフォーマンスが低下するかも
  ・新しいキーワードが登録されても大丈夫
キーワードを探し出す

■はてなでの登録キーワード数
  228,758語のキーワード (2008/8/23 16:56)

■すごく重そう
 日記の中から228,758語のキーワードのどれが
 使われているのかを探し出さなきゃ

  
正規表現

■文章の検索といえば正規表現
  228,758語のキーワードを探し出す正規表現なんて
  あるの?

 ▼あった
 ・はてなが用意していた
  ・2730kbの正規表現


  ▼試してみる
  ・6000字程度の文章
  ・0.810735940933228秒 
オートマトン
■正規表現では遅い
 そもそも正規表現の仕組みはどうなっているのだろう

  ▼非決定性オートマトン(NFA)
            ε
   /a+/
   
             a


  ・繰り返しを考慮しなければならないから大変
  ・非決定性があるなら決定性もあるはず
決定性オートマトン(DFA)

■決定性オートマトンを考える
 ・キーワード検出は一意に状態遷移が決まる

             か    た

   食    べ    も     の


             す    ぎ
実現方法
■木構造
 単純に考えてこれ

 ▼ハッシュ木
   ・速そう
   ・だけどメモリを食いそう

  ▼キーワードの検出
   1. キーワード検出のためのハッシュ木を作る
   2. 対象の文章を最初から一文字ずつチェック
ハッシュ木

キーワード : やきにく、やきとり、やきにんにく
tree = {
  “や” => {
   “き” => {“に” => {“く” =>“EN”,
                   “ん” => { “に” => { “く” => “EN” } }
                  },
           “と” => { “り” => “EN” }
           }
    }
  }
}
キーワードの検出
 キーワード  やきにく、やきとり、やきにんにく
 対象の文章 ぼくはやきにくがすき

 「ぼ」「く」「は」 → 一致せず

 「や」 → tree.has_key?(“や”) #=> true

 「き」 → tree[“や”].has_key?(“き”) #=> true

 「に」 → tree[“や”][“き”].has_key?(“に”) #=> true

 「く」 → tree[“や”][“き”][“に”].has_key?(“く”) #=> true
       tree[“や”][“き”][“に”][“く”] == “EN” 検出!

 「が」「す」「き」 → 一致せず
実装
■ハッシュのキー
 ・UTF-8での一文字
 ・Railsだし
 ・本当は一バイトごとにしたほうがいい

■キーワードサーバ
 ・通信はRinda(dRuby)で実現
                                                              キーワードサーバ
     [:req, “I love Ruby”]                 [:req, nil]


                             Tuple space


        [:res, nil]                        [:res, “I love <a>Ruby</a>”]
結果
■測定
 ・はてなのキーワード228,758語を使用
 ・6000字程度の文章を対象

 ▼結果
  ・ハッシュ木の作成 10.263402 秒
  ・メモリの消費量  142Mb
  ・キーワードの検出 0.010049 秒
  ・キーワードの追加 10e-6 秒

■実際に見てみる
 http://www.kaeruspoon.net/keywords
他の方法

■double array
 ・MeCabなどに使われている
 ・新しいキーワードの追加でarrayが壊れる
 ・ググるとgoogleの求人広告が!
 ・いつか試したい
 
おしまい

Thanks!

More Related Content

More from Tsukasa Oishi

はてブ砲をくらったときのお話
はてブ砲をくらったときのお話はてブ砲をくらったときのお話
はてブ砲をくらったときのお話Tsukasa Oishi
 
奥さんとプログラミングを両立させる方法
奥さんとプログラミングを両立させる方法奥さんとプログラミングを両立させる方法
奥さんとプログラミングを両立させる方法Tsukasa Oishi
 
Iphoneアプリ開発におけるデザインパターン
Iphoneアプリ開発におけるデザインパターンIphoneアプリ開発におけるデザインパターン
Iphoneアプリ開発におけるデザインパターンTsukasa Oishi
 
かんたんな検索エンジンをつくってみました
かんたんな検索エンジンをつくってみましたかんたんな検索エンジンをつくってみました
かんたんな検索エンジンをつくってみましたTsukasa Oishi
 
食べログで動いている自作ライブラリのお話
食べログで動いている自作ライブラリのお話食べログで動いている自作ライブラリのお話
食べログで動いている自作ライブラリのお話Tsukasa Oishi
 
Miyazaki Resistanceを作ってみたよ
Miyazaki Resistanceを作ってみたよMiyazaki Resistanceを作ってみたよ
Miyazaki Resistanceを作ってみたよTsukasa Oishi
 
Tokyotyrantについて
TokyotyrantについてTokyotyrantについて
TokyotyrantについてTsukasa Oishi
 

More from Tsukasa Oishi (8)

はてブ砲をくらったときのお話
はてブ砲をくらったときのお話はてブ砲をくらったときのお話
はてブ砲をくらったときのお話
 
奥さんとプログラミングを両立させる方法
奥さんとプログラミングを両立させる方法奥さんとプログラミングを両立させる方法
奥さんとプログラミングを両立させる方法
 
Iphoneアプリ開発におけるデザインパターン
Iphoneアプリ開発におけるデザインパターンIphoneアプリ開発におけるデザインパターン
Iphoneアプリ開発におけるデザインパターン
 
かんたんな検索エンジンをつくってみました
かんたんな検索エンジンをつくってみましたかんたんな検索エンジンをつくってみました
かんたんな検索エンジンをつくってみました
 
食べログで動いている自作ライブラリのお話
食べログで動いている自作ライブラリのお話食べログで動いている自作ライブラリのお話
食べログで動いている自作ライブラリのお話
 
Miyazaki Resistanceを作ってみたよ
Miyazaki Resistanceを作ってみたよMiyazaki Resistanceを作ってみたよ
Miyazaki Resistanceを作ってみたよ
 
Tokyotyrantについて
TokyotyrantについてTokyotyrantについて
Tokyotyrantについて
 
Tdd
TddTdd
Tdd
 

Recently uploaded

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Recently uploaded (8)

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

はてなダイアリーキーワードをつくってみたよ