C++

Knuth-Morris-Pratt algorithm with C++

#include <iostream> #include <string> #include <map> // ref http://infoshako.sk.tsukuba.ac.jp/~yamamoto/Courses/files/page2_13.pdf class KnuthMorrisPatt { public: std::string text; std::string pattern; int n; int m; std::map<int, int> pi; // prefix function KnuthMorrisPat</int,></map></string></iostream>…

Boyer-Moore String Search Algorithm with C++

The Boyer-Moore string search algorithm is one of the efficient string searching algorithm. This is based on a naive string searching algorithm which slides a pattern forward by 1 position and verifies whether a substring of text matches t…

Boost勉強会のrecordとかlogを見る

土曜だか日曜だかにBoost勉強会というのが開かれていました。Boostは使いこなせているわけではないけど、ないとすごく困り始めていたので参加したいなーと思っていたのですが80人の枠が一瞬にして埋まるという盛況振りだったので、その日は教習所の予定を入…

構築した辞書を元にAho Corasick法を使ってキーワードを探す

どのようなときにAho Corasick法が必要か辞書構築した後の応用先(?)の一つとして、辞書を元にした転置インデックスを作ることがあげられる。「どのキーワードがどの文章に登場したか」が一番簡単な転置インデックスだと思うんだけど、今回は登場した文章のど…

部分文字列の組み合わせをC++で

C++

これのC++版のメモ。 MeCabで切った後の複合名詞に対して、部分文字列の組み合わせを考える - Seeking for my unique color. #include <iostream> #include <string> #include <vector> #include <boost/foreach.hpp> std::vector<std::vector<std::string> > enum_cons(std::vector<std::string> v, int n) { std::vector<std::vector<std::string> > result; uns…</std::vector<std::string></std::string></std::vector<std::string></boost/foreach.hpp></vector></string></iostream>

バイナリデータの読み込み書き込み

C++

学習データの数がだんだんでかくなってきており、2000万サンプルくらいになってきている。こうなってくると「素性をファイルに書き出し、学習木に読み込ませる(学習はさせてない)」というプロセスすら結構時間がかかってくる。自然言語処理だとこのくらいの…

半教師あり学習でollを使いたいので、ollをライブラリとして使ってみる

バイトにて、岡野原さんが作られているオンライン学習をサポートした機械学習ライブラリ「oll」をめちゃくちゃ使わせてもらっている。 Google Code Archive - Long-term storage for Google Code Project Hosting. 自然言語処理のような大規模かつスパースな…

有理数を使って、ベクトルの正規化

C++

水曜日に困っていたところ。 割合の合計して1にならない - Seeking for my unique color. コメントで有理数を使うとよいと教えてもらった。boostのほうは分数の形で渡さないといけないので、今回のにはちょっと使えなさそう。ということで、こちらのを使わせ…

はまった。。。

boost::tokenizerでうまくいかないときがあるなあと思っていたらはまっていた。 このようにやると、結果がめちゃくちゃです。悩んだ挙句 tokenizer.hpp を覗いてみて原因判明。tokenizer 内部では、コンストラクタの第1引数で渡されたオブジェクトの iterato…

割合の合計して1にならない

C++

Rでいうところの > sum(1:10 / sum(1:10)) [1] 1 という感じで、全部足すと1になるように正規化したいんですが、C++でうまくいかない。 /Users/syou6162/cpp% ./a.out The sum is 9.9999999999809e-01 The sum is not 1.0 以下ソース。

TBBのインストール

C++

基本ここを真似する。make installができないので精神衛生上よくないように思う。 http://ppwww.phys.sci.kobe-u.ac.jp/~akusumoto/linux/detail.php?d=config/tbb/install ヘッダーファイルは/usr/local/include、ライブラリは/usr/local/lib/tbbみたいな感…

差集合的なにか

C++

"cppref algorithm/set_difference"とかで調べればすぐに分かるだろう、と思ったら分からんかった><inserterって何やねん。 #include <iostream> #include <algorithm> #include <set> #include <boost/foreach.hpp> using namespace std; int main(int argc, char *argv[]) { set<int> s1; s1.insert(1); s1.</int></boost/foreach.hpp></set></algorithm></iostream>…

言語モデルの準備

自然言語処理特論で使うやつの準備の準備くらいの。準備として青空文庫のテキストを食わせる。で、何か入力の文を与えるとUnigram、Bigram、Trigramの言語モデルでのその文が出てくる確率を計算する。確率は非常に小さくなるので、出力するところでは対数を…

素晴しい!!

C++

PerlもRもヘルプが大変充実しているんですが、C++にはないので非常に苦痛でした。が、こんなのができたらしい! GitHub - kazuho/cppref: man-style access to cppreference.com documents これでイライラしなくてよいですね!!boostにも同じようなものがある…

Trieとかtcとか系列タギングとか

タブ区切りデータの三列目を取り出す「-F」の使い方、すぐ忘れる。。。 perl -F"\t" -anle 'print $F[2]' umls2ja.tab Trieを構築するためのライブラリTx http://www-tsujii.is.s.u-tokyo.ac.jp/~hillbig/tx-j.htm dartsのほうは日本語だとうまく動かない…?T…

マルチスレッドとstl

C++

