SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
第2回Webスクレイピング勉強会@東京
!
サイト/ブログから
本文抽出する方法
2014年8月17日
@dkfj 佐々木拓郎
✦ プロフィール
‣ Webシステムを得意とするSIerで勤務
‣ 最近の仕事はAWS事業の推進
‣ Webスクレイピングして、データマイニングするのが趣味
★ ソーシャル・ネットワーク
‣ blog: http://blog.takuros.net/
‣ twitter: @dkfj
‣ Facebook: takuro.sasaki
‣ SlideShare: http://www.slideshare.net/takurosasaki/
‣ http://www.justyo.co/TAKUROS/
@dkfj
自己紹介: 佐々木拓郎
主にJAWSUG大阪で活動しています
(AWS勉強会)
「Rubyによるクローラー開発技法」
Rubyのクローラー/スクレイピング本を
書きました。8月24日に発売予定です。
本日のテーマ
!
サイト/ブログから
本文抽出する方法
本日のテーマ
!
サイト/ブログから
本文抽出する方法
何故、必要なのか?
一般的なブログの構造
ブログ
タイトル
サイド
メニュー
ブログ
タイトル
サイド
メニュー
本文
記事
タイトル
ブログ
タイトル
サイド
メニュー
本文
記事
タイトル
欲しいのは、本文
サイト/ブログの本文抽出の目的
• 書かれている記事を読みたい
• コーパス/解析の元データとして利用したい
コーパスとは?
 コーパス(corpus)とは、言語学において、自然言語処理の
研究に用いるため、自然言語の文章を構造化し大規模に集積した
もの。構造化では言語的な情報(品詞、統語構造など)が付与さ
れる。コンピュータ利用が進み、電子化データとなった。
!
ウィキペディアより
自然文としてのブログの特徴
• 新聞に較べて、口語に近い単語/フレーズが出現する
• タグやカテゴリーなどのメタデータがあり、分類しやすい
• 投稿者の属性を、ある程度推定できる
  ex) 男性/女性、社会人/学生、10代、20代、30代
自然文としてのブログの特徴
• 新聞に較べて、口語に近い単語/フレーズが出現する
• タグやカテゴリーなどのメタデータがあり、分類しやすい
• 投稿者の属性を、ある程度推定できる
  ex) 男性/女性、社会人/学生、10代、20代、30代
わりと貴重なデータ
本文抽出の方法
• パーサーを利用して、HTML構造を分析しての抽出
• 自然言語処理を利用して、本文らしさを分析しての抽出
HTMLの構文解析
!
• 取得対象のHTMLの構文を分析して、本文を抽出
• いわゆるルール・ベース
  ex) HTMLのタグのidが、contentのものを取得
