Miyazawa’s Pukiwiki
RSSを使ったブログ・Wikiの解析
はすでに存在します。
開始行:
#access
#analog
※以下は内部限定公開のドキュメントが多いです。ご不便おかけ...
*RSSを使ったブログ・Wikiの解析(ブログ検索システムの開発...
***目次 [#da57fbe5]
#contents
***目的 [#ac36f0dd]
-ブログやWikiの更新情報、記事テキストの本文、リンクなどを...
-[[MySQLデータベース:http://www.atmarkit.co.jp/flinux/ind...
-ブログの記事テキストを、さまざまな自然言語処理の技術を使...
-Webアプリケーション(検索エンジン)として実装しましょう。
**ブログの情報を取得する [#id73b930]
-ここでは、菊池研個人ブログのテキストを収集して、解析して...
***RSSを取得する [#befe7384]
-参考
--[[RSS:http://ja.wikipedia.org/wiki/RSS]]
--[[Blog情報一覧(菊池研wiki):http://shinzan.human.wased...
--[[Six Apart - フィードとは?:http://www.sixapart.jp/abo...
-菊池研のブログ(Movable Type 4.0)のRSSフィードを見るに...
&ref(http://shower.human.waseda.ac.jp/~m-kouki/images/blo...
-[[こんな感じ:http://shower.human.waseda.ac.jp/~m-kouki/b...
--<entry> ~ </entry> が一つのエントリー
---<title> ~ </title> がタイトルで、
---<link ... href= " ~ " /> がURLで、
---<![CDATA[ ~ ]]> が本文(ひとつのエントリーに複数存在...
-RSSを取得する
--[[JavaでHello World URL編:http://www.hellohiro.com/url....
--TestSearch1.java
#geshi(java){{
import java.net.*;
import java.io.*;
public class TestSearch1 {
public static void main(String[] args) {
そのままなので省略
}
}
}}
---ここではとりあえず、[[宮澤のブログ:http://shower.human...
---文字化け対処として、インプットストリームの部分を以下に...
#geshi(java){{
// 入力ストリームを生成
BufferedReader in = new BufferedReader(
new InputStreamReader(
helloURL.openStream(), "UTF8"));
}}
---プログラムを実行して、RSSのXML文書が表示されることを確...
***RSSパーサを使って、RSSを解析する [#r6e62c03]
-上で確認してもらったように、RSSのXML文書の中には、ブログ...
-ここでは、Java用XMLパーサ、[[Informa:http://informa.sour...
--別の方法として、perl用のRSSパーサ [[XML::FeedPP:http:...
-Informa をダウンロード
--[[ここ:http://informa.sourceforge.net/]] から Downloads...
--解凍してできる informa-0.7.0-alpha2 直下の informa.jar ...
---下記のプログラムで使うのは、特に informa.jar lib/comm...
-Informa.jar を置いたディレクトリの中に、以下のJavaプログ...
--参考 : [[Informa で RSS フィードを変更してみる:http://...
--'''[[TestSearch2.java:http://shower.human.waseda.ac.jp/...
-コンパイルと実行
--上記のプログラムのある場所(ターミナルもしくはLinuxサー...
$ CLASSPATH=$CLASSPATH:informa.jar
$ CLASSPATH=$CLASSPATH:./lib/commons-logging.jar
$ CLASSPATH=$CLASSPATH:./lib/jdom.jar
$ export CLASSPATH
$ javac TestSearch2.java
---参考 : [[パスとクラスパス:http://shower.human.waseda....
---毎回クラスパスを宣言しないですむように、bashの設定ファ...
--実行します。
$ java TestSearch2
---TestSearch1.java よりも詳しい情報を取り出すことができ...
---最新記事のURL一覧が、[[testSearch2_url.txt:http://show...
***HTMLパーサを使って、各記事を解析する [#r6e62c03]
-上で実行したように、TestSearch2.java によって、[[宮澤の...
-続いて、記事のHTMLを解析して、記事本文やその他の情報を取...
-HTMLパーサをインストールします。
--参考:[[HTMP Parser:http://www.mlab.im.dendai.ac.jp/~ya...
--[[ここ:http://htmlparser.sourceforge.net/]] から Downlo...
---ウイルス対策ソフト avast! を使っている場合、インストー...
--lib フォルダ内の htmlparser.jar のみ使用します(クラス...
CLASSPATH=$CLASSPATH:/home/m-kouki/mysearch/htmlparser.jar
export CLASSPATH
-HTMLを解析する
--[[HTML Parser:http://www.mlab.im.dendai.ac.jp/~yamada/i...
-'''[[TestSearch3.java:http://shower.human.waseda.ac.jp/~...
--上で作った testSearch2_url.txt を読み込み、書かれたURL...
--このプログラムのディレクトリ直下に testSearch3 ディレク...
--【注意】改行記号、スペース、パーサで取り除けなかったタ...
***上記処理の自動化 [#o0e65126]
-''&color(red){発展課題1};'' TestSearch2.java ~ TestSear...
--例えば、http://shower.human.waseda.ac.jp/~m-kouki/blog/...
$ java TestSearchEx http://shower.human.waseda.ac.jp/~m-...
--'''[[解答例:http://shower.human.waseda.ac.jp/~m-kouki/p...
-''&color(red){発展課題2};'' 研究室の各人のブログのRSSのU...
--パスワード付きのURLについて、[[URLStreamHandler (Java 2...
--難しいようなら、手動でパスワードを入力して XML ファイル...
**MySQLデータベース にデータを格納する [#j4bb0924]
-ここまでのプログラムでは、取得したブログ情報を表示したり...
***データベースを設計する [#s7199b11]
-MySQL は[[リレーショナルデータベース:http://ash.jp/db/rd...
-ここでは、ユーザ名「mkouki」、データベース名「mkouki_Tes...
-RSSテーブル mysearch_rss の構造
|BGCOLOR(white):RSSのアドレスのID |BGCOLOR(white):RSSのア...
|rss_id|rss_url|
-エントリーテーブル mysearch_entry の構造
|BGCOLOR(white):エントリーのID |BGCOLOR(white):エントリー...
|entry_id|entry_title|entry_url|entry_type|entry_indexing|
--各エントリーの本文は、URLからその都度取りに行く仕様にし...
--エントリーの属性は、とりあえず「記事0、書類1、プログラ...
--インデクシング(記事テキストから重要な情報のみを抽出し...
***データベースを作る [#x27e9680]
-以下は shower もしくは shinzan で行ってください。
-&color(red){''【注意】'' 初めて使う場合は、[[MySQLのユー...
--自分で設定することもできます。[[MySQLの設定:http://shin...
-はじめに、MySQLを起動します。
$ mysql -u ユーザー名 -p
(希望したパスワード)
-MySQLの画面になりますので、以下を入力します。
use (希望したデータベース名); # データベースの使用宣言
--「Database changed」と出たら成功です。
-テーブルを作成します。
CREATE TABLE mysearch_rss( rss_id int auto_increment,
rss_url text character set utf8, index(rss_id) );
CREATE TABLE mysearch_entry( entry_id int auto_increment,
entry_title text character set utf8,
entry_url text character set utf8,
entry_type int, entry_indexing int, index(entry_id) );
show tables;
--以下のように出たら、成功です。
+---------------------------------+
| Tables_in_mkouki_TestBlogSearch |
+---------------------------------+
| mysearch_entry |
| mysearch_rss |
+---------------------------------+
2 rows in set (0.00 sec)
---rss_id カラム、rss_url カラムを持つテーブル mysearch_r...
---ここでは、カラム rss_id と entry_id は[[オートインクリ...
--mysearch_rss テーブルにデータを追加してみましょう。
INSERT INTO mysearch_rss(rss_url) VALUE('http://shower.h...
-テーブルの中身を確認するには
SELECT * from mysearch_rss;
--以下のように出たら、成功です。
+--------+----------------------------------------------...
| rss_id | rss_url ...
+--------+----------------------------------------------...
| 1 | http://shower.human.waseda.ac.jp/~m-kouki/blo...
+--------+----------------------------------------------...
1 row in set (0.00 sec)
--mysearch_entry テーブルにデータを追加してみましょう。
INSERT INTO mysearch_entry(entry_title, entry_url, entry...
VALUE('Miyazawa Kouki',
'http://shower.human.waseda.ac.jp/~m-kouki/',
0, 0);
--特定のカラムの中身を確認するには
SELECT rss_url from mysearch_rss limit 10;
# mysearch_rss テーブルの rss_url カラムの中身を 10個だ...
--ついでに、テーブルを消すには、
DROP table (消したいテーブルの名前)
***Javaからデータベースにデータを入れる [#m03d723f]
-続いて、Java から MySQLを呼び出します。
-[[JavaでHello World JDBC(MySQL)編:http://www.hellohiro....
--[[MySQL Downloads:http://dev.mysql.com/downloads/]] か...
--クラスパスを通しておきます。
CLASSPATH=$CLASSPATH:mysql-connector-java-5.1.7/mysql-co...
export CLASSPATH
-テストプログラムを実行してみます。上記サイトと [[MySQL ...
-'''[[TestMySQL1.java:http://shower.human.waseda.ac.jp/~m...
--ユーザ名、データベース名、パスワードを書き換えて実行し...
---&color(red){パスワードをソース中に直書きするため、扱い...
--実行は以下のようにします。
java TestMySQL1 test_title test_url 0 0
---上手くいけば、下記のように、mysearch_entryテーブルにデ...
INPUT : タイトル URL 属性 インデックス ← 引数で指定...
INSERT INTO mysearch_entry
(entry_title, entry_url, entry_type, entry_indexing) VA...
ID タイトル URL 属性 インデックス ← データベー...
-''&color(red){発展課題3};'' RSSフィードの URL から、各...
***Javaでデータベースからデータを取り出す [#ub8251d0]
-'''[[TestMySQL2.java:http://shower.human.waseda.ac.jp/~m...
--実行は以下のようにします。
java TestMySQL2
---mysearch_entryテーブルに格納されている entry_id と ent...
**実装 [#f1948460]
-応用編として、&pgid(,ブログ検索システム); に、宮澤のブロ...
-ぜひ、オリジナルのシステムに挑戦してみましょう。
終了行:
#access
#analog
※以下は内部限定公開のドキュメントが多いです。ご不便おかけ...
*RSSを使ったブログ・Wikiの解析(ブログ検索システムの開発...
***目次 [#da57fbe5]
#contents
***目的 [#ac36f0dd]
-ブログやWikiの更新情報、記事テキストの本文、リンクなどを...
-[[MySQLデータベース:http://www.atmarkit.co.jp/flinux/ind...
-ブログの記事テキストを、さまざまな自然言語処理の技術を使...
-Webアプリケーション(検索エンジン)として実装しましょう。
**ブログの情報を取得する [#id73b930]
-ここでは、菊池研個人ブログのテキストを収集して、解析して...
***RSSを取得する [#befe7384]
-参考
--[[RSS:http://ja.wikipedia.org/wiki/RSS]]
--[[Blog情報一覧(菊池研wiki):http://shinzan.human.wased...
--[[Six Apart - フィードとは?:http://www.sixapart.jp/abo...
-菊池研のブログ(Movable Type 4.0)のRSSフィードを見るに...
&ref(http://shower.human.waseda.ac.jp/~m-kouki/images/blo...
-[[こんな感じ:http://shower.human.waseda.ac.jp/~m-kouki/b...
--<entry> ~ </entry> が一つのエントリー
---<title> ~ </title> がタイトルで、
---<link ... href= " ~ " /> がURLで、
---<![CDATA[ ~ ]]> が本文(ひとつのエントリーに複数存在...
-RSSを取得する
--[[JavaでHello World URL編:http://www.hellohiro.com/url....
--TestSearch1.java
#geshi(java){{
import java.net.*;
import java.io.*;
public class TestSearch1 {
public static void main(String[] args) {
そのままなので省略
}
}
}}
---ここではとりあえず、[[宮澤のブログ:http://shower.human...
---文字化け対処として、インプットストリームの部分を以下に...
#geshi(java){{
// 入力ストリームを生成
BufferedReader in = new BufferedReader(
new InputStreamReader(
helloURL.openStream(), "UTF8"));
}}
---プログラムを実行して、RSSのXML文書が表示されることを確...
***RSSパーサを使って、RSSを解析する [#r6e62c03]
-上で確認してもらったように、RSSのXML文書の中には、ブログ...
-ここでは、Java用XMLパーサ、[[Informa:http://informa.sour...
--別の方法として、perl用のRSSパーサ [[XML::FeedPP:http:...
-Informa をダウンロード
--[[ここ:http://informa.sourceforge.net/]] から Downloads...
--解凍してできる informa-0.7.0-alpha2 直下の informa.jar ...
---下記のプログラムで使うのは、特に informa.jar lib/comm...
-Informa.jar を置いたディレクトリの中に、以下のJavaプログ...
--参考 : [[Informa で RSS フィードを変更してみる:http://...
--'''[[TestSearch2.java:http://shower.human.waseda.ac.jp/...
-コンパイルと実行
--上記のプログラムのある場所(ターミナルもしくはLinuxサー...
$ CLASSPATH=$CLASSPATH:informa.jar
$ CLASSPATH=$CLASSPATH:./lib/commons-logging.jar
$ CLASSPATH=$CLASSPATH:./lib/jdom.jar
$ export CLASSPATH
$ javac TestSearch2.java
---参考 : [[パスとクラスパス:http://shower.human.waseda....
---毎回クラスパスを宣言しないですむように、bashの設定ファ...
--実行します。
$ java TestSearch2
---TestSearch1.java よりも詳しい情報を取り出すことができ...
---最新記事のURL一覧が、[[testSearch2_url.txt:http://show...
***HTMLパーサを使って、各記事を解析する [#r6e62c03]
-上で実行したように、TestSearch2.java によって、[[宮澤の...
-続いて、記事のHTMLを解析して、記事本文やその他の情報を取...
-HTMLパーサをインストールします。
--参考:[[HTMP Parser:http://www.mlab.im.dendai.ac.jp/~ya...
--[[ここ:http://htmlparser.sourceforge.net/]] から Downlo...
---ウイルス対策ソフト avast! を使っている場合、インストー...
--lib フォルダ内の htmlparser.jar のみ使用します(クラス...
CLASSPATH=$CLASSPATH:/home/m-kouki/mysearch/htmlparser.jar
export CLASSPATH
-HTMLを解析する
--[[HTML Parser:http://www.mlab.im.dendai.ac.jp/~yamada/i...
-'''[[TestSearch3.java:http://shower.human.waseda.ac.jp/~...
--上で作った testSearch2_url.txt を読み込み、書かれたURL...
--このプログラムのディレクトリ直下に testSearch3 ディレク...
--【注意】改行記号、スペース、パーサで取り除けなかったタ...
***上記処理の自動化 [#o0e65126]
-''&color(red){発展課題1};'' TestSearch2.java ~ TestSear...
--例えば、http://shower.human.waseda.ac.jp/~m-kouki/blog/...
$ java TestSearchEx http://shower.human.waseda.ac.jp/~m-...
--'''[[解答例:http://shower.human.waseda.ac.jp/~m-kouki/p...
-''&color(red){発展課題2};'' 研究室の各人のブログのRSSのU...
--パスワード付きのURLについて、[[URLStreamHandler (Java 2...
--難しいようなら、手動でパスワードを入力して XML ファイル...
**MySQLデータベース にデータを格納する [#j4bb0924]
-ここまでのプログラムでは、取得したブログ情報を表示したり...
***データベースを設計する [#s7199b11]
-MySQL は[[リレーショナルデータベース:http://ash.jp/db/rd...
-ここでは、ユーザ名「mkouki」、データベース名「mkouki_Tes...
-RSSテーブル mysearch_rss の構造
|BGCOLOR(white):RSSのアドレスのID |BGCOLOR(white):RSSのア...
|rss_id|rss_url|
-エントリーテーブル mysearch_entry の構造
|BGCOLOR(white):エントリーのID |BGCOLOR(white):エントリー...
|entry_id|entry_title|entry_url|entry_type|entry_indexing|
--各エントリーの本文は、URLからその都度取りに行く仕様にし...
--エントリーの属性は、とりあえず「記事0、書類1、プログラ...
--インデクシング(記事テキストから重要な情報のみを抽出し...
***データベースを作る [#x27e9680]
-以下は shower もしくは shinzan で行ってください。
-&color(red){''【注意】'' 初めて使う場合は、[[MySQLのユー...
--自分で設定することもできます。[[MySQLの設定:http://shin...
-はじめに、MySQLを起動します。
$ mysql -u ユーザー名 -p
(希望したパスワード)
-MySQLの画面になりますので、以下を入力します。
use (希望したデータベース名); # データベースの使用宣言
--「Database changed」と出たら成功です。
-テーブルを作成します。
CREATE TABLE mysearch_rss( rss_id int auto_increment,
rss_url text character set utf8, index(rss_id) );
CREATE TABLE mysearch_entry( entry_id int auto_increment,
entry_title text character set utf8,
entry_url text character set utf8,
entry_type int, entry_indexing int, index(entry_id) );
show tables;
--以下のように出たら、成功です。
+---------------------------------+
| Tables_in_mkouki_TestBlogSearch |
+---------------------------------+
| mysearch_entry |
| mysearch_rss |
+---------------------------------+
2 rows in set (0.00 sec)
---rss_id カラム、rss_url カラムを持つテーブル mysearch_r...
---ここでは、カラム rss_id と entry_id は[[オートインクリ...
--mysearch_rss テーブルにデータを追加してみましょう。
INSERT INTO mysearch_rss(rss_url) VALUE('http://shower.h...
-テーブルの中身を確認するには
SELECT * from mysearch_rss;
--以下のように出たら、成功です。
+--------+----------------------------------------------...
| rss_id | rss_url ...
+--------+----------------------------------------------...
| 1 | http://shower.human.waseda.ac.jp/~m-kouki/blo...
+--------+----------------------------------------------...
1 row in set (0.00 sec)
--mysearch_entry テーブルにデータを追加してみましょう。
INSERT INTO mysearch_entry(entry_title, entry_url, entry...
VALUE('Miyazawa Kouki',
'http://shower.human.waseda.ac.jp/~m-kouki/',
0, 0);
--特定のカラムの中身を確認するには
SELECT rss_url from mysearch_rss limit 10;
# mysearch_rss テーブルの rss_url カラムの中身を 10個だ...
--ついでに、テーブルを消すには、
DROP table (消したいテーブルの名前)
***Javaからデータベースにデータを入れる [#m03d723f]
-続いて、Java から MySQLを呼び出します。
-[[JavaでHello World JDBC(MySQL)編:http://www.hellohiro....
--[[MySQL Downloads:http://dev.mysql.com/downloads/]] か...
--クラスパスを通しておきます。
CLASSPATH=$CLASSPATH:mysql-connector-java-5.1.7/mysql-co...
export CLASSPATH
-テストプログラムを実行してみます。上記サイトと [[MySQL ...
-'''[[TestMySQL1.java:http://shower.human.waseda.ac.jp/~m...
--ユーザ名、データベース名、パスワードを書き換えて実行し...
---&color(red){パスワードをソース中に直書きするため、扱い...
--実行は以下のようにします。
java TestMySQL1 test_title test_url 0 0
---上手くいけば、下記のように、mysearch_entryテーブルにデ...
INPUT : タイトル URL 属性 インデックス ← 引数で指定...
INSERT INTO mysearch_entry
(entry_title, entry_url, entry_type, entry_indexing) VA...
ID タイトル URL 属性 インデックス ← データベー...
-''&color(red){発展課題3};'' RSSフィードの URL から、各...
***Javaでデータベースからデータを取り出す [#ub8251d0]
-'''[[TestMySQL2.java:http://shower.human.waseda.ac.jp/~m...
--実行は以下のようにします。
java TestMySQL2
---mysearch_entryテーブルに格納されている entry_id と ent...
**実装 [#f1948460]
-応用編として、&pgid(,ブログ検索システム); に、宮澤のブロ...
-ぜひ、オリジナルのシステムに挑戦してみましょう。
ページ名:
既存のページ名で編集する