パソコン・インターネット

テキスト処理の道具達(4):秀丸の「grepして置換」を使ってみる

前回のGrep結果ではファイル名と位置までは分かりますが、その他の情報が何も分かりません。もう少し何とかならないかと思って工夫してみました。

前回も記載した通り、Livedoorのブログでは、コメント投稿者の載っている行はHTML中で以下のように記述されているようです(分かりやすさのためにタブ記号を<tab>で置き換えました)。
<tab><tab><div class="comments-post">Posted by 月影兵庫
at 2008年08月24日 09:20</div>

コメント投稿者の次の行にある日付と時刻の情報も目次に表示させてみる事にします。
★ご注意★今回の処理では、元のHTMLファイルを書き換えてしまいます。元のファイルを壊したくない場合には、フォルダごと別の所にコピーして、コピーしたファイル群に対して処理を行ってください。

それでは、秀丸エディタの[検索]-[grepして置換]機能を使って、上で示した2行を1行にまとめてしまいます。
<tab><tab><div class="comments-post">Posted by 月影兵庫
at 2008年08月24日 09:20</div>

<tab><tab><div class="comments-post">Posted by 月影兵庫// at 2008年08月24日 09:20</div>
に置換します。つまり、改行を消してしまう訳です。//は処理した事が分かり易いように適当に入れた文字です。

[検索]-[grepして置換]で以下のように指定します。
★ご注意★元のHTMLファイルを書き換える処理ですのでご注意を。

検索する文字列(S): ^(.*<div class="comments-post">Posted by.*)\n(.*at .*)$
置換する文字列(G): \1//\2
検索するファイル(N): *.html
検索するフォルダ(D): d:\work\archives
正規表現(R)にチェック

ここで、\1は検索条件式の最初の括弧で囲まれた部分を、\2は二番目の括弧で囲まれた部分への置換を表します。
(注) 検索する文字列は「^(\t\t<div class="comments-post">Posted by.*)\n(.*at .*)$」と\tを使っても良いはずです。検索条件を微妙に変えてますが特に意図はありません。試行錯誤していたので、少し違うパターンでやってしまいました。

これを実行すると収集したファイル数によりますが、2000ファイル以上、9万箇所以上の置換が行われます。PCによっては10分以上かかるかもしれません。
私の場合は、処理の途中に以下の箇所で変換できない文字コードがある旨のエラーが出ました。これらについては「無視する」で処理を継続し、後で各ファイルの文字化け部分を手作業で削除し、再度同じ条件で[grepして置換]を実行しました。
(変換済の行は検索条件に引っかからないので、エラーで無視したファイルの該当箇所だけが置換されます)

d:\work\archives\51158737.html(400): 
d:\work\archives\51176495.html(845):
d:\work\archives\51176495.html(864):
d:\work\archives\51176495.html(875):
d:\work\archives\51284958.html(305):
d:\work\archives\51501888.html(196):
d:\work\archives\51709738.html(513):
d:\work\archives\51786956.html(1538):
d:\work\archives\51786956.html(1539):
d:\work\archives\51839541.html(598):
d:\work\archives\51852731.html(1009):
d:\work\archives\52013100.html(520):
d:\work\archives\52024181.html(428):
d:\work\archives\52055292.html(1043):
d:\work\archives\52067688.html(618):

これで、以下のような投稿日付・時刻入りの目次ができました。

51866628.html(627):         <div class="comments-post">Posted by 月影兵庫// at 2008年03月29日 17:09</div>
51893563.html(256):         <div class="comments-post">Posted by 月影兵庫// at 2008年04月24日 19:27</div>
51894623.html(1751):         <div class="comments-post">Posted by 月影兵庫// at 2008年04月26日 20:19</div>
・・・

このままでは見にくいので、以下の置換を行いました。

(1) 「\t\t.*Posted by 」を削除(空に置換)
(2) 「</div>$」を削除(空に置換)
(3) 「// 」を「\t」に置換
(4) 「^」を「d:\\work\\archives\\」に置換