はてなブログの場合
entry-contentの中が
ブログ本文
HTMLの構文解析
メリット
• 正確に本文を抽出できる
• 比較的、(コンピュータリソースの)負荷が低い
デメリット
• ブログ種別ごとに、開発が必要
• 取得元のHTML構造の変更に弱い
nokogoriを使って取得
require 'open-uri'
require 'nokogiri'
!
html = open('http://blog.takuros.net/entry/
20140104/1388788175').read
!
doc = Nokogiri::HTML(html)
puts doc.xpath("//div[@class='entry-content']").text
• HTML/XMLの構文解析器(パーサー)
• ほぼデファクトスタンダード
• XPath or CSSセレクタで、HTML中の要素を選択
• UTF-8以外の文字コードを扱う場合は注意
require 'nokogiri'
require 'open-uri'
!
doc = Nokogiri.HTML(open("http://nokogiri.org/"))
doc.css('a').each do ¦element¦
puts element[:href]
end
参照:Ruby製の構文解析ツール、Nokogiriの使い方 with Xpath
http://blog.takuros.net/entry/2014/04/15/070434
自然言語処理を利用した本文抽出
• 文章内から本文らしい部分を抜き出す
• ヒューリスティック(経験則)
• 自分で一から実装するのは、割と大変
本文抽出モジュール
• ExtractContnt (Ruby)
• HTML::Extract (Perl)
• HTML-Feature (Perl)
• ExtractContnt/webextract.py (Python)
ExtractContentの実装
• html をブロックに分離、スコアの低いブロックを除外
• 評価の高い連続ブロックをクラスタ化し、クラスタ間でさ
らに比較を行う
• スコアは配置、テキスト長、アフィリエイトリンク、フッ
タ等に特有のキーワードが含まれているかによって決定
• Google AdSense Section Target ブロックには本文が記
述されているとし、特に抽出
自然言語処理を利用した本文抽出
メリット
• ブログ種別に依存しない
• 取得元のHTML変更に強い
デメリット
• 構文解析に比べると、精度が落ちる
• 比較的、(コンピュータリソースの)負荷が高い
nokogoriを使って取得
require 'extractcontent'
require open-uri'
!
html = open( 'http://blog.takuros.net/entry/
20140104/1388788175').read
!
content, title = ExtractContent.analyse(html)
puts title
puts content
まとめ
• 本文抽出の方法は、主に2種類
• どちらも一長一短あるので、用途に応じて使う
• 正確さを期すならば、HTMLの構文解析
  書かれている内容、そのものが必要な場合
• 厳密さがいならいのであれば、本文抽出モジュール
  コーパスや解析用の元データとして利用
今日の話は、
この辺に書いています
おまけ
キーワード抽出
• 辞書方式
• Mecabを利用した未知語抽出
おまけ その2
特徴語抽出
• TD/IDFが一般的
• Yahooのキーフレーズ抽出APIなどもあり
 http://developer.yahoo.co.jp/webapi/jlp/keyphrase/
v1/extract.html
ご清聴ありがとうございました
後日の質問は、@dkfjまで

Mais conteúdo relacionado

Mais procurados

インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門
Akihiro Kuwano
 

Mais procurados (20)

Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 入門編 -
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 入門編 -Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 入門編 -
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 入門編 -
 
20200809_2020年から始める Azure Cosmos DB 入門 with Azure Synapse Link recap
20200809_2020年から始める Azure Cosmos DB 入門 with Azure Synapse Link recap20200809_2020年から始める Azure Cosmos DB 入門 with Azure Synapse Link recap
20200809_2020年から始める Azure Cosmos DB 入門 with Azure Synapse Link recap
 
Go言語によるwebアプリの作り方
Go言語によるwebアプリの作り方Go言語によるwebアプリの作り方
Go言語によるwebアプリの作り方
 
DynamoDBを導入した話
DynamoDBを導入した話DynamoDBを導入した話
DynamoDBを導入した話
 
Sansanがメッセージング (SQS) でスケーラビリティを手に入れた話
Sansanがメッセージング (SQS) でスケーラビリティを手に入れた話Sansanがメッセージング (SQS) でスケーラビリティを手に入れた話
Sansanがメッセージング (SQS) でスケーラビリティを手に入れた話
 
Effective Data Lakes - ユースケースとデザインパターン
Effective Data Lakes - ユースケースとデザインパターンEffective Data Lakes - ユースケースとデザインパターン
Effective Data Lakes - ユースケースとデザインパターン
 
WiredTigerを詳しく説明
WiredTigerを詳しく説明WiredTigerを詳しく説明
WiredTigerを詳しく説明
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門
 
Db2をAWS上に構築する際のヒント&TIPS 2019年7月版
Db2をAWS上に構築する際のヒント&TIPS 2019年7月版Db2をAWS上に構築する際のヒント&TIPS 2019年7月版
Db2をAWS上に構築する際のヒント&TIPS 2019年7月版
 
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
 
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座
 
Node-REDのノード開発容易化ツール Node generator
Node-REDのノード開発容易化ツールNode generatorNode-REDのノード開発容易化ツールNode generator
Node-REDのノード開発容易化ツール Node generator
 
Hadoop入門
Hadoop入門Hadoop入門
Hadoop入門
 
DeNAの大規模ライブ配信基盤を支える技術
DeNAの大規模ライブ配信基盤を支える技術DeNAの大規模ライブ配信基盤を支える技術
DeNAの大規模ライブ配信基盤を支える技術
 
ER/Studio データベース設計ツール
ER/Studio データベース設計ツールER/Studio データベース設計ツール
ER/Studio データベース設計ツール
 
(SDD415) NEW LAUNCH: Amazon Aurora: Amazon’s New Relational Database Engine |...
(SDD415) NEW LAUNCH: Amazon Aurora: Amazon’s New Relational Database Engine |...(SDD415) NEW LAUNCH: Amazon Aurora: Amazon’s New Relational Database Engine |...
(SDD415) NEW LAUNCH: Amazon Aurora: Amazon’s New Relational Database Engine |...
 
Azure vm の可用性を見直そう
Azure vm の可用性を見直そうAzure vm の可用性を見直そう
Azure vm の可用性を見直そう
 
DBpedia Japaneseとは?
DBpedia Japaneseとは?DBpedia Japaneseとは?
DBpedia Japaneseとは?
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
プログラマ目線で見た “The DAO事件” とは
プログラマ目線で見た “The DAO事件” とはプログラマ目線で見た “The DAO事件” とは
プログラマ目線で見た “The DAO事件” とは
 

Mais de Takuro Sasaki

Rubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawlerRubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawler
Takuro Sasaki
 
Jawsug osaka10 service&regions
Jawsug osaka10 service&regionsJawsug osaka10 service&regions
Jawsug osaka10 service&regions
Takuro Sasaki
 

Mais de Takuro Sasaki (20)

JAWSUG初心者支部 AWSの勉強の仕方
JAWSUG初心者支部 AWSの勉強の仕方JAWSUG初心者支部 AWSの勉強の仕方
JAWSUG初心者支部 AWSの勉強の仕方
 
Crawler for Non engineer
Crawler for Non engineerCrawler for Non engineer
Crawler for Non engineer
 
JAWSUG architecture-crowler
JAWSUG architecture-crowlerJAWSUG architecture-crowler
JAWSUG architecture-crowler
 
Innovation eggcloudnative
Innovation eggcloudnativeInnovation eggcloudnative
Innovation eggcloudnative
 
Lambda認証認可パターン
Lambda認証認可パターンLambda認証認可パターン
Lambda認証認可パターン
 
Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発
 
Jawsug chiba API Gateway
Jawsug chiba API GatewayJawsug chiba API Gateway
Jawsug chiba API Gateway
 
DevLove Kansai AWS
DevLove Kansai AWSDevLove Kansai AWS
DevLove Kansai AWS
 
Rubyで操るAWS 第67回Ruby関西 勉強会
Rubyで操るAWS 第67回Ruby関西 勉強会Rubyで操るAWS 第67回Ruby関西 勉強会
Rubyで操るAWS 第67回Ruby関西 勉強会
 
JAWS-UG初心者支部 AWS書籍活用術
JAWS-UG初心者支部 AWS書籍活用術JAWS-UG初心者支部 AWS書籍活用術
JAWS-UG初心者支部 AWS書籍活用術
 
JAWSUG Kansai Simple Workflow Service (SWF)
JAWSUG Kansai Simple Workflow Service (SWF)JAWSUG Kansai Simple Workflow Service (SWF)
JAWSUG Kansai Simple Workflow Service (SWF)
 
JAWSUG Osaka S3 CloudSearch
JAWSUG Osaka S3 CloudSearchJAWSUG Osaka S3 CloudSearch
JAWSUG Osaka S3 CloudSearch
 
AWS Lambdaで作るクローラー/スクレイピング
AWS Lambdaで作るクローラー/スクレイピングAWS Lambdaで作るクローラー/スクレイピング
AWS Lambdaで作るクローラー/スクレイピング
 
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップスScraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
 
Rubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawlerRubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawler
 
JAWS-UG三都物語2014 初心者向け Elasticity ELB/AutoScaling/EIP
JAWS-UG三都物語2014 初心者向け Elasticity ELB/AutoScaling/EIPJAWS-UG三都物語2014 初心者向け Elasticity ELB/AutoScaling/EIP
JAWS-UG三都物語2014 初心者向け Elasticity ELB/AutoScaling/EIP
 
Rubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピングRubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピング
 
Jawsug osaka10 service&regions
Jawsug osaka10 service&regionsJawsug osaka10 service&regions
Jawsug osaka10 service&regions
 
第9回Jawsug大阪 ServiceProviders 現場で使えるAWS付随サービス!!
第9回Jawsug大阪 ServiceProviders 現場で使えるAWS付随サービス!!第9回Jawsug大阪 ServiceProviders 現場で使えるAWS付随サービス!!
第9回Jawsug大阪 ServiceProviders 現場で使えるAWS付随サービス!!
 
第2回 JAWS−UG 神戸 開発運用の現場でのChef活用
第2回 JAWS−UG 神戸  開発運用の現場でのChef活用第2回 JAWS−UG 神戸  開発運用の現場でのChef活用
第2回 JAWS−UG 神戸 開発運用の現場でのChef活用
 

サイト/ブログから本文抽出する方法