ChaSen(茶筌)の概要

 ChaSen(茶筌)は、奈良先端科学技術大学院大学松本研究室で開発された、入力文を単語単位に分割し品詞を付与するツールである。JUMANをベースに開発された。JUMANでは、形態素の連接コストを人手で定義していたが、茶筌では統計処理(HMM)によって自動的に連接コストを推定するように改善された。解析ミスデータを蓄積して精度を高める工夫もされている。 

 

■前提プログラム

・iconv ・・・・・ 文字コード変換プログラム

Darts-031 ・・・ Double-Arrayを構築するための シンプルな C++ Template Library。

Double-Array は Trie を表現するためのデータ構造。ChaSenMeCabに採用されている。LGPLライセンスのフリーソフト

 

■ダウンロード

chasen  ・・・・ 茶筌の本体

・ipadic ・・・・・ 日本語辞書

・UniDic ・・・・ 日本語辞書

 

■ライセンス

 特になし!? 「ソフトウェアの使用,改変,再配布については,特に制限を課すことはしない。2.3.0 より、広告条項がなくなりました。」とあるので、ご自由に!ってことかな。

 

 

 

---------------------------------------
ITとことんのトップページ

 ┗■形態素解析とかのトップページ

   ┗■本ページ

 

 

JUMANの概要

 

 JUMANは、京都大学の黒橋・河原研究室で開発された、形態素解析システムだ。

UNIX系や、Windows(試験版。一部機能に制限あり)で動作するC言語で書かれたプログラムだ。2019年4月時点の最新バージョンは7.0だ。

 解析に使用する辞書は、基本的な単語については人手で入力した。その後Webをクローリングし自動獲得した単語を追加した。

 JUMAN以前の商用形態素解析器は、辞書は固定で単語を増やす事はできなかったが、JUMANは上記のようにあとから追加できる。しかし、連接コストについては人手であらかじめ定義していた。

 

スタンドアロンモード

 juman と入力すると、標準入力(STDIN)から文章を入力し、形態素に分割し、標準出力(STDOUT)に分割結果を出力する。

 

■サーバモード

 juman -S と入力すると、サーバとして起動する。別のマシンにもJUMANをインストールし、juman -C <サーバのhostname> と入力することで、JUMANサーバに接続される。でも・・・Windows版では同時に1人しか接続できない模様。残念な作りだ! しかも、最初の1人がサーバとの接続を切ると、サーバも一緒に終了してしまう。これまた残念な仕様だ。Windows版は実験版だからかもしれない。 ヘルプには、「ネットワーク環境での複数ユーザ による利用などに適したモードである」と書かれているので、UNIX版ではきっと複数人同時接続、同時利用ができるのかも!?

 

Perlモジュールもあるよ

 UNIX版にはPerlのモジュールも提供されている。こんな感じで使える。

 -----------------------------------------------------------------------

use Juman;

$juman = new Juman;

$result = $juman->analysis( "この文を形態素解析してください." );

print $result->all();

-------------------------------------------------------------------------

 

 ■動作例

動作させてみた。「ドラえもん」の解析結果に注目すると「自動獲得」となっている。クローリングによって機械的に集めた語句であると思われる。

f:id:ittokoton:20190428023136p:plain

 

 

 

 

---------------------------------------
ITとことんのトップページ

 ┗■形態素解析とかのトップページ

   ┗■本ページ

 

 

systemd関連

 

 

 

■service のRHEL 7版

systemctl start サービス名

systemctl stop サービス名

systemctl daemon-reload

systemctl -n 100 status サービス名

systemctl enable サービス名

systemctl is-enabled サービス名

systemctl disable サービス名

 

■systemdのログレベル

・現在のログレベル表示

 systemctl -pLogLevel show

 

・ログレベルの一時的変更

 systemd-analyze set-log-level ログレベル

 ※ログレベル={emerg | alert | crit | err | warning | notice | info | debug}

 

・ログレベルの恒久的変更

vi /etc/systemd/system.conf
#LogLevel=info
LogLevel=notice

 

■サービスの起動順序を図で描画

systemd-analyze plot > result.svg

このsvgをブラウザへドラッグ&ドロップ

 

■Unitファイルの書き方

[Unit]

After=network.target

 

[Service]

Type=forking

TimeoutSec=30

ExecStart=aaaaaaaa

ExecStop=bbbbbbbb