これで以下のように整形できました。ちなみに、このHTMLは10月23日に採取したので、10月22日までのコメントが一覧されています。

d:\work\archives\51866628.html(627): 月影兵庫    at 2008年03月29日 17:09
d:\work\archives\51893563.html(256): 月影兵庫    at 2008年04月24日 19:27
d:\work\archives\51894623.html(1751): 月影兵庫    at 2008年04月26日 20:19
d:\work\archives\52013391.html(649): 月影兵庫    at 2008年08月23日 22:13
d:\work\archives\52013391.html(1564): 月影兵庫    at 2008年08月24日 08:53
d:\work\archives\52013391.html(1601): 月影兵庫    at 2008年08月24日 09:20
d:\work\archives\52013391.html(1774): 月影兵庫    at 2008年08月24日 21:58
d:\work\archives\52013391.html(1809): 月影兵庫    at 2008年08月24日 23:09
d:\work\archives\52016372.html(481): 月影兵庫    at 2008年08月26日 22:27
d:\work\archives\52016372.html(503): 月影兵庫    at 2008年08月26日 22:46
d:\work\archives\52016372.html(987): 月影兵庫    at 2008年08月27日 07:55
d:\work\archives\52016372.html(1045): 月影兵庫    at 2008年08月28日 00:08
d:\work\archives\52017259.html(1758): 月影兵庫    at 2008年08月28日 21:39
d:\work\archives\52017259.html(2054): 月影兵庫    at 2008年08月29日 22:04
d:\work\archives\52017259.html(2073): 月影兵庫    at 2008年08月29日 22:29
d:\work\archives\52017259.html(2160): 月影兵庫    at 2008年08月30日 21:30
d:\work\archives\52019228.html(558): 月影兵庫    at 2008年08月29日 23:34
d:\work\archives\52019228.html(589): 月影兵庫    at 2008年08月29日 23:56
d:\work\archives\52019228.html(616): 月影兵庫    at 2008年08月30日 00:13
d:\work\archives\52019228.html(627): 月影兵庫    at 2008年08月30日 00:19
d:\work\archives\52019228.html(1317): 月影兵庫    at 2008年08月30日 22:44
d:\work\archives\52020290.html(779): 月影兵庫    at 2008年08月30日 23:03
d:\work\archives\52021889.html(842): 月影兵庫    at 2008年09月01日 21:32
d:\work\archives\52022898.html(303): 月影兵庫    at 2008年09月02日 07:30
d:\work\archives\52023299.html(991): 月影兵庫    at 2008年09月02日 23:16
d:\work\archives\52023879.html(2993): 月影兵庫    at 2008年09月03日 22:05
d:\work\archives\52025809.html(570): 月影兵庫    at 2008年09月05日 23:09
d:\work\archives\52026128.html(2760): 月影兵庫    at 2008年09月05日 22:29
d:\work\archives\52029941.html(494): 月影兵庫    at 2008年09月10日 07:50
d:\work\archives\52030834.html(2422): 月影兵庫    at 2008年09月10日 23:04
d:\work\archives\52031818.html(1106): 月影兵庫    at 2008年09月11日 22:49
d:\work\archives\52032786.html(6370): 月影兵庫    at 2008年09月13日 22:36
d:\work\archives\52036225.html(564): 月影兵庫    at 2008年09月16日 20:47
d:\work\archives\52038367.html(1392): 月影兵庫    at 2008年09月19日 00:23
d:\work\archives\52038367.html(3994): 月影兵庫    at 2008年09月19日 23:44
d:\work\archives\52038367.html(4164): 月影兵庫    at 2008年09月20日 00:09
d:\work\archives\52038946.html(732): 月影兵庫    at 2008年09月19日 23:10
d:\work\archives\52039251.html(514): 月影兵庫    at 2008年09月19日 22:33
d:\work\archives\52040146.html(1486): 月影兵庫    at 2008年09月20日 23:19
d:\work\archives\52042472.html(1258): 月影兵庫    at 2008年09月23日 23:28
d:\work\archives\52043433.html(1890): 月影兵庫    at 2008年09月25日 00:19
d:\work\archives\52043433.html(2819): 月影兵庫    at 2008年09月25日 23:52
d:\work\archives\52045443.html(2224): 月影兵庫    at 2008年09月27日 08:02
d:\work\archives\52045443.html(2273): 月影兵庫    at 2008年09月27日 08:09
d:\work\archives\52045443.html(3686): 月影兵庫    at 2008年09月27日 15:53
d:\work\archives\52045443.html(4002): 月影兵庫    at 2008年09月27日 20:49
d:\work\archives\52053005.html(3799): 月影兵庫    at 2008年10月06日 00:13
d:\work\archives\52054282.html(902): 月影兵庫    at 2008年10月05日 23:00
d:\work\archives\52055292.html(1056): 月影兵庫    at 2008年10月06日 23:55
d:\work\archives\52059638.html(1230): 月影兵庫    at 2008年10月12日 00:33
d:\work\archives\52062503.html(880): 月影兵庫    at 2008年10月15日 06:38
d:\work\archives\52062503.html(1437): 月影兵庫    at 2008年10月15日 23:22
d:\work\archives\52068682.html(886): 月影兵庫    at 2008年10月22日 07:54

