テキスト検索は 文字列検索でも木検索でもない

Slides:



Advertisements
Similar presentations
G ゼミ 2010/5/14 渡辺健人. パフォーマンスの測定 CUDA Visual Profiler CUDA の SDK に標準でついているパフォーマン ス測定用のツール 使い方: exe ファイルのパスと作業ディレクトリ指定して実 行するだけ 注意点 : GPU のコード実行後にプログラム終了前に,
Advertisements

FxUG in Toyama # Presented by wacky. 最近 AMF 3 の Encode/Decode を実装してみました。 そこで得た知識を共有したいと思います! 30分後には … AMF の基本構造が分かっている AMF の得手不得手が分かっている BlazeDS.
©2008 Ikuo Tahara探索 状態空間と探索木 基本的な探索アルゴリズム 横形探索と縦形探索 評価関数を利用した探索アルゴリズム 分岐限定法 山登り法 最良優先探索 A ( A* )アルゴリズム.
プログラミング言語論 第3回 BNF 記法について(演習付き) 篠埜 功. 構文の記述 プログラミング言語の構文はどのように定式化できるか? 例1 : for ループの中に for ループが書ける。 for (i=0; i
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
【事例演習5】  字句解析     解 説  “ハッシュを用いた字句解析の方法”.
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
情報生命科学特別講義III (1) 文字列マッチング
Fill-in LevelつきIC分解による 前処理について
文字列検出ツール "istrings" の使い方
情報処理の基礎 私たちとコンピュータの扱うデータの違い 明治学院大学 法学部消費情報環境法学科 鶴貝 達政
ラベル付き区間グラフを列挙するBDDとその応用
基礎プログラミングおよび演習 第9回
5.チューリングマシンと計算.
アルゴリズムとデータ構造 2012年7月19日
5.チューリングマシンと計算.
アルゴリズムとデータ構造 第9回演習解答.
地理情報システム論 第3回 コンピュータシステムおける データ表現(1)
オペレーティングシステムJ/K 2004年11月4日
プログラミング言語論 プログラミング言語論 プログラミング言語論 演習1 解答と解説 演習1解答と解説 1 1.
データ構造とアルゴリズム論 第6章 探索のアルゴリズム
宇野 毅明 国立情報学研究所 2002年3月 東北大大学院 情報科学研究科ワークショップ
第7章 データベース管理システム 7.1 データベース管理システムの概要 7.2 データベースの格納方式 7.3 問合せ処理.
基礎情報科学のトピックス (平成15年度版) 喜田拓也 (
アルゴリズムとデータ構造 2013年7月18日
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
二分探索木によるサーチ.
計算物理学基礎 第1回 UNIXの基礎 C言語の基本.
生物情報ソフトウェア特論 (1) 文字列マッチング・データ構造
喜田 拓也,竹田 正幸,篠原 歩 九州大学大学院システム情報科学府 情報理学専攻
芝野耕司 ISO/IEC JTC1/SC2 (Coded Character Sets)委員長 東京外国語大学
プログラミング言語論 第3回 BNF記法について(演習付き)
文字列照合を用いた XMLデータアクセス機構の提案
データ構造とアルゴリズム 第14回 文字列の照合.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
オペレーティングシステム イントロダクション
データ構造とアルゴリズム 担当:和田俊和 居室:A603 講義資料等は下記を参照してください.
アルゴリズムとデータ構造 2011年7月12日
正規表現パート2 NFAエンジンの場合は、 正規表現の磨き上げが必要?.
半構造化テキストに対する 文字列照合アルゴリズム
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
データ圧縮技術による文字列照合処理の高速化に関する研究
アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師 山田敬三
プログラムの基本構造と 構造化チャート(PAD)
プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功.
生物情報ソフトウェア特論 (2)たたみ込みとハッシュに 基づくマッチング
Peer-to-Peerシステムにおける動的な木構造の生成による検索の高速化
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
15.cons と種々のデータ構造.
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
地理情報システム論(総)/ 国民経済計算論(商)
情報基礎Ⅱ (第1回) 月曜4限 担当:北川 晃.
構造的類似性を持つ半構造化文書における頻度分析
ガイダンス 電子計算機 電気工学科 山本昌志 1E
5.チューリングマシンと計算.
オペレーティングシステムJ/K (管理のためのデータ構造)
LZW 圧縮テキストに対する 高速文字列照合アルゴリズム 喜田 拓也 竹田 正幸 篠原 歩 九州大学大学院システム情報科学研究科
情報処理Ⅱ 第7回 2004年11月16日(火).
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
情報実習I (第1回) 木曜4・5限 担当:北川 晃.
オペレーティングシステム 作成 T21R003 荏原 寛太.
CADシステムとソフトウェア 電子制御設計製図Ⅰ    2009年4月28日 Ⅲ限目.
情報生命科学特別講義III (3)たたみ込みとハッシュに 基づくマッチング
データ構造とアルゴリズム 第14回 文字列の照合.
サンプル見出し テキスト 1 行目 テキスト 2 行目 テキスト 3 行目 (中級) 図の背後でタイトルを移動させるアニメーション効果
グラフの列挙 中野 眞一    (群馬大学) 2019/9/14 列挙学校.
8.文字列処理 8.1 C#の文字列 C#では, “ABCD”のように文字列を2重引用符で挟んで指定します。ASCIIコード体系のとき,以下のような内部形式となります。 1 1 文字 ‘A’ ナル文字 1 1 文字 ‘B’ A B C D \ 文字 ‘C’ 1 1 文字 ‘D’ ナル文字‘\0’
分子生物情報学(0) バイオインフォマティクス
Presentation transcript:

テキスト検索は 文字列検索でも木検索でもない 京都大学人文科学研究所附属漢字情報研究センター 安岡孝一

テキスト処理とコンピュータの出会い IBM 704 (1954) FORTRAN I (1956) 入出力にCPY命令を使用 連続したメモリの内容を順次入出力 FORTRAN I (1956) 「Hollerith field」をFORMAT文に導入 定数長の連続した文字の列 メモリ空間上に連続的に配置

文字列(string)の登場 ALGOL 60 (1960) BNFによって定式化 「string」を1次元の文字の列として定義 <proper string> ::= <any sequence of basic symbols not containing ‘ or ’>|<empty> <open string> ::= <proper string>|‘<open string>’|<open string><open string> <string> ::= ‘<open string>’ 多くの実装では「string」をメモリに連続配置

文字列処理の実用化 IBM System/360 (1964) PL/I (1964) メモリ単位を8bit=1byteに 1文字=1byte (EBCDIC) PL/I (1964) CHARACTER型を規定 文字列に対する比較操作が可能に

文字列検索アルゴリズムの登場 Morris-Pratt (1970) Knuth-Morris-Pratt (1974) 部分マッチング後の検索キーのシフト量を増加 Knuth-Morris-Pratt (1974) Morris-Prattをさらに改良 Aho-Corasick (1975) 複数の検索キーに対し平行して検索

Aho-Corasickアルゴリズム ex) ITALYとTIEとTULIAを検索 INSTITUTE FOR RESEARCH IN HUMANITIES

Aho-Corasickアルゴリズム ex) ITALYとTIEとTULIAを検索 INSTITUTE FOR RESEARCH IN HUMANITIES

