全文検索システム『ひまわり』
講習会
山口昌也（国立国語研究所）

全文検索システム『ひまわり』講習会資料（2018-03-19）本日の内容 全文検索システム『ひまわり』を使って，既存のテキストデータを利用する方法を紹介『ひまわり』 （ver.1.6ls3 = ver.1.6b06+実習資料+UniDic ver.2.2.0）
 青空文庫（サンプル） 名大会話コーパス 全体的な流れ『ひまわり』の紹介と基本的な使い方
 もっとも簡単なインポート

すこし複雑なインポート

2

テキストファイル形式の青空文庫 ≒ ほぼアノテーション（情報付与）なし
５種類のタグを使って，アノテーション

『ひまわり』とは 言語研究用の全文検索システム

指定された文字列を網羅的に検索して，前後文脈付きで結果を表示します（コンコーダンサ） 『太陽コーパス』（２０世紀初頭の総合雑誌『太陽』）用の検索システムとして構築しました 特徴

ＸＭＬでタグづけされたコーパスを全文検索できます Windows, Mac OS, Linux など，多くのOS上で動作します 無料です

Ver.1.6 ⇒ 統計的な分析に必要なデータの収集支援機能を強化（例：総文字数，総単語数）
3

『ひまわり』の基本的な使い方

4

『ひまわり』を起動する
普段使うとき（Windows 専用）
himawari.exe
himawari.exe

himawari_debug.exe

コーパスを作るとき
検索の途中経過を見たいとき（Windows 専用）
himawari_debug.exe

汎用（Windows，Mac，Linux など）
himawari.jar
himawari.jar

5コーパスの選択
 ［ファイル］⇒［コーパス選択］
6「外部DB」


コーパスファイルに直接記述していない付与データを格納

『青空文庫』サンプルの場合
は，形態素解析結果従来どおり，設定ファイルを『ひまわり』にドロップする方法でもOK

検索する「検索文字列」欄では右クリックで履歴表示

検索文字列

検索の実行

検索結果

途中経過の表示7

検索総数

ブラウザでの閲覧

閲覧したい用例をダブルクリック

閲覧用のブラウザの変更検索キーは，赤い字で表示［ツール］⇒［オプション］⇒ [ブラウザ]
8検索結果のソート
列名を左クリック

昇順
列タイトルをクリック



複数列を考慮したい場合


優先順位の逆順でソートを実行

降順
シフトキーを押しながら列タイトルをクリック

9



例：「話者」ごとに「後文脈」でソート→ 「後文脈」「話者」の順

検索結果の絞り込み
 検索時に指定「著者」欄が「夏目」で始まる結果のみに絞り込まれる 検索後に絞り込み絞り込みたい値を選択⇒右クリック⇒フィルタでもＯＫ
10

列名を右クリック検索結果の頻度集計
1.

集計したい列を選択
複数の列を選択することも可離れた列の選択• WindowsはCtrlキー• macOSはcommandキー

2.

11

右クリック⇒「統計」

形態素解析結果の閲覧

当該作品の形態素一覧⇒Shift + ダブルクリック

テキスト進行方向12

この機能は，外部DB「sd」の資料のみ実行可能もっとも簡単なインポート13

テキストファイルのインポート―青空文庫のテキストデータを例に―やまなし
宮沢賢治

３種類の独自タグ------------------------------------------------------【テキスト中に現れる記号について】



例：「跳ねて」が検索できない
例：注記の中の「五月」が検索される
｜：ルビの付く文字列の始まりを特定する記号（例）二｜疋《ひき》の------------------------------------------------------小さな谷川の底を写した二枚の青い幻燈《げんとう》です。

例：資料の注記（左のタグの説明など）『ひまわり』はタグを解釈して全文検索
「跳ねて」も検索OK

ルビでの検索OK

検索範囲の指定OK



本文と付与情報（属性）は区別して検索［＃３字下げ］一、五月［＃「一、五月」は中見出し］
二｜疋《ひき》の蟹《かに》の子供らが青じろい水の底で話していました。
『クラムボンはわらったよ。』『クラムボンはかぷかぷわらったよ。』『クラムボンは跳《は》ねてわらったよ。』『クラムボンはかぷかぷわらったよ。』

14

本文とそれ以外の区別ができない
例：ルビ

《》：ルビ
（例）幻燈《げんとう》［＃］：入力者注 主に外字の説明や、傍点の位置の指定（例）［＃３字下げ］一、五月［＃「一、五月」は中見出し］

タグは検索の障害になるインポートの実行
sampleフォルダを，起動している『ひまわり』にドラッグ＆ドロップlesson/sample フォルダakutagawa_ryunosukemiyazawa_kenji






15

kumono_ito.txt
yamanashi.txt

フォルダの情報をインポート時に利用