| | コメント (0) | トラックバック (0)

テキスト処理の道具達(3):Grep結果から元文書にジャンプ

前回の記事で、秀丸エディタのGrep機能を使って、コメント投稿者名でコメントを抜き出してみました。もう少し条件式を工夫すると、より正確に抜き出せるようになります。

Livedoorのブログでは、コメント投稿者の載っている行はHTML中で以下のように記述されているようです(分かりやすさのためにタブ記号を<tab>で置き換えました)。
<tab><tab><div class="comments-post">Posted by 月影兵庫
at 2008年08月24日 09:20</div>

この上の行にマッチする正規表現は以下のように書けます。
^\t\t<div class="comments-post">Posted by 月影兵庫$

ここで、^は行頭を、\tはタブ記号を、$は行末を表します。

したがって、『日本よ何処へ』のブログから取得したHTMLファイル群が
d:\work\archives
にあるとすると、メニューから[検索]-[grepの実行]を選んで以下のように指定すれば「月影兵庫」がコメント投稿者である行を抜き出せます。

検索する文字列(S): ^\t\t<div class="comments-post">Posted by 月影兵庫$
検索するファイル(N): *.html
検索するフォルダ(D): d:\work\archives
正規表現(R)にチェック

結果は以下のように表示されます。
51866628.html(650):         <div class="comments-post">Posted by <a class="aposted" href="mailto:stargaze730z@hotmail.com">月影兵庫</a>
51866628.html(665):         <div class="comments-post">Posted by 月影兵庫
51893563.html(257):         <div class="comments-post">Posted by 月影兵庫
・・・

この結果画面で、例えば、一行目に秀丸エディタのカーソル(|で示される文字挿入点)を置いてF10キーを押すと、51866628.htmlというファイルが秀丸エディタの別画面で開き、650行目が表示されます。
これは、標準でF10キーに割り当てられている[その他]-[タグジャンプ]の機能です。行頭にある「51866628.html(650): 」がジャンプ先と解釈されています。

つまり、Grep検索するだけで、オリジナルへのジャンプ機能付きの目次が出来上がるという訳です。

この結果を例えば「mokuji.txt」というファイルに保存してみましょう。
そうすると、先ほどのタグジャンプ機能が使えなくなります。HTMLファイルの所在が分からなくなってしまうようです。そこで、ファイルに保存した後でも目次として使えるように、行を加工してみます。
51866628.html(650):

d:\work\archives\51866628.html(650):
に置き換えるのです。

これは、mokuji.txtを開いた状態で、[検索]-[置換]の機能を使います。

検索(S): ^
置換(E): d:\\work\\archives\\
正規表現(R)にチェック

