Main
C++ による文字列処理を補助するためのツールを公開しています.現在は,文字列の整列・照合用のライブラリと,はてなダイアリーキーワード抽出用正規表現をキーワード一覧に展開するライブラリがあります.
動作確認は Visual Studio 2008 もしくは MinGW gcc 3.4.5 でおこなっています.
- August 26, 2008 - Version ---
- 文字列照合ライブラリについて,照合に失敗するバグを修正しました.
- 文字列クラスを少し修正しました.
- July 5, 2008 - Version ---
- June 26, 2008 - Version ---
- 文字列整列用のコードで const をつけ忘れている場所があったので修正しました.
ついでにサンプルコードを付け足しておきました.
- June 24, 2008 - Version ---
- 文字列照合用のヘッダを追加してみました.
ダブル配列ベースの DAWG を使用しているので,
それなりに小さい辞書でそれなりに速く照合できると思います.
- June 6, 2008 - Version ---
- 文字列処理用の C++ ライブラリを少しまとめてみました.
- May 25, 2008 - Version ---
- はてなキーワード抽出用の正規表現を展開するプログラムを作成してみました.
- May 5, 2008 - Version ---
はてなダイアリーには,キーワードに対して自動的にリンクを生成する機能があります.また,外部でも同様の機能を利用できるように,はてなダイアリーキーワードを抽出するための正規表現を公開しています.しかし,キーワードの数がとても多い上に,正規表現は機能過多なこともあり,処理効率を考慮すると使いにくいと感じます.
- はてなダイアリーキーワードを抽出するための正規表現
そこで,正規表現をキーワードの一覧に展開するプログラムを作成してみました.
各機能の詳細については,別ページを参照してください.(といいつつ準備中)
C++ の標準ライブラリ std::string は便利なのですが,状況によっては機能不足あるいは機能過多と感じることがあります.そこで,2 つの文字列クラスを提供します.
- nanika/raw_string.h
- nanika/len_string.h
メモリの管理や文字列の編集はサポートしませんが,気楽に使えるという利点があります.
マルチキークイックソートを用いて文字列を高速に整列するためのテンプレート関数を提供します.状況によっては std::sort より高速に動作します.
- nanika/sort_strings.h
- nanika::sort_strings()
- nanika::sort_unique_strings()
- 文字列を辞書順に整列するのは nanika::sort_strings() と同じですが,
重複する文字列を見つけると例外を投げます.
- nanika::sort_strings_base()
- 文字列を辞書順に整列するのは nanika::sort_strings() と同じですが,
各文字列の位置が確定する度に,指定されたコールバック関数を呼び出します.
以下のような型を整列することができます.
- std::vector<std::string>
- std::vector<nanika::raw_string>
- std::vector<nanika::len_string>
- nanika::len_string の提供する関数オブジェクトを使用
辞書に登録されているキーワードを文字列から検出するためのクラスnanika::string_filter を提供します.各キーワードにレコード(例えば ID など)を割り当てることはできませんが,キーワードのフィルタリングや自動リンクなどに利用可能です.
- nanika/string_filter.h
- nanika::string_filter
- 文字列照合用の辞書クラス(専用のスマートポインタ)
ダブル配列(Double-Array)による Directed Acyclic Word Graph(DAWG)を採用しているため,形態素辞書やはてなダイアリーのキーワード一覧,Wikipedia のタイトル一覧を用いる場合,辞書ソース(テキストファイル)よりもバイナリ辞書の方が小さくなります.
以下のような機能を提供します.
- 完全一致
- 前方一致
- 入力文字列の前方部分列に一致するキーワードを見つけます.
- 最長一致するキーワードのみを取り出すこともできます.
- 部分一致
- 入力文字列中に出現するキーワードを見つけます.
- キーワードの重なりが発生しないように取り出すこともできます.
- キーワードによる入力文字列の分割もできます.
辞書のみを使って分かち書きをおこなうプログラムです.解析を一切しないため,速いだけのアレゲな代物になっていますが,用途によっては使えるかもしれません.
- 典型的な失敗例
- 変更 / する / かし / ない / か
- 事由 / のい / かん
- 10 / 日開 / 催
容量の問題で,バイナリ辞書は UTF-8 用のみを添付してあります.