フォルダ階層 ⇒ Path 欄

ファイル名 ⇒ タイトル欄

ドロップしたフォルダ名がコーパス名になるHTML，XMLもインポート可能

文字コードは自動判別

詳細オプション（文字列変換，形態素解析など）

検索例• ルビ，注記が変換されていることに注目• ルビ，注記自体はタグの属性として記述されているため，「本文」
検索ではマッチしない• フォルダとファイルの情報が，それぞれ「Path」「タイトル」欄に表示される• 「著者」欄は空欄

16

インポート時のオプション


文字正規化


ユーザ定義： 半角英数字⇒全角(.himawari_import_config.xml参照)



NFKC: Unicodeで規定される正規化

テキスト変換

resources/htd/aozora.htd• 本資料では，対象ファイルTXT（テキスト変換）のみを扱う• XHTML, XML（スタイルシート）については，一般的な規格なので，適宜資料を参照のこと。また，文字正規化，形態素解析などの処理はTXTと同様に適用される

17

改行位置に，<br />を挿入
注記，ルビをタグに変換

resources/htd/diy.htd例： 全角英数字 ⇒ 半角英数字
例： 半角カタカナ ⇒ 全角カタカナ

自作コーパス用
汎用タグでテキストにタグ付け可能

形態素解析


MeCab, Jumanなどで解析し，結果を「外部データベース」に格納
解析対象の要素を指定できる• 本日は，「MeCab(UniDic)」を使用• 辞書は，resource/unidicにインストールインポート処理の概要

18

処理の流れテキスト変換①

インポートするファイルを一定のルールでXMLファイルに変換

ファイルの統合②
③

変換したXMLファイルを一つのファイルに統合

形態素解析（オプション）
変換後［＃８字下げ］一［＃「一」は中見出し］
ある日の事でございます。御釈迦様《おしゃかさま》は極楽の蓮池《はすいけ》のふちを、独りでぶらぶら御歩きになっていらっしゃいました。

変換前19<br /><注 内容="＃８字下げ" 付与="" 種別="注記" />一<注 内容="＃「一」は中見出し" 付与="" 種別="注記" /><br /><br />
ある日の事でございます。<r rt="おしゃかさま">御釈迦様</r>は極楽の<r rt="はすいけ">蓮池</r>のふちを、独りでぶらぶら御歩きになっていらっしゃいました。

XMLタグの基本
 一定範囲に意味づけ

開始タグ：
 終了タグ ：

<記事 ....></記事>

 特定の位置に意味付け（範囲がない場合）


空要素タグ ：<br />「記事」タグは，「タイトル」，「著者」，「path」 属性を持つ

開始タグ<記事 タイトル="吾輩は猫である" 著者="夏目漱石" path="/sample/テキスト１.txt"><r rt="わがはい">吾輩</r>は猫である。名前はまだ無い。<br />どこで生れたかとんと見当がつかぬ。……<br />

終了タグ

</記事>

『ひまわり』は検索時，タグを読み飛ばして，文字列照合する
20

テキスト変換（anozora.htdの場合）
改行位置に<br />を挿入
 半角の&<>を全角に変換
青空文庫の注記を「注」タグへ

凡例： ［＃ここに注記を書く］［＃８字下げ］［＃「一」は中見出し］

青空文庫のルビをrタグへ

凡例１： 漢字列《ここにルビを書く》
凡例２： ｜文字列《ここにルビを書く》

御釈迦様《おしゃかさま》
蓮池《はすいけ》
人間中で一番｜獰悪《どうあく》な種族

変換後［＃８字下げ］一［＃「一」は中見出し］
ある日の事でございます。御釈迦様《おしゃかさま》は極楽の蓮池《はすいけ》のふちを、独りでぶらぶら御歩きになっていらっしゃいました。

変換前21<br /><注 内容="＃８字下げ" 付与="" 種別="注記" />一<注 内容="＃「一」は中見出し" 付与="" 種別="注記" /><br /><br />
ある日の事でございます。<r rt="おしゃかさま">御釈迦様</r>は極楽の<r rt="はすいけ">蓮池</r>のふちを、独りでぶらぶら御歩きになっていらっしゃいました。

ファイルの統合
corpus.xml<コーパス><記事><テキスト>
ここに，入力ファイル１の変換結果が置かれる）</テキスト></記事>

入力ファイル１

入力ファイル２

入力ファイル３：インポート<記事><テキスト>
ここに，入力ファイル２の変換結果が置かれる）</テキスト></記事><記事><テキスト>（ここに，入力ファイル３の変換結果が置かれる）</テキスト></記事>： （入力のファイルの分だけ繰り返す）</コーパス>22

生成されるファイル（コーパス名sampleの場合）『ひまわり』フォルダ
config_sample.xml

sampleコーパス用設定ファイル