ここで、\\は、正規表現の中で\という文字を表します。
この結果、mokuji.txtは以下のように置換されました。これでタグジャンプ機能も使えるようになります。

d:\work\archives\51866628.html(650):         <div class="comments-post">Posted by <a class="aposted" href="mailto:stargaze730z@hotmail.com">月影兵庫</a>
d:\work\archives\51866628.html(665):         <div class="comments-post">Posted by 月影兵庫
d:\work\archives\51893563.html(257):         <div class="comments-post">Posted by 月影兵庫
・・・

| | コメント (0) | トラックバック (0)

テキスト処理の道具達(2):秀丸でGrep

前回記したような方法でWebサイトからHTMLファイルをPC上に持ってくれば、エディタ等で簡単に検索できます。例えば、秀丸エディタにはGrep検索という機能があり、これを使うと条件に合致する文字列を含む行を複数のファイルから抜き出せます。

『日本よ何処へ』のブログから取得したHTMLファイル群が
c:\temp\archives
にあるとすると、メニューから[検索]-[grepの実行]を選んで以下のように指定すれば話題の「月影兵庫」というキーワードを含む行を抜き出せます。
検索する文字列(S): 月影兵庫
検索するファイル(N): *.html
検索するフォルダ(D): c:\temp\archives

結果が多すぎると思ったら以下のような行が大量に含まれていました(見やすくするため改行は補いました)。

2005-06.html(1161): <div class="sidebody">
<a href="http://blog.livedoor.jp/the_radical_right/archives/52078565.html#comments">
田母神俊雄空幕長論文②</a> (月影兵庫)</div>

これは各ページのサイドに表示される情報だと思われるので、今度は、[検索]-[置換]で以下のように指定して、<div class="sidebody">を含む行を削除します。
検索(S): ^.*<div class="sidebody">.*\n
置換(E):     (空欄にしておく)
正規表現(R)にチェック

ここで、「検索」に指定した^は行頭を、\nは改行文字を示します。また、.*は任意の文字列にマッチします。

これでだいぶすっきりしました。
この結果から更に以下から始まる行(合計6行)を手で削除しました。
2008-08.html
cat_

結果は以下のようになります。
<div class="comments-post">が入っている行がコメントの投稿者を表す行だと思われます。それ以外は、おそらくコメント内での引用でしょう。Grepだけでも結構面白いですよね。

