忍者ブログ

fukushimuのメモ帳

旧fukushimu'sページ。&旧理系大学院生の怠惰な日々。 fukushimuのメモ帳です。。
2017
11,18

«[PR]»

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2011
02,02
Text::MeCabが謎の文字化けして、まぁ一応直ったのでメモ。
原因はわからずじまい。

ある日(というか今日)何気にText::MeCabを動かすと、あれれ・・


��

�態

��

謎の文字化け発症・・。
単語と単語の切れ目がゴミと化しています。
前はフツーに動いていたのにぃ!
だからスクリプトの文字コード周りではないのかも。
これはターミナル上でのMySQLで、日本語を入力→削除で出てくるゴミに似ている気がする。

とりあえずcpanでText::MeCabをアップグレードするも直らず。
ふと調べると、mecab本体が2個所にある・・。
一方が正常で一方が文字化ける。
Text::MeCabインストール時に指定するパスは化けるほう。

ということでインストールしなおしてmecabのパスを正常な方に直すと・・・



変態
です


うひょーー!
見事なおりました!!
しかし化ける方はなんなんだ、いつからおるんか、いつ正常なやつと入れ替わったのかはわからず。
PR
2011
01,28
ずっと避けてたデュアルディスプレイにしてみました。

NVIDIA純正ドライバ、インストール手順

こちらのサイトを参考にしました。
やってみると意外と簡単。
前挫折したときのアレはなんだったんだろう・・

基本的な流れは

ドライバのダウンロード → CUIでインストール → GUIで「nvidia-settings」で2画面目の設定

です。

詳しくは上のサイトを見ましょう。
※CUIでサイトを参考にしながらできないので上のサイトをプリントアウトしてからが無難かも・・

2011
01,27
firefox上でAdobe Readerが開けるようにします。OSはVine5.1。

まずはAdobe Readerをインストール。