Aho-Corasickアルゴリズム ex) ITALYとTIEとTULIAを検索 INSTITUTE FOR RESEARCH IN HUMANITIES

Aho-Corasickアルゴリズム ex) ITALYとTIEとTULIAを検索 INSTITUTE FOR RESEARCH IN HUMANITIES

Aho-Corasickアルゴリズム ex) ITALYとTIEとTULIAを検索 INSTITUTE FOR RESEARCH IN HUMANITIES

Aho-Corasickアルゴリズム ex) ITALYとTIEとTULIAを検索 INSTITUTE FOR RESEARCH IN HUMANITIES

Aho-Corasickアルゴリズム ex) ITALYとTIEとTULIAを検索 INSTITUTE FOR RESEARCH IN HUMANITIES

Aho-Corasickアルゴリズム ex) ITALYとTIEとTULIAを検索 INSTITUTE FOR RESEARCH IN HUMANITIES

Aho-Corasickアルゴリズム ex) ITALYとTIEとTULIAを検索 INSTITUTE FOR RESEARCH IN HUMANITIES

逆方向文字列マッチング Boyer-Moore (1977) Commentz-Walter (1979) 検索キーの末尾からマッチングをおこなう 非マッチング時の検索キーのシフト量を増加 Commentz-Walter (1979) 複数の検索キーに対しBoyer-Mooreを適用