51866628.html(650):   <div class="comments-post">Posted by <a class="aposted" href="mailto:stargaze730z@hotmail.com">月影兵庫</a>
51866628.html(665):   <div class="comments-post">Posted by 月影兵庫
51893563.html(257):   <div class="comments-post">Posted by 月影兵庫
51894623.html(1902):   <div class="comments-post">Posted by 月影兵庫
52013391.html(688):   <div class="comments-post">Posted by 月影兵庫
52013391.html(729): 月影兵庫さま<br>
52013391.html(1646):   <div class="comments-post">Posted by 月影兵庫
52013391.html(1686):   <div class="comments-post">Posted by 月影兵庫
52013391.html(1759): &gt;Posted by 月影兵庫 at 2008年08月24日 09:20<br>
52013391.html(1872):   <div class="comments-post">Posted by 月影兵庫
52013391.html(1911):   <div class="comments-post">Posted by 月影兵庫
52016372.html(506):   <div class="comments-post">Posted by 月影兵庫
52016372.html(530):   <div class="comments-post">Posted by 月影兵庫
52016372.html(551): >月影兵庫さん<br>
52016372.html(745): 月影兵庫さんの認識に同感です。<br>
52016372.html(1047): &gt; 月影兵庫さんの認識に同感です。<br>
52016372.html(1055):   <div class="comments-post">Posted by 月影兵庫
52016372.html(1085): 六さん、月影兵庫さん、同じ認識です。<br>
52016372.html(1120):   <div class="comments-post">Posted by 月影兵庫
52017259.html(1856):   <div class="comments-post">Posted by 月影兵庫
52017259.html(1992): Posted by 月影兵庫 at 2008年08月28日 21:39<br>
52017259.html(2169):   <div class="comments-post">Posted by 月影兵庫
52017259.html(2174): &gt;&gt; Posted by 月影兵庫 at 2008年08月29日 22:04<br>
52017259.html(2189):   <div class="comments-post">Posted by 月影兵庫
52017259.html(2280):   <div class="comments-post">Posted by 月影兵庫
52019228.html(579):   <div class="comments-post">Posted by 月影兵庫
52019228.html(612):   <div class="comments-post">Posted by 月影兵庫
52019228.html(641):   <div class="comments-post">Posted by 月影兵庫
52019228.html(654):   <div class="comments-post">Posted by 月影兵庫
52019228.html(1378):   <div class="comments-post">Posted by 月影兵庫
52020290.html(114): <P><FONT face="MS ゴシック"><STRONG>今回の「訴え」は、事件捜査自体・裁判自体を根本的に左右するす可能性を有するもので、「議席譲渡問題」とは本質的に別問題。<BR><BR></STRONG><EM>Posted by 月影兵庫 at 2008年08月28日 21:39<BR></EM><BR><STRONG><BR>&gt;&gt; Posted by xenon at 2008年08月29日 03:00<BR>&gt; 本筋とは言いますが<BR>「自殺する理由がない」として話を進めている以上、「理由」の可能性として考えられるもの1つ1つを検証していかねば「自殺する理由がない」と言い切ることはできないのではないでしょうか?</STRONG></FONT></P>
52020290.html(119): <P><FONT face="MS ゴシック"><STRONG>それでも、瑣末な議論としても・・・これまで、「捜査なり、公判なりで問題となったことも無い話」だろ。<BR><BR> これまで散々主張してきた「万引き説がダメになった」から「(おかしな)W不倫」だとか、「座席譲渡問題」だとか・・・創価学会擁護がわが騒ぎ立てているだけのことに過ぎない。<BR><BR> あなたも仰っているように、「本人自身の問題でも無い」のにだ。・・・せめて「それを苦にしていたという証拠でもあれば」まだ、話にもなろうが、そんな話は聞いたことも無い。<BR><BR></STRONG><EM>Posted by 月影兵庫 at 2008年08月29日 22:04</EM><BR><BR><STRONG><BR><BR>&gt;&gt; Posted by 月影兵庫 at 2008年08月29日 22:04<BR><BR></STRONG></FONT><FONT face="MS ゴシック"><STRONG>xenonさんへ、捕捉です。(前回の訂正、座席譲渡→議席譲渡)</STRONG></FONT></P>
52020290.html(123): <P><FONT size=4><FONT size=3><FONT face="MS ゴシック"><EM>Posted by 月影兵庫 at 2008年08月29日 22:29</EM></FONT></FONT></FONT></P>
52020290.html(820):   <div class="comments-post">Posted by 月影兵庫
52020290.html(863): Posted by 月影兵庫 at 2008年08月30日 23:03<br>
52020290.html(892): Posted by 月影兵庫 at 2008年08月30日 23:03<br>
52020290.html(1181): 「この「月影兵庫」というやつ、ひょっとして矢野じゃねえかという気がだんだんしてきました。」と。<br>
52021889.html(886):   <div class="comments-post">Posted by 月影兵庫
52022898.html(314):   <div class="comments-post">Posted by 月影兵庫
52023299.html(1046):   <div class="comments-post">Posted by 月影兵庫
52023879.html(3191):   <div class="comments-post">Posted by 月影兵庫
52025809.html(599):   <div class="comments-post">Posted by 月影兵庫
52026128.html(2946):   <div class="comments-post">Posted by 月影兵庫
52027254.html(11543): ところで男塾塾生とか月影兵庫とかは何処へいったんだ?<br>
52027254.html(11577): >ところで男塾塾生とか月影兵庫とかは何処へいったんだ?<br>
52029941.html(521):   <div class="comments-post">Posted by 月影兵庫
52030834.html(2604):   <div class="comments-post">Posted by 月影兵庫
52031818.html(1162):   <div class="comments-post">Posted by 月影兵庫
52032786.html(6861):   <div class="comments-post">Posted by 月影兵庫
52032786.html(6885): &gt;Posted by 月影兵庫 at 2008年09月13日 22:36<br>
52032786.html(6894): &gt;Posted by 月影兵庫 at 2008年09月13日 22:36<br>
52036225.html(596):   <div class="comments-post">Posted by 月影兵庫
52038367.html(1495):   <div class="comments-post">Posted by 月影兵庫
52038367.html(4307): &gt;&gt; Posted by 月影兵庫 at 2008年09月19日 00:23<br>
52038367.html(4320):   <div class="comments-post">Posted by 月影兵庫
52038367.html(4507):   <div class="comments-post">Posted by 月影兵庫
52038367.html(4570): 月影兵庫さんの文才には脱帽です。<br>
52038946.html(780):   <div class="comments-post">Posted by 月影兵庫
52039251.html(540):   <div class="comments-post">Posted by 月影兵庫
52040146.html(1605):   <div class="comments-post">Posted by 月影兵庫
52040146.html(1814): &gt;月影兵庫<br>
52042472.html(1362):   <div class="comments-post">Posted by 月影兵庫
52043433.html(2035):   <div class="comments-post">Posted by 月影兵庫
52043433.html(2060): 「月影兵庫」さんのコメント(09月25日 00:19)を拝読いたしまして、一言。この問題は国民世論の高まりがなければ「再捜査」も無意味な結果になる内容を含んでいます。例えば前にも投稿させていただきましたのは「新人力士暴行致死事件」の例などは、再三にわたって「稽古中の事故」であるといわれ、警察もそのように処理しました。遺族には、「こちらで火葬と葬儀を済まさせていただきたい」と部屋側から申し入れがあったものの遺族側が拒否。実家に帰されたその無残な遺体を見た遺族は大学に解剖を依頼し、結果、暴行致死が指摘され報道もこの一連の内容を追求し始め、警察も「しぶしぶ」暴行致死であることを認め、これを「事件化」し親方と先輩力士を暴行致死容疑で逮捕、家宅捜査に入るという出来事がありました。この事件でもキーワードとなったのは「国民世論の高まり」です。相撲批判報道がニュースの一翼を担うようになり、国民世論がそれに呼応したことが警察を動かしたという典型的な例なのです(実は世論の高まりで公的機関がしぶしぶ動くというのはよくあることですよね?)。<br>
52043433.html(3021): &gt; 「月影兵庫」さんのコメント(09月25日 00:19)を拝読いたしまして、一言。この問題は国民世論の高まりがなければ「再捜査」も無意味な結果になる内容を含んでいます。例えば前にも投稿させていただきましたのは「新人力士暴行致死事件」の例などは・・・<br>
52043433.html(3033):   <div class="comments-post">Posted by 月影兵庫
52045443.html(2383):   <div class="comments-post">Posted by 月影兵庫
52045443.html(2436):   <div class="comments-post">Posted by 月影兵庫
52045443.html(3952):   <div class="comments-post">Posted by 月影兵庫
52045443.html(4294):   <div class="comments-post">Posted by 月影兵庫
52045443.html(4453): 「一日本人」さん、「月影兵庫」さん、ご賛同をたまわり誠にありがとうございます。<br>
52045443.html(4457): 「月影兵庫」さん、誠にありがとうございます。「但し費用がかさみそう」というご指摘、確かに検討課題にはなりましょうが問いかけられている合理的な疑問やその他の疑惑がもし事実であるのならば事はきわめて重大です。この趣旨を真摯に訴えられたならば、両氏にご協力いただけるのも決して実現不可能なことではないように思います。「マスコミに出られる方ならば、立場が苦しいだろうし、大妨害も必至だろう」というご指摘、北芝健氏はテレビの中でもかなり踏み込んだコメントをされることは有名で、例えば「世田谷一家4人殺人事件」の犯人を「とある某有名宗教団体(創価ではないようです)による犯行」と発言されるなど、その手の「タブー」はあまり関係なさそうです。上野正彦氏も特段メディアに特化したお仕事をされている方ではないようですので、やはりその手の「タブー」とは無縁の方ではないかと・・・まずは何事もご相談からでしょう。<br>
52053005.html(4090):   <div class="comments-post">Posted by 月影兵庫
52053005.html(4095): &gt;Posted by 月影兵庫 at 2008年10月06日 00:13<br>
52054282.html(948):   <div class="comments-post">Posted by 月影兵庫
52055292.html(1130):   <div class="comments-post">Posted by 月影兵庫
52059638.html(1325):   <div class="comments-post">Posted by 月影兵庫
52059638.html(1369): 月影兵庫氏は実際にご自分のサイトやリアルなどで、宇留嶋氏を「○○○○御用ライター」と呼んだことがあるってことだな<br>
52062503.html(942):   <div class="comments-post">Posted by 月影兵庫
52062503.html(1178): &gt;Posted by 月影兵庫 at 2008年10月15日 06:38<br>
52062503.html(1566):   <div class="comments-post">Posted by 月影兵庫
52062503.html(1618): &gt;Posted by 月影兵庫 at 2008年10月15日 23:22<br>
52068682.html(929):   <div class="comments-post">Posted by 月影兵庫
52074215.html(758):   <div class="comments-post">Posted by 月影兵庫
52074215.html(801): &gt;月影兵庫<br>
52076022.html(754):   <div class="comments-post">Posted by 月影兵庫
52076775.html(2278):   <div class="comments-post">Posted by 月影兵庫
52077807.html(533):   <div class="comments-post">Posted by 月影兵庫
52078565.html(376):   <div class="comments-post">Posted by 月影兵庫
52078565.html(626):   <div class="comments-post">Posted by 月影兵庫
52078565.html(645): 〉月影兵庫さん<br>
52078565.html(1458):   <div class="comments-post">Posted by 月影兵庫

