LoginSignup
7
9

More than 5 years have passed since last update.

Webテキスト解析のRubyのGem作った (Gem編)

Last updated at Posted at 2016-05-04

開発合宿で作ってみて楽しかったので記事化
社会人はアウトプットが大事ってどっかの偉い人が言ってたし。。。

tf-idfって何?って人はこっち → tf-idf編のqiita記事

Mecabが入ってない人はこっちで入れてください!(Mac) → Mecabインストール

GEMのGithubレポジトリ

インストール

Gemfileに

gem 'analy_z'

と書いて

$ bundle install

するだけ!!

使い方

例:

require 'analy_z'

a = AnalyZ::HTML.word_val(file_path, selector)

a.tf          # tf
a.idf         # idf
a.tf_idf      # tf-idf
a.hse_tf_idf  # hse-tf-idf
a.words       # words analy_z analyzed
a.texts       # texts analy_z analyzed
a.sentences   # sentences analy_z analyzed

まずrequire 'analy_z'をしてから

AnalyZ::HTML.word_val(file_path, selector)

にファイルのパス名とセレクターを渡す。

file_pathの中身には必ず複数のhtmlもしくはテキストファイルが当てはまる正規表現、例えば
htmls/*.htmlみたいなものを渡してください!

selectorはoptionなのでなくても動くけどもちゃんとテキストを解析したい場合余計なものを入れたくないと思うので、例えば解析したい記事のコンテンツのみを抽出する際に使います。

qiitaだとコンテンツ部分は#mainなのでこれを引数に入れると無駄なフッターとかヘッダーを解析対象から外してくれる。

そうすればちゃんと解析してくれる、はず。。。

hse_tf_idfってなんだ?

鋭い人は気付いたかもしれないけどhse_tf_idfというのが混ざってる

これは僕が勝手に考えたもので、(tf-idfは結構ありふれてるので。。)

HTML Semantic Elementの略称
※もうちょいいい名前あると思うのでコメントくださいw

何をしているかというとHTML要素を解析して単語の重要度に影響を与えようというもの

例えばh1タグやh2タグに含まれている単語を他の単語と同じように扱うのはおかしい

フォントサイズや太さがそもそも違って視覚的にそもそも重要度が全然違うのにそれを考慮しないと適切なwebのテキスト解析ができない。

なので今回はhタグの評価を実装 評価は

tag name font-size font-weight valuation
h1 2 1.75 3.5
h2 1.5 1.75 2.625
h3 1.17 1.75 2.0475
h4 1 1.75 1.75

これをもとに成り立ってる。

計算は単純で、

重要度 = font-size * font-weight

で計算している。

他にもcssのfont-sizeやfont-weightをそれぞれ独自で計算、font-colorの目立つ色の重要度を上げるなどを検討中。。。

まとめ

  • hse-tf-idf使うとただのテキスト解析からWebテキスト解析になる,はず
  • いい案あったらこちらもコメントください
  • プルリク、issue他コメント待ってます
  • 最近同期に文句言うなら仕事しろよと言われて辛い
  • メディア解析エンジンもこの開発合宿で作ったので解析させてくれるメディアさん募集中!!

Issue,プルリク,他コメントください!! → analy_z

7
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9