2010-07-01から1ヶ月間の記事一覧

ウェブコーパスの一部から形態素 N-gram コーパスを作成しました

追記(2010-09-22):完成版がこちら(N-gram コーパス - 日本語ウェブコーパス 2010)にあります.追記(2010-08-06):文末記号(</S>)を追加したものを作成しました(形態素 N-gram コーパスの修正版 - やた@はてな日記). ダウンロード 頻度が 100 以上の…

ウェブコーパスの形態素頻度

現在手元にあるウェブコーパスの 1 割に相当する約 600 万のウェブページから切り出したテキストについて,形態素の出現頻度を求めてみました. 文数 623,455,629(約 6 億) 形態素数 9,058,967,398(約 90 億) 前処理の内容は某社が作成した N-gram コー…

テキストファイルを行単位でランダム順に並べ替える

概要 コマンド sort にオプション -R(--random-sort)を渡してやると,各行のハッシュ値をキーとする整列になります.でも,ハッシュ値の計算に時間がかかる上に,同じ行は必ず連続して配置されるという癖があるため,使い方には注意が必要です.そこで,こ…

C/C++ におけるデータ入力の速度

100 万行のテキストファイル(test-data)を C/C++ で作成したプログラムで読み込むとき,どのくらいの時間がかかるかを調べた結果です.データ入力がボトルネックになるような状況では,std::fgets(), std::fread(), std::istream::read() を使った方が良さ…

マルチキークイックソート(Multikey Quicksort)のための C++ ヘッダ 改良版

概要 マルチキークイックソート(Multikey Quicksort)は大量の文字列を整列するのに適した整列手法です.例えば,ランダム順になっている URL 集合や Wikipedia のタイトル集合を整列する場合であれば,単純なクイックソートと比べて 1/2 程度の時間で整列…

Unicode の方向制御文字は思いのほかに厄介かも

ウェブコーパスからテキストを切り出して,分かち書きをして,頻度を求めて,…というような処理を試していたところ,テキストに含まれる表示方向を制御する文字(例えばアラビア語で用いる)のおかげで,出力結果の表示があっち向いたりこっち向いたりする(…

形態素解析器(MeCab)の出力データを圧縮するとどのくらいのサイズになるか?

MeCab の出力データを圧縮するとどのくらい小さくなるのかを調べてみました. テキストの圧縮結果 まず,形態素解析する前のテキスト(UTF-8)を圧縮してみたところ,圧縮率(※)は 20 - 30% 程度になりました.やはり,xz の圧縮率は魅力的です.bzip2 は伸…

XZ Utils(liblzma)による圧縮・伸長(C++)

xz の概要 xz(XZ Utils)は lzma(LZMA Utils)の後継となる圧縮形式です.ちょっとした性能テスト(コマンド xz の圧縮率と圧縮速度 - やた@はてな日記,コマンド xz による圧縮・伸長のメモリ消費 - やた@はてな日記)でも分かるように,圧縮にかかるコ…

ICU(C++)を使って Unicode 正規化

文字列を処理するのに Python はとても便利ですが,速度が気になる状況では,やはり C/C++ を使いたいところです.ということで,Unicode 正規化(http://homepage1.nifty.com/nomenclator/unicode/normalization.htm)のために ICU(ICU - International Co…

コマンド xz の圧縮率と圧縮速度

それなりにサイズのあるテキストファイル(335,388,465 bytes,日本語,UTF-8)を gzip, bzip2, xz で圧縮して,圧縮後のサイズ(%)と圧縮時間(秒)を表にしました. 圧縮後のサイズ(%) 圧縮レベル gzip bzip2 xz xz -e 0 - - 34.2 29.6 1 41.4 29.7 33.…

コマンド xz による圧縮・伸長のメモリ消費

xz(XZ Utils)のメモリ消費は lzma(LZMA Utils)よりも大きくなっているようです.新しい PC では問題ないと思いますが,古い PC を使っている場合,-9 を使うのは止めておいた方が良いかもしれません. 圧縮プリセット 圧縮 伸長 0 1.4MB 232KB 1 1.4MB 2…

ウェブページの文字コード(もう少し詳しく)

実際にウェブページで用いられている文字コードについて,もう少し詳しく調べてみました.調べた内容は,HTTP レスポンスヘッダに記述されている charset,本文の先頭にある BOM(Byte Order Mark),XML 宣言()の encoding,META タグ(<meta>)を使って指定さ</meta>…

HTTP レスポンスヘッダの Content-Type に現れる charset

BeautifulSoup の文字コード判定が HTTP レスポンスヘッダを使っていないことに思い至って,50 万件くらいのウェブページから,HTTP レスポンスヘッダの Content-Type に指定されている charset(いわゆる文字コード)を抜き出してみました.結果は以下の通…

ウェブコーパスの作成方法と内容,現状での課題

先月から作成中のウェブコーパス(Amazon EC2 を使ってウェブコーパスを作成中 - やた@はてな日記)について,現状でのまとめです. はじめに 統計的言語処理の研究において,大規模な言語資源(コーパス)はとても貴重なデータです.特に,ウェブコーパス…

ruby タグで表記と読みのペアを抽出(できるかも)

HTML のルビ振り用タグ(<ruby>)は表記と読みのペアを抽出するのに使えそうな気がしたので,約 1000 万ページからルビを取り出してみました.ルビを使っているページ自体が少ないので,抽出できたルビはノイズや重複込みで約 800 万件,重複を除くと約 80 万件で</ruby>…

最近の簡単・Python プログラミング

ウェブコーパスの作成については,規模が大きいのが厄介なだけで,ほとんどプログラミングをしていません.わずかな作業も Python やシェルスクリプトを使えば簡単に片付いてしまいます. 同一内容ページの検出 アーカイブの中からメッセージダイジェスト(S…

大量の HTML 文書は URL 順に整列してから圧縮する

概要 大規模なウェブコーパスを作成するときは,HTML 文書を URL 順に整列することで,圧縮率をかなり改善できます.理由は,類似した文書を固めることができるからです.という内容が,n-yo さんに紹介していただいた論文 ``On Compressing the Textual Web…