| | コメント (2) | トラックバック (0)

文字レア度と文書レア度(2)

レア度を計算した記事に、松沢さんから貰ったコメントについて書いてみます。
引用は>で示します。

>現状でわかるのは、特別な意図、特別な事情のある文章は別にして、個人の文章は安
>定感があって、どうしても個性が出るらしいってことですね。

ここでは文字の選び方、使い方に着目している訳ですが、それでも個性は出ていると思います。ただ、当たり前かもしれませんが、同じ人でもテーマによって現れる「字彙」(※)は違ってきます。洋蘭の話題を書くとカタカナの出現比率が高くなるのが一例です。
(※)字彙は勝手な造語で字の集合の意です。自慰じゃないよ。じゃがいもとも違います。当たり前か。

>例えば「日本よ何処へ」のコメント全体を母数にした場合、他の人があまり使わない
>語彙を使う人は、それを構成する文字のレア度が高くなるので、同一人物である可能
>性を見いだすことができると思うんだけど、

はい。レア度が高くなると思います。尤も、レア度が高い文書同士が近いという保証はありません。この方法では、ある母体に対する一次元の距離しか測れないので、どっちの向きに遠いかは分からないのです。

>「日本よ何処へ」におけるレア度の低い
>文章を書く人は、特徴のある文字が少ないのだから、同一人物であることを見抜かれ
>る可能性も低くなってしまうのかな。