スレッドの中でvectorに次々につっこんでいくプログラム。 #include <iostream> #include <vector> #include <boost/foreach.hpp> #include <boost/thread.hpp> #include <boost/bind.hpp> using namespace std; vector<int> v; void greetingWithID(int i) { v.push_back(i); } int main(int argc, char *argv[]) { int n = 1000; boost::</int></boost/bind.hpp></boost/thread.hpp></boost/foreach.hpp></vector></iostream>…

mapのvalueでソートしたい

C++

PerlやRubyみたいに。stlのmapはディフォルトでキーでソートされていて、valueではできないっぽい。結論からするとpriority_queueを使うとよさそう。 #include <iostream> #include <map> #include <queue> #include <string> #include <boost/foreach.hpp> typedef std::map<std::string, int> container; typedef std::pair<std::string, int> val</std::string,></std::string,></boost/foreach.hpp></string></queue></map></iostream>…

segmantation faultの原因をつきとめる

g++ -g hoge.cpp という形で、コンパイルしてからgdbを起動。runしてwhereすると原因に近い場所がつきとめられる、らしい。

RserveをC++から使ってみる

R C++

最近Rを使っていなさすぎて死ぬレベルなので、Rを使うことにした。ただし、C++を通して。RserveというRを叩けるTCP/IPサーバーがあるらしいので、それを使います。主にJavaで使うことを想定されているらしいですが、Javaはもう覚えていないので*1、C++で触り…

stringとwcharの変換

C++

自分用メモ。ああああ、C++で文字列めんどくせえええ。 #include <iostream> #include <string> #include <vector> #include <locale> #include <cstdlib> using namespace std; void narrow(const std::wstring &src, std::string &dest) { char *mbs = new char[src.length() * MB_CUR_MAX + 1]; wcsto</cstdlib></locale></vector></string></iostream>…

文脈の情報も取り入れつつ特徴ベクトルを構築する、の続き、の続き

こことかここの続き。typenameとかのところではまってコンパイルできない><とかやってました。前回のSVMに投げたところでは、複合名詞中に何の単語が登場したか、という超単純な情報しか見ていなかったんだけど、今度は2つ前後の単語や語頭語尾の情報など…

文脈の情報も取り入れつつ特徴ベクトルを構築する、の続き

自分用メモ。整理しないとわけが分からなくなってきた。 std::multimapというのを知る equal_rangeでpairが返ってくる 7章:STL 7章:STL 特待のパターン以外のものを削除 find . -type f -not -name '*.txt' | xargs rm 今のところ必要な情報は 二つ前の形…

複合名詞の周辺の情報、複合名詞の先頭と末尾の情報

この前やったSVMに使った素性は考えられる中では相当単純なものを使ったので、(悪くはなかったけど)改善の余地がありまくっている。というわけで 複合名詞の先頭の単語 複合名詞の末尾の単語 複合名詞の前後の単語 を集めてくるためのコードを書いた。条件分…

分類問題のための教師データの作成

6月の間は出現頻度と連接頻度に基づく専門用語抽出にある論文の考え方にそって、C++とかRubyで実装していた。しかし、どうも精度や再現率が低い。id:theclaさんに結果を見せてみたところ「おしいのは結構あるんだけどねえ」という感じで、(精度とかを測る時…

ベルマンフォードアルゴリズムをC++で

アルゴリズムの経過をアニメーションgifにするために書いたはいいものの、アルゴリズムとは関係ないコードが増えてしまったので、C++で書き直してみた。以下コード。 #include <iostream> #include <string> #include <map> #include <vector> #include <math.h> using namespace std; class Directe</math.h></vector></map></string></iostream>…

和集合を取る

C++

#include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; int main (int argc, char **argv) { vector<string> a1; a1.push_back("トライグラム"); a1.push_back("統計"); vector<string> a2; a2.push_back("トライグラム"); a2.push_back("日本語"); vector<string> result (</string></string></string></algorithm></vector></string></iostream>…

C++クックブックのメモ

C++

5.4 vectorへのポインタの格納 vectorにはオブジェクトをコピーするのではなく、ポインタを格納する リファレンスは無理っぽい ポイントしているオブジェクトは自動的にdelteされることはないので、その削除を忘れないように 5.5 listへのオブジェクト格納 …

Interval Time Schedulingを動的計画法を「使わないで」解く

C++のリハビリ代わりに、とか思ったらまじ忘れまくってるし。cout.hはTZTester をどうにかするブーム - naoya_t@topcoder - TopCoder部より。 #include <string> #include <vector> #include <iostream> #include <algorithm> #include "cout.h" using namespace std; class TimeInteval { private</algorithm></iostream></vector></string>…

深さ優先探索のアルゴリズムをC++で

C++

C++でグラフをごにょごにょするようなものは昔書いてたんだけど、Rubyで書いたやつのほうがすっきり書けたので書き直してみた。 #include <string> #include <set> #include <vector> #include <map> #include <iostream> using namespace std; class Graph { public: Graph(){ }; virtual ~Graph</iostream></map></vector></set></string>…

初めての関数ポインタ

C++

Rubyで関数にblock投げて、とかができるからC++でもやってみたくなった。無名関数っぽくできないのは残念(いちいち名前付けるの面倒)だけど、boost使えばできるんかなー。 #include <string> #include <set> #include <vector> #include <map> #include <iostream> using namespace std; class Gr</iostream></map></vector></set></string>…