Commentz-Walterアルゴリズム ex) ITALYとTIEとTULIAを検索 I T A L 4 3 5 6 7 U E Y L 1 I T 2 U 3 その他 INSTITUTE FOR RESEARCH IN HUMANITIES

Commentz-Walterアルゴリズム ex) ITALYとTIEとTULIAを検索 I T A L 4 3 5 6 7 U E Y L 1 I T 2 U 3 その他 INSTITUTE FOR RESEARCH IN HUMANITIES

Commentz-Walterアルゴリズム ex) ITALYとTIEとTULIAを検索 I T A L 4 3 5 6 7 U E Y L 1 I T 2 U 3 その他 INSTITUTE FOR RESEARCH IN HUMANITIES

Commentz-Walterアルゴリズム ex) ITALYとTIEとTULIAを検索 I T A L 4 3 5 6 7 U E Y L 1 I T 2 U 3 その他 INSTITUTE FOR RESEARCH IN HUMANITIES

Commentz-Walterアルゴリズム ex) ITALYとTIEとTULIAを検索 I T A L 4 3 5 6 7 U E Y L 1 I T 2 U 3 その他 INSTITUTE FOR RESEARCH IN HUMANITIES

Commentz-Walterアルゴリズム ex) ITALYとTIEとTULIAを検索 I T A L 4 3 5 6 7 U E Y L 1 I T 2 U 3 その他 INSTITUTE FOR RESEARCH IN HUMANITIES

単純なバイト列マッチングでは検索に失敗? 漢字テキスト検索への応用 1文字≠1byte ex) 「安岡の1族」を日本語EUCで表現 安 岡 の 1 族 B0 C2 B2 AC A4 CE 31 C2 B2 単純なバイト列マッチングでは検索に失敗?

漢字テキスト検索への応用 1文字≠1byte 異体字による曖昧検索 幾何級数的に組み合わせが増える ex) 「帝國大學」の検索 「帝国大学」も「帝國大学」も「帝国大學」も… 「國」の異体字: 国、囯、囻、圀、囶 「學」の異体字: 学、斈、斆、斅 幾何級数的に組み合わせが増える

漢字テキスト検索への応用 篠原-有川 (1985) Aho-Corasickを漢字テキスト用に改良 ex) 日本語EUCで「十週休」と「十周休」を検索 BD B5 A1~AF B1~FE A1~FE D9 BC FE

漢字における逆方向マッチング 日本語EUCやシフトJISでは難しい UTF-8を考案(1993) ISO 10646 (Unicode)の変形の一種 1文字を1~6バイトで表現 1バイト目には00~7F、C0~FEを使用 2バイト目以降には80~BFを使用 安 岡 の 1 族 E5 AE 89 E5 B2 A1 E3 81 AE 31 E6 97 8F 安 岡 の 1 族 E5 AE 89 E5 B2 A1 E3 81 AE 31 E6 97 8F