平凡な文字を使っていて字彙に特徴がないとしても、文字の使用頻度まで考慮すれば特徴は出てくる可能性があると期待してます。ただ、現状は、最終的に文書レア度という一つの数値に丸めてしまっているために、頻度分布の特徴が無視されてしまいます。

この課題の解決策として、文書と文書の間の「距離」を定義して、その距離が近いもの同士をまとめていく方法がありそうです。これは、クラスタ分析と呼ばれる統計手法の適用です。
例えば、文書Aの頻度分布と文書Bの頻度分布を引き算した差を使ってみる案があります。字彙が同じで各文字の出現率も同じ場合に差はゼロとなりますが、字彙が同じでも各文字の出現率に差がある場合には差が現れます。
ただ、こういう事をすると、同じ書き手の文書であっても内容によって距離が遠くなってしまうかもしれません。この辺、全く直感が働かないので、実験を積み重ねる必要がありそうです。いや~遠大な道に踏み込んでしまったかも。

また、以下のような別の観点でのアプローチも考えられます。

  • レア度の評価尺度を文書数ではなく文字数に変える。文書数の評価では、100文書あると100倍くらいの差しかつかないが、文字数の評価では1万倍くらいの差がつきうる(1文書に100文字あれば1万字。この中に1つの文字であれば1万対1になる)。
  • 単一の文字ではなく、2つの文字の繋がりの頻度を評価する。例えば、「2つの文字」を「2つ」「つの」「の文」「文字」という4つの切片に分けて頻度分析する。