こちら(http://get.adobe.com/jp/reader/otherversions/)からrpmをダウンロードして入れました。


$ su
パスワード:
# rpm -ivh AdbeRdr9.4-1_i486linux_jpn.rpm
準備中...                ########################################### [100%]
   1:AdobeReader_jpn        ########################################### [100%]

これでインストール終了。pdfをAdobe Readerで開けるようになりました。

つぎにプラグインをインストール。といっても、ダウンロードしたファイル内の"nppdf.so"というファイルをプラグインディレクトリにコピーするだけです。こちらを参考にしました。

"nppdf.so"はrpmを解凍すると、"Reader9/Browser/intellinux/"にありました。また、僕の場合mozillaのプラグインディレクトリは"/usr/lib/mozilla/plugins/"です。プラグインディレクトリになぜか既に"npdf.so"があったので(汗)一応古いファイルをコピーして保存したあとに新しいファイルをコピーしました。


[root@localhost Adobe]# cp /usr/lib/mozilla/plugins/nppdf.so /usr/lib/mozilla/plugins/cp_nppdf.so
[root@localhost Adobe]# cp Reader9/Browser/intellinux/nppdf.so /usr/lib/mozilla/plugins/
cp: `/usr/lib/mozilla/plugins/nppdf.so' を上書きしてもよろしいですか(yes/no)? yes
[root@localhost Adobe]#

これで無事firefox上でpdfファイルが開けました。あ、でも1回目開いた時firefoxが強制終了しました(汗)

以上です。

[追記]
試しにnppdf.soを削除してみたら、普通にfirefox上でpdfを開けました・・。
やっぱりnppdf.soがないとだめでした。

2011
01,15
perlでText::MeCabを使っていて、「なんか変だなー。みょ〜〜に、変だな〜・・」と稲川淳二ばりに思っていたら、作成したはずのmecabのユーザ辞書がText::MeCabに適応されていませんでした。人生オワタ、と嘆いていると、ザッツさんがCPANを見ればといってくれたので、見てみると、あーなるほど普通に書いてある。ということで、Text::MeCabに自分で作成したユーザ辞書を適応させる方法です(CPAN見れば書くまでもありませんが...)。

use Text::MeCab;
use utf8;
binmode(STDOUT, ":raw :utf8");
binmode(STDIN, ":raw :utf8");
use Encode;

my $userdic ='../mecab_dic/wikipedia.dic, ../mecab_dic/hatena_keyword.dic';  # <- ユーザ辞書パス(複数OK)
my $m = Text::MeCab->new({  # <- ここで辞書のパスを記載
    userdic    => $userdic,
});
my $str = "千と千尋の神隠し";
my $n = $m->parse($str);
do{
    printf("%s\t%s\t%s\n",
           decode('utf8' ,$n->surface),          # 表層
           decode('utf8' ,$n->feature),          # 現在の品詞
           $n->cost,           # その形態素までのコスト
           );
}while ($n = $n->next)


実行結果

千と千尋の神隠し    名詞,固有名詞,*,*,*,*,千と千尋の神隠し,*,*,wikipedia_word,    -4034
    BOS/EOS,*,*,*,*,*,*,*,*    -4468
Use of uninitialized value in printf at /home/akito/workspace/長岡さん/source/OLD_source/test_mecab.pl line 14.

できました。まあ、ちゃんとCPANなりなんなりを読めと言うことですね。


2011
01,13
mecabにwikipediaのタイトルの単語を追加します。

ググると、既に様々な人がされているので、参考にさせて頂きました。また、本家のサイトで詳しく説明されています。
csvファイルの作成にperlを使いました。

以下が作業の流れです。

1)wikipediaのデータをダウンロード
2)ダウンロードしたデータからユーザ辞書のCSVファイルを作成
3)CSVファイルを辞書ファイル(.dic)へ変換

wikipediaのタイトルを辞書に追加すると

$ mecab
千と千尋の神隠し
千    名詞,数,*,*,*,*,千,セン,セン
と    助詞,格助詞,引用,*,*,*,と,ト,ト
千尋    名詞,一般,*,*,*,*,千尋,チヒロ,チヒロ
の    助詞,連体化,*,*,*,*,の,ノ,ノ
神隠し    名詞,一般,*,*,*,*,神隠し,カミガクシ,カミガクシ
EOS

これが

$ mecab
千と千尋の神隠し
千と千尋の神隠し    名詞,固有名詞,*,*,*,*,千と千尋の神隠し,*,*,wikipedia_word,
EOS


こうなってくれます。つまり、wikipediaに登録されている項目をmecabが判別してくれるのですね。

では本題。

1) まず、wikipediaのタイトルリスト(jawiki-latest-all-titles-in-ns0.gz)をこちら(http://download.wikimedia.org/jawiki/latest/)からダウンロード。適当なディレクトリ(home/foo/bar)に解凍します。

2) 次に、ダウンロードしたファイルから辞書へ変換するためのCSVファイルを作成します。ファイルの中身を見るとこのようになっていました。


千ちゃんの幸せラジオドーム
千とせ
千と千尋
千と千尋の神隠し
千と千尋の神隠し_サウンドトラック
千なり
千のナイフ


これをこのようなCSV形式に整形し、ファイルに保存します

工藤,1223,1223,6058,名詞,固有名詞,人名,名,*,*,くどう,クドウ,クドウ

詳しくは公式サイトにのっていますのでそちらを。なお、自分お好きな情報をCSVが許す範囲で 追加できるとのことなので、先人に習って、最後にwikipedia_wordを追加します。 CSVへの変換はこちらのサイトのperlスクリプトを参考にさせて頂きました(少し改変しました。)。

#!/usr/bin/perl

use strict;
use warnings;
use utf8;
binmode(STDOUT, ":utf8");
use encoding 'utf8';

my $file1 = "jawiki-latest-all-titles-in-ns0";
my $file2 = "wikipedia.csv";

open(IN, "$file1");
open(OUT, ">$file2");
binmode OUT, ":utf8";        ##    <- こっちが正しい

for(<IN>) {
  chomp($_);
  print $_."\n";

  ## いらない単語をとばす
  next if $_ =~ /^\./;
  next if $_ =~ /(曖昧さの回避)/;
  next if $_ =~ /^[0-9]{1,100}$/;
  next if $_ =~ /[0-9]{4}./;
 
 
  if (length($_) > 3) {
    print OUT "$_,0,0,".max(-36000,-400 * (length^1.5)).",名詞,固有名詞,*,*,*,*,$_,*,*,wikipedia_word,\n";
  }
}

sub max {
    my $comp = shift @_;
    my $val  = shift @_;
    my $max  = $comp;
    if ( $comp <= $val ) {
      $max = $val;
    }
    return int($max);
}


「#いらない語をとばす」のところで自分がいらないなと思った単語をとばしましょう。僕は.(ドット)から始まる後や(曖昧さの回避)の単語、数字のみの単語などを省きました。また、CSVファイルに書き込む際に3文字以下の単語は省きました。(lengthでuse utf8をしないと日本語などのユニコード文字の長さがちゃんとはかれないようです。)

これでCSVファイルができあがリました。

3)CSVファイルを辞書ファイル(.dic)へ変換します。CSVファイルのあるディレクトリで、以下のコマンドを入力。
$ /usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic \
> -u wikipedia.dic -f utf8 -t utf8 wikipedia.csv
reading wikipedia.csv ... 970539
emitting double-array: 100% |###########################################|

done!

できました。

最後に/usr/local/etc/mecabrcに以下を追加。

userdic = /home/foo/bar/foo.dic 

これで終了です。この調子ではてなキーワードもいれてみようと思います。

--2011-01-14 追記--

はてなキーワードリストをこちら(http://d.hatena.ne.jp/hatenadiary/20060922/1158908401)からダウンロードして、辞書に登録しました。
はてなキーワードにはふりがながあるものもあるので、スクリプトを少し改良しました。

#!/usr/bin/perl

use strict;
use warnings;
use utf8;
use encoding 'utf8';

#my ($file1,$file2) = @ARGV;

my $in = "hatena.csv";
my $ou = "hatena_keyword2.csv";

open(IN, "$in");
open(OUT, ">$ou");
binmode OUT, ":utf8";

for(<IN>) {
  chomp($_);
 
  ######## for hatena                      <-    ここを追加
  $_ =~ s/(.*?)\t(.*?)/$2/;
  my $yomi = $1;
  $yomi = '*' if $yomi eq '';
 
 
  print $_."\n";
  next if $_ =~ /^\./;
  next if $_ =~ /(曖昧さの回避)/;
  next if $_ =~ /^[0-9]{1,100}$/;
  next if $_ =~ /[0-9]{4}./;
 
 
 
  if (length($_) > 1) {
#    print OUT "$_,0,0,".max(-36000,-400 * (length^1.5)).",名詞,固有名詞,*,*,*,*,$_,*,*,wikipedia_word,\n";
    print OUT "$_,0,0,".max(-36000,-400 * (length^1.5)).",名詞,固有名詞,key_word,key_word,*,*,$yomi,*,*,hatena_word,\n";
  }
}

sub max {
    my $comp = shift @_;
    my $val  = shift @_;
    my $max  = $comp;
    if ( $comp <= $val ) {
      $max = $val;
    }
    return int($max);
}


変換後の中身

千と千尋の神隠し,0,0,-3600,名詞,固有名詞,key_word,key_word,*,*,せんとちひろのかみかくし,*,*,hatena_word,

しかし、何と言うか、はてなキーワードはwikipediaと比べてなんだか世俗的、というかフォークソノミーちっく(死語!?)ですね。それぞれの単語追加の際のポリシーみたいなものがあるのでしょうかね。

[1] [2] [3] [4] [5] [6]


: 次のページ »
プロフィール
HN:
fukushimu
性別:
男性
自己紹介:
熊本の某大学で情報処理の勉強をしてます。
カレンダー
10 2017/11 12
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
ブログ内検索
つぶやきパーツテスト
カレンダー
最新コメント
[12/12 nvvkofkjdl]
[12/12 clmmxjdfzx]
[12/12 byuahjtfun]
[12/12 lyzithxbgh]
[12/11 xcjlfpuicg]
バーコード
最新TB
P R
カウンター
フリーエリア

Powered by Ninja.blog * TemplateDesign by TMP
忍者ブログ[PR]