KillMode=SIGCONT

PrivateTmp=false

 

[Install]

WantedBy=multi-user.target

 

※マシンをShutdownすると・・・

(1)まずは、メインプロセスに対してKillModeに指定したシグナルが投げられる。省略時はSIGTERM。

(2)その後ExecStopが実行される。ExecStopに停止用のコマンドを書く場合は、KillModeで指定したシグナルが邪魔な時がある。そんなときは、KillModeに無意味なシグナル(通常SIGCONT)を書いてダミー化すると良い。

(3)メインプロセス(systemdがどれをメインプロセスと認識するかは、Typeの指定値によって変わってくる)の終了をTimeoutに指定した秒数待つ。それでも終了しない場合は、SIGKILL(9)で殺される。

 

 

 

 ---------------------------------------

ITとことんのトップページ
┗■Linux関連のトップページ
 ┗■本ページ

 

 

 

 

Apache Solrの基本的な構成

Apache Solr の基本的な使い方をまとめる。

 

■Solrで検索ができるまでの作業順番 (DB操作と対比させてみよう)

(1)コアの登録 (データベースを作るみたいなイメージ)

(2)スキーマの登録 (データベース中にテーブルを作るみたいなイメージ)

(3)ドキュメントの登録 (テーブル中にレコードを登録するみたいなイメージ)

(4)インデックスの作成 (テーブルにIndexを作成するみたいなイメージ)

(5)検索実行 (SELECT文を発行するイメージ)

 

 

(1)コアの登録

何はともあれ、Solrでは、コアを作ることから始める。DB操作に例えるなら、「データベースを作る」みたいな意味合いです。一番の基礎になる入れ物のことです。

 

 ・コマンドで「コア」を作る場合

 参考にしている市販本(技術評論社 改定第3版 Apache Solr入門)ではSolr 6.3.0を使っており、

「configsetsディレクトリにプレインストールされている3つのコアの中から雛形とするコアを一つ選び、solr create_coreコマンドの -d オプションで指定する」

と書いてあるんだけど、Solr 8.0.0には、"_default" と "sample_techproducts_configs"の2つのコアしかないぞ!!!

  "_default" を指定して、とりあえず作ってみる。

 

 solr create_core -c solrbook -d _default

 

solr.cmdの中のコメントを見たところ、-d を省略すると "_default" が仮定されるって書いてあったw。この場合だと、-d 以降は指定しなくていいね。

あと、この市販本(Apache Solr入門)には、schema.xmlについて、多くのページを割いて説明しているんだけど、残念ながらSolr 8.0.0には、schema.xmlは無いし、solrconfig.xml中にschemaFactoryの設定も無いね。Solr 6.3.0の頃は、まだschema.xmlからmanaged-schemaに変わった直後で過渡期だったのでschema.xmlをメインに書いたんだと思うけど、Solr8.0.0が出ている今となっては、schema.xmlの影も形も見当たらないので、ぜひ改定第4版出して!! (初版、2版、3版と、すべて購入した私w 2版に至っては紙とオンライン書籍と両方買ったぞw) 正誤表もかなり溜まって来てるしw ちなみに正誤表自体に1か所誤りがありますよ! ("P231 L15"は、"P236 L15"の間違いじゃないかな)ここで言ってもだめかw

 

(2)スキーマの登録

スキーマには、複数のフィールドがある。

・フィールドには、フィールド名とフィールドタイプがある。

・フィールドタイプには、テキスト系と非テキスト系がある。

 ・テキスト系は、「単語分割」をして部分一致など高度な検索ができる文字。

 ・非テキスト系は、完全一致検索しかできない単純な文字。

 なので、"文字"と言ってもテキスト系の文字と、非テキスト系の文字がある。

・テキスト系は、高度な検索を実現するためにアナライザを持つ。

 

スキーマ

  ┣━フィールド1

  ┃  ┣━フィールド名

  ┃  ┗━フィールドタイプ

  ┃    ┣━(or)テキスト系

  ┃    ┃  ┗━アナライザ

  ┃    ┃    ┣━文字フィルタ(任意)

  ┃    ┃    ┣━トークナイザ(必須)

  ┃    ┃    ┗━(トークン)フィルタ(任意)

  ┃    ┗━(or)非テキスト系

  ┃

  ┣━フィールド2

  ┗━フィールドn

 