config_sample.sd.xml

sampleコーパス用設定ファイル（形態素解析結果の検索を含む）

Corporaフォルダ
sampleフォルダ
xsltフォルダ

23

ブラウザ表示用の設定ファイル

corpus.xml

コーパス本体（ファイルを統合した結果）

corpus.{cix|eix|aix}

全文検索用の索引

corpus.morph.{sax|six}

形態素解析結果検索用の索引

himawari.morph.sdc

形態素解析結果検索用の辞書

少し複雑なインポート24

概要
 5種類の汎用タグを使ったアノテーションを行う

aozora.htd ⇒ ルビと注記のみ
 diy.htd ⇒ 自分で意味づけ（資料全体，作品本体など）
原資料
蜘蛛の糸
芥川龍之介

タグ付け後
作者名やタイトルの情報を利用できない------------------------------------------------------【テキスト中に現れる記号について】：-------------------------------------------------------t1(蜘蛛の糸,芥川龍之介)

開始タグ------------------------------------------------------【テキスト中に現れる記号について】：------------------------------------------------------開始タグ
t2()［＃８字下げ］一［＃「一」は中見出し］

資料全体（タイトル，著者）［＃８字下げ］一［＃「一」は中見出し］

ある日の事でございます。御釈迦様《おしゃかさま》は極楽の蓮池《はすいけ》のふちを、独りでぶらぶら御歩きになっていらっしゃいました。
：
作品以外の部分も検索さ
底本：「芥川龍之介全集2」ちくま文庫、筑摩書房
れてしまう
1986（昭和61）年10月28日第1刷発行
1996（平成8）年7月15日第11刷発行

25

ある日の事でございます。御釈迦様《おしゃかさま》は極楽の蓮池《はすいけ》のふちを、独りでぶらぶら御歩きになっていらっしゃいました。
作品本体の：
範囲指定
終了タグ
/t2
底本：「芥川龍之介全集2」ちくま文庫、筑摩書房
1986（昭和61）年10月28日第1刷発行
1996（平成8）年7月15日第11刷発行
/t1
終了タグ

ブロックレベル要素用タグ t1, t2
機能（t1, t2同一）
 検索対象

作品全体，章や節など，行以上の範囲をアノテーションするのに使う
開始タグは三つまで属性を持てる
０個 t1()

t1タグの範囲のみを検索

１個 t1(夏目漱石)
２個 t1(夏目漱石,吾輩は猫である)
３個 t1 (夏目漱石,吾輩は猫である,1905)
 検索結果 変換結果のXML

タグは，すべて半角文字

t1(夏目漱石,吾輩は猫である)
吾輩は猫である。名前はまだ無い。
：
/t1
26

<t1 arg1=“夏目漱石” arg2=“吾輩は猫である”>
吾輩は猫である。名前はまだ無い。
：</t1>

インライン要素用タグ u1, u2
機能（u1, u2同一）


行内の範囲をアノテーションするのに使用する。
開始タグは三つまで属性を持てる（属性なしは不可） 検索対象マークアップした文字列をその属性値で検索 青空文庫タグのu1, u2での記述
ルビ

二｜疋《ひき》の蟹《かに》の子供らが青じろい水の底で話していました。

二u1(ひき)疋/u1のu1(かに)蟹/u1の子供らが青じろい水の底で話していました。

この※［＃「特のへん＋廴＋聿」、第3水準1-87-71］陀多には蜘蛛を助けた事があるのを御思い出しになりました。

このu2(特のへん＋廴＋聿,第3水準1-8771) ※/u2陀多には蜘蛛を助けた事があるのを御思い出しになりました。

注記27

空要素タグ e1機能

原資料のページ番号や行位置など，位置を表すのに使う三つまで属性を持てる（属性なしは不可）
e1/(動詞) , e1/(動詞,五段), e1/(動詞,五段,未然形)



検索時は，マッチした文字列の先頭文字から見て，文進行方向の最も近いタグの属性値を表示
「吾輩」「吾輩は」「輩」の場合 ⇒ 「名詞」



「猫である」の場合 ⇒ 「名詞」

 単語の区切り例
原資料

吾輩は猫である。
タグ付け後

吾輩e1/(名詞)はe1/(助詞)猫e1/(名詞)でe1/(助動詞)あるe1/(助動詞) 。 e1/(記号)＊（機能の説明用なので，実用には少し無理がある）

28

タグを使ってみよう

lesson/annotation_sample_results
フォルダはアノテーション例なので，一通り終えたあと，参照のこと

 lesson/annotation_sample フォルダ
wagahai.txt【夏目漱石 吾輩は猫である】

吾輩《わがはい》は猫である。【１文目】
名前はまだ無い。【２文目】
どこで生れたかとんと見当《けんとう》がつかぬ。【３文目】

 全体をt1タグ
 ルビをu1タグ
 文番号をe1タグ