UTF-8での逆方向マッチング Commentz-Walterを使用可能 ∵ 文字間にマッチングすることはありえない ex) 「大学」「大學」「大斈」を検索 88 1 96 2 A4 5 A6 A7 4 AD B8 E5 3 E6 他 6 7 8 9 10 11 A6 B8 AD 88 96 E6 E5 A4 A7

漢字テキスト検索への応用 1文字≠1byte 異体字による曖昧検索 テキストの非1次元性

漢字テキストの非1次元性 私は安岡孝一です。 私は安岡孝一です。 ルビつきテキストの検索 安岡孝一です やす おか こう いち

漢字テキストの非1次元性 私は安岡孝一です。 私は安岡孝一です。 ルビつきテキストの検索 私はやすおか やす おか こう いち

漢字テキストの非1次元性 私は安岡孝一です。 私は安岡孝一です。 ルビつきテキストの検索 安岡こういち やす おか こう いち

漢字テキストの非1次元性 ルビつきテキストの検索 私は安岡孝一です。 やす おか こう いち

漢字テキストの非1次元性 故宮の神(玄の避諱)武門に向かった。 故宮の神(玄の避諱)武門に向かった。 ルビつきテキストの検索 本文に埋め込まれた注の検索 故宮の神(玄の避諱)武門に向かった。 故宮の神(玄の避諱)武門に向かった。 神武門

漢字テキストの非1次元性 故宮の神(玄の避諱)武門に向かった。 故宮の神(玄の避諱)武門に向かった。 ルビつきテキストの検索 本文に埋め込まれた注の検索 故宮の神(玄の避諱)武門に向かった。 故宮の神(玄の避諱)武門に向かった。 故宮の玄武門

漢字テキストの非1次元性 ルビつきテキストの検索 本文に埋め込まれた注の検索 故宮の神(玄の避諱)武門に向かった。

テキスト検索は文字列検索ではない テキストの非1次元性にどう対処するか XML/XHTMLを使う? ex) XHTMLにおけるRuby Annotation (2001) <p>私は<ruby xml:lang=“ja”> <rbc><rb>安</rb><rb>岡</rb><rb>孝</rb><rb>一</rb></rbc> <rtc><rt>やす</rt><rt>おか</rt><rt>こう</rt><rt>いち</rt></rtc> </ruby>です。</p>

p ruby rbc rb rtc rt <p>私は<ruby xml:lang=“ja”> <rbc><rb>安</rb><rb>岡</rb><rb>孝</rb><rb>一</rb></rbc> <rtc><rt>やす</rt><rt>おか</rt><rt>こう</rt><rt>いち</rt></rtc> </ruby>です。</p> p ruby rbc rb rtc rt 安 岡 孝 一 やす おか こう いち 私は です。

木構造がテキストの流れと合致しない p ruby rbc rb rtc rt 安 岡 孝 一 やす おか こう いち 私は です。

テキスト検索は文字列検索ではない 検索アルゴリズムは? テキストの非1次元性にどう対処するか Directed Acyclic Graphでテキストを実装? 検索アルゴリズムは?

DAGテキストの検索アルゴリズム Aho-Corasick風アルゴリズム Commentz-Walter風アルゴリズム 深さ優先で容易に実装可能 パスが縮退した際の打ち切りは容易 Commentz-Walter風アルゴリズム 深さ優先で実装可能 通ってきたノードを記憶する必要あり パスが縮退した際の打ち切り条件が複雑

DAGテキストの検索アルゴリズム 分岐と縮退によるパス数の爆発 縮退時の打ち切りは? Aho-Corasick風アルゴリズム 初期状態に戻れば確実に打ち切れる Commentz-Walter風アルゴリズム 「その他」が起これば確実に打ち切れる

今後の課題 DAGテキスト検索アルゴリズムの高速化 パス数の爆発を抑えられるか? 縮退時の打ち切り条件をtightにできるか? もっと効率のよいアルゴリズムはないか?

テキスト検索は 文字列検索でも木検索でもない 京都大学人文科学研究所附属漢字情報研究センター 安岡孝一