日本語用の「形態素解析」用のトークナイザとして、JapaneseTokenizerFactoryがある。形態素解析とは、辞書(kuromoji)を用いて日本語を意味のある単語に分解する事。kuromojiには20万語以上の単語が含まれている。

 

---------------------------------------
ITとことんのトップページ
 ┗■Apache Solrのトップページ
   ┗■本ページ

 

 

Jettyの概要

■特長

 100% Pure Javaの軽量サーブレットコンテナ。組み込みのWebサーバとしてもよく使用される。HTTP/2やWebSocketにも対応している。現在はEclipse Foundationで開発されている。軽量Tomcatと言ったところか。

 

■ライセンス

 Apache License 2.0 と Eclipse Public License 1.0 のデュアルライセンスである。再配布の際には、どちらか好きな方を選べる。

 

■インストール

 Jettyホームページからダウンロードする。zipを解凍してその辺に置いたらインストール終わり。

 

 ■デモの起動

 cd demo-base

   java -jar ../start.jar

 起動に15秒くらいかかったぞ。

f:id:ittokoton:20190405040844p:plain

 

 

---------------------------------------
ITとことんのトップページ
 ┗■Jettyのトップページ
   ┗■本ページ
 

 

 

 

 

Apache Solrの概要

Apache Solr (アパッチ ソーラー)について調査する。

 

■概要

フリーの全文検索エンジン全文検索ライブラリであるApache Lucene(ルシーン)を使用している。

 

■ライセンス

 Apache License 2.0

 

■特徴

 SolrにHTTPリクエストとして検索キーワードを投げ、検索結果をJSON形式で取得する、といったインタフェースを持っており、色々な言語(コンパイラ言語やスクリプト言語)のプログラムからの検索も可能となっている。

 インデックスのキャッシュによる高速化、インデックスのレプリケーションによる負荷分散や冗長化、複数Solrによる分散検索(横串並行検索)、SolrCloudによる大規模対応も。

 様々なファイル形式に対応したテキスト抽出機能を備えたインデクシング機能がある。

 

■ダウンロード

Apache SolrのページのDownloadリンクからダウンロードできる。2019/4/11現在の最新版は、8.0.0だ。zipを展開してその辺に置いたらインストール完了。

 

■前提プログラム

Java 8以上があればOK。Path環境変数にbinディレクトリを追加するのと、JAVA_HOME環境変数の設定は行っておこう。

 

■起動方法

100% Pure Javaなので、どのOSでも動く。Windows用にbinディレクトリに、solr.cmd っていうコマンドが置いてあるので、これを起動。

cd bin

solr.cmd start   ※".cmd"は省略できるので、solr start でもいいね

 

solrコマンドは、デーモンプロセスを作成したあと、終了した。

ブラウザから、Solrの管理GUIである、http://localhost:8983/ にアクセスすると、トップページが表示された。

 

■Solrへのリクエスト方法(検索方法)

Solrへのリクエストは、基本的にHTTPを用いる。つまり、HTTPさえ投げられるならばどこからでも繋がる。例えば・・・

(1)Webブラウザから直に

(2)JavaScript

(3)Python

(4)Java  (SolrJ)

(5)Ruby

(6)Curlコマンド

(7)Solrの管理UIから、という手も。

などなど。でも、今時通信ができない言語なんて聞いたことがないから、どの言語でも可能なんじゃね? 

 

■Solrからのレスポンス形式

リクエスト時にwtパラメタでレスポンス形式を指定できる。下記の形式をサポートしている。

csv (値をコンマで区切る形式)

json (キーと値をコロン(:)で区切る形式)

・geojson (基本jsonだが、位置情報を含めた形式)

・javabin (カスタマイズ可能なバイナリ形式。SolrJもこれを利用)

php (phpの配列型に直接代入できる形式)

・phps (phpの配列型データをシリアライズして文字列にした形式)

python (Pythonの配列型に直接代入できる形式)

ruby (Rubyの配列型に直接代入できる形式)

・smile (jsonベースのバイナリ転送形式。":)"で始まるためこの名が付いた)

・velocity (Apache Velocityの形式・・・・・わ、わからんw)

・xlsx (Microsoft Excel形式)

xml (XML形式)

xslt (XMLスタイルシート形式)

 

 

 

---------------------------------------
ITとことんのトップページ
 ┗■Apache Solrのトップページ
   ┗■本ページ