yamanasi.txt【宮沢賢治 やまなし】

 全体をt1タグ
 1発話をt2タグ【子供】『お父さん、いまおかしなものが来たよ。』【お父さん】『どんなもんだ。』【子供】『青くてね、光るんだよ。はじがこんなに黒く尖ってるの。
それが来たらお魚が上へのぼって行ったよ。』【】内は属性値とし，本文ではないものとする

29インポート時のオプション

diy.htd

diyConfig.xml
MeCab(UniDic)

30

アノテーション結果の集計

一覧機能（ユーザ入力）
で付与情報を閲覧 t2一覧

 morph（形態素解析結果）一覧

 t2中の形態素数（話者別）

タグの包含関係を用いる

31

補足

32

設定ファイル（config_*.xml）の調整
 例：

列名を変える<!-- 結果レコードのフィールド定義 --><field_setting><li align="RIGHT" name="no" type="index" width="30"/><li align="RIGHT" attribute="_preceding_context" element="_sys" name="前文脈" sort_direction="R"
type="preceding_context" width="180"/><li attribute="_key" element="_sys" name="キー" sort_order="1" type="key" width="80"/><li attribute="_following_context" element="_sys" name="後文脈" sort_order="2" type="following_context"
width="160"/><li attribute="path" element="記事" name="Path" type="argument" width="80"/><li attribute="タイトル" element="記事" name="タイトル" type="argument" width="80"/><li attribute="arg1" element="t1" name="t1:属性1" type="argument" width="80"/>
name属性の値<li attribute="arg2" element="t1" name="t1:属性2" type="argument" width="80"/>を変更<li attribute="arg3" element="t1" name="t1:属性3" type="argument" width="80"/><li attribute="arg1" element="t2" name="t2:属性1" type="argument" width="80"/><li attribute="arg2" element="t2" name="t2:属性2" type="argument" width="80"/><li attribute="arg3" element="t2" name="t2:属性3" type="argument" width="80"/>

 参考資料

33『ひまわり』ホームページ⇒「文書」⇒「設定ファイルリファレンスマニュアル」

作成した資料の配布
 名大会話コーパスの場合


次の構造のフォルダを作成し，zipで圧縮

Himawari_meidai

Corpora/Meidai
config_meidai.xml

config_meidai.xml.himawari_package_info
Corporaフォルダ
Meidai.himawari_package_infoの内容コピーしたいファイルとフォルダを列挙する
隠しファイルの表示（ macOSの場合）［command］+［shift］+ 「.」もちろん中身も入れる 参考資料
34

「設定ファイルリファレンスマニュアル」の「パッケージ設定ファイル」

単語での検索（１）

青空文庫サンプル（形態素解析結果付き）を対象に
config_aozora_sample.sd.xml

 単語単位で正規表現検索

単位をまたいだ検索はできない 青空文庫サンプルは，MeCab (ver.0.996)で解析
 名大会話コーパスについては，HPを参照


A)「日」を含む単語「基本形ー１」「基本形１」
欄は，それぞれ前後の単語の基本形B)「キー」欄（出現形）の一覧を求める「キー」欄のどれかを選択⇒右クリック⇒統計35

単語での検索（２）C)先頭が「日」の単語
正規表現の「^」（文字列の先頭）D)

末尾が「日」の単語
正規表現の「$」（文字列の末尾）

E)

単語「日」のみF)

活用語の基本形
すべての語形を一括して検索

36

青空文庫サンプル（形態素解析結果付き）を対象に
config_aozora_sample.sd.xml

おわりに 全文検索システム『ひまわり』チュートリアル
 『ひまわり』の紹介と基本的な使い方
 青空文庫形式テキストのインポート
 ５種類の汎用タグを用いたアノテーション

 さらに詳しく知るには『ひまわり』ホームページの各種資料（ver.1.6は本年度安定版になる予定）『ひまわり』用各種パッケージが実例として使える
 テキスト処理の知識があれば，直接XML形式に変換する方法もあり

37

各種設定ファイル＆参考資料


形態素解析システム

インポート関連『ひまわり』フォルダの.himawari_import_config.xml「設定ファイルリファレンスマニュアル」の「インポート関連」

テキスト変換規則
『ひまわり』フォルダの.himawari_annotator_config.xml『ひまわり』フォルダの resources/unidic/dicrc （辞書情報）「設定ファイルリファレンスマニュアル」の「アノテーション関連」「設定ファイルリファレンスマニュアル」のimport / text_transformation_definition 要素『ひまわり』用データ作成一般38『ひまわり』HP ⇒ 「簡単な検索用データの作成方法1」『ひまわり』HP ⇒ 「簡単な検索用データの作成方法2」