グーの根、じゃなかった、グーグルで検索して発見したのですが、同志社大学の金明哲教授のページには統計的なテキスト解析について様々な研究成果が紹介されています。

この中には、泉鏡花と岡本綺堂の作品に表れる「と、」の頻度を評価した話も載っていました。毎日のように新しい発見があり、寝不足な日々が続きます。今日はこの辺でおやすみなさい。

| | コメント (0) | トラックバック (0)

テキスト処理の道具達(1):Webページの収集ツール

私が試みているテキスト解析に使っているプログラムや利用ツールの方も徐々に紹介して行こうと思います。
尤も、ちゃんとしたプログラムや真っ当なスクリプトは書いていませんので、正しさの保証はこれっぽっちもありません。間違った所があればご教示ください。

まずは、対象となるHTMLファイルを集めるツールです。処理する際にいちいちネットワークにアクセスすると、非効率だし対象となるファイルが確定しないので、最初に一群のファイルをPC上に収集してから集計などの処理をしています。

この収集のためにgetHTMLというフリーウェアを使わせて貰ってます。GUIが付いた版もあるようですが、私はコマンドプロンプトから動かす方を使ってます。

例えば、『日本よ何処へ』のHTMLを全部取得するには、コマンドプロンプトから以下のコマンドを入れればOKです。
gethtml.exe "http://blog.livedoor.jp/the_radical_right/"

以下のようなフォルダ構造が自動的に作られ、LivedoorサイトにあるHTMLファイルが粛々と収集されてきます。
\blog.livedoor.jp\the_radical_right\archives

但し、このコマンドの実行には時間が必要です。『日本よ何処へ』の場合はファイル数が多いので小一時間くらいかかるかもしれません。むやみに高速化するとLivedoorサーバに迷惑がかかるので、ある程度の遅延を入れて収集しているのだと思います。

東村山市民新聞もスタティックなWebページから構成されているので以下のコマンドで収集できます。

getHTML.exe "http://www.geocities.jp/higashimurayamasiminsinbun/"

柳原滋雄氏のコラム日記の場合は、少し事情が異なります。

ここのサイトは、CGI-PLANTというサイトで配布されている「切って出し日記」というシステムを使っているらしく、CGIを呼び出さないと文書を見られません。こういうサイトでは、単にスタティックなリンクを辿るだけでは収集がうまく行きません。しかし、getHTMLは色々と賢い機能をサポートしているらしく、このサイトに対しては、getHTMLの"-b"オプションが有効でした。

getHTML.exe -b "http://www.yanagiharashigeo.com/kd_diary/"

但し、収集したHTMLを処理する方法はまだ考えてません。
この辺の話は、「柳原滋雄コラム日記-目次未満 PDF版 東村山編」を作られたTomatotic-jellyさんに先に伝えられれば良かったかもしれません。

| | コメント (1) | トラックバック (0)