キーワードインデックス:サロゲートペア文字が消える

Product :4D - 4D Server
4D : v16、v16R5、v15

キーワードに分割された内容を確認したところ、サロゲートペア文字が除外されているようです。
異体字セレクターの方は、セレクター部分のみ除外されています。

[]22177167;“Your comment here…”[/]

あと、
辞書の問題だと思うのですが、キーワードの分割状態があまり良くないのでユーザー辞書を登録することはできるのでしょうか?
できればhttps://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.mdmecab-ipadic-NEologd >の辞書を使いたいです。

キーワードインデックスがはじめて利用できるようになったのは,4D v11 SQLでのことで,ICUのワードブレークに基づき,空白や句読点のような「非文字」で文字列をスプリットするよりも自然に分解されるのが特徴でした。

ワードブレイクは,本来,ダブルクリックした文章のハイライト範囲を特定するための仕組みで,データベースのキーワード検索を想定したものではありませんが,それでも,英仏独などの西欧言語では,かなり実用的なレベルで全文検索ができます。なお,日本語版の4Dでも,データベース言語を英語などに変更すれば,ICUがキーワード分解に使用されます。(アポストロフィや数値の桁区切りに注目)

[]22384631;“Your comment here…”[/]

Macabは,ICUのワードブレイクによるキーワード分解が日本語には不向きなため,ICUに代わる手段として,v14で追加されました(日本語版のみ)。Mecabは,キーワード分解コマンドや文字列演算子の「%」だけでなく,インデックス検索にも使用されているため,辞書を追加したり,バージョンを更新したりすれば,インデックスの再構築が直ちに必要となります。ストラクチャとデータファイルに辞書の名称とバージョンが記録されているのは,そのためです。

Mecabは,辞書を追加したり,更新したりできるように作られていますが,4Dがインデックスを構築するときに使用されるルールを少しでも変更すれば,インデックスをすべて作り直さなければなりません。v11の途中でICUを3.6から3.8にアップデートしたときには,かなりの問題になりました。その後,バージョンの途中ではライブラリを更新することは控え,4.8 (v14), 5.6 (v16) とアップデートを重ねています。

もし,専門用語を動的に登録できるような仕組み,あるいは辞書を選択できるような仕組みを想定されているのであれば,キーワード分解ツールや辞書コンパイルツールを別に用意し,抽出されたワードをオブジェクト型フィールドに保存する(つまり,データベースエンジン自体のキーワード検索には頼らない)ほうが良いのかもしれません。そうすれば,辞書が変えられたとしても,すべてのインデックスを破棄しなくて済みます。

ちなみに,4DのMecab辞書は,ファイルサイズを抑えるため,形態素や読みの情報をすべて除去したものが使用されています。エンコーディングはUTF-8なので,若干,ファイルサイズは,Mecab標準のShift_JISよりもおおきくなっています。(Mecabの辞書コンパイルはUTF-16をサポートしていません)。異体字セレクターは,文字列中にU+0000が出現するので,C言語の文字列端末として処理されるのではないでしょうか。サロゲートペアも,個別の文字として評価され,「文字ではない」という処理になっているように想像します。

4Dに含まれているオープンソースのプロジェクトは,原則として「改変しない」決まりになっています。ライブラリがアップデートされたときに変更内容が失われてしまうためです。その意味でも,やはり,キーワード分解パートをプラグインとして切り離したほうがご期待に沿えそうな気がします。

最後に,v16(正確には15R5)でICUが56.1にアップデートされましたが,このバージョンのICUでは「言語を自動的に判定して日本語・タイ語・クメール語・中国語・韓国語のワードブレイクができる」とされています。開発部では,日本語版独自のMecabをやめ,キーワードインデックスをICUに統一できるのでは?と期待したようですが,結果は散々なものでした。ちなみに,ICUの分解はSafariのダブルクリック選択範囲と同じです。

ICU:

[]22384834;“Your comment here…”[/]

Mecab:

[]22384846;“Your comment here…”[/]

もし,利用価値がある,ということでしたら,前述したように,辞書を追加できるキーワード分解ツールと辞書コンパイルツールをプラグインとして作ってみたいと思います。Mecabでサロゲートペアや異体字セレクターをどこまでサポートできるか,やってみなければわかりませんが・・・

そうではなく,飽くまで4Dデータベースエンジンレベルでの実装を望まれるのでしたら,将来のバージョンを目標に新規フィーチャーリクエストとして打診したいと思います。

お世話になります。

サロゲートペアの件ですが、windowsのコマンドライン版でテストしたところ、ちゃんと拾えているので4D側の実装の問題ではないかと思います。

■入力
Fes International フェズインターナショナルの辻󠄀です。こちら葛󠄀飾区公園前派出所の近くの𠮷野家に𩸽定食を食べました。

■結果
Fes International フェズインターナショナル の 辻 󠄀 です 。 こちら 葛 󠄀 飾 区 公園前 派出所 の 近く の 𠮷 野家 に 𩸽 定食 を 食べ まし た 。

辞書の方ですが差し替えもしくは、ユーザー辞書の追加ができるのであればよろしくお願いします。
コマンドラインのmecabは、辞書を指定できるので同じ様にできないかと思いました。

キーワードインデックスを指定する箇所はそんない多くないので、辞書を差し替えた後、
ストラクチャエディタでインデックスのチェックを一旦はずして、再指定すれば作り直されると考えているのでそんない負担になることはないかと考えています。

例えば、「𠮷野家」であって「𠮷 野家」この様に分割されるのはよくないと思います。
「葛󠄀飾区」,「消化器」,「栄養障害」なども、「葛 󠄀 飾 区」,「消化 器」,「栄養 障害」ではなくて「葛󠄀飾区」,「消化器」,「栄養障害」ではないかと。

オブジェクトフィールドに登録するのはアイデアとしては良いと思いますがキーワードインデックスと比較して検索速度的にどうなのでしょうか?
速度的にも問題ないのであれば、キーワードインデックスやmecabの実装自体が不要になりそうですね。

できるのであればmecab自体はプラグイン化して結果をキーワードインデックスに登録するコマンドもしくは仕組みに変更できないでしょうか?
プラグインをさしかえれば自由にカスタマイズできるのではないかと思います。例えばmecab以外の形態素解析を使うなど…
あと不要なキーワードがあるのでそれは除外したいです。例えば「の」や「です」「。」などです。

確認の為、GET TEXT KEYWORDSの結果をみてみたら、一応除外はされている様ですね。
失礼いたしました。
なにかしらの除外リストがあるようですので、こちらも編集したいです。

なぜか「の」は残っている様です。 :slight_smile:
「近く」「食べました」も意味として一般的すぎるので除外したいです。

「4DJapan」の分かち書きが変ですね。「4」と「DJapan」に分割されています。
これでは「4D」でも検索されませんし「Japan」「4DJapan」でも検索できません。 :frowning:
キーワードとしは、「4D」「Japan」「4DJapan」で登録されている事が望ましいです。

Mecabは,形態素解析エンジンですので,
除外リストといったものはなく,
辞書ファイルと呼ばれるものは,
日本語の記事を大量に「学習」した結果,
出来上がる文法アルゴリズムのようなものになります。

「の」が除外されていのではなく,「助詞」が除外されている,ということです。
4DJapanは,固有名ではないので,DJapanが単位,4が値という解釈になるのだと思います。
「4D Japan」でお試しください。

: Keisuke MIYAKO

Mecabは,形態素解析エンジンですので,
除外リストといったものはなく,
辞書ファイルと呼ばれるものは,
日本語の記事を大量に「学習」した結果,
出来上がる文法アルゴリズムのようなものになります。

「の」が除外されていのではなく,「助詞」が除外されている,ということです。
4DJapanは,固有名ではないので,DJapanが単位,4が値という解釈になるのだと思います。
「4D Japan」でお試しください。

コマンドラインのmecabでは、「の」や「です」なども表示されていたので、
4D側でMecabで分かち書き後に独自に除外しているのかと考えてました。

除外リストは必要だと思いいます。できれば実装をお願い致します。
リストの内容については、デベロッパー側で編集可能にしてほしいです。
というかできないと困る場面が出てきると思います。例えば「極秘」や「重要書類」など。

「4D Japan」だと「4」「D」「Japan」に分かち書きされてしまいます。解決にはなっていませんよね。

なのでMecabの辞書を独自に更新できう様にするか、こういうのを利用したいhttps://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.mdmecab-ipadic-NEologd>とお願いしています。
おもな用途としては特定業種の専門用語が該当するかと思います。

「4D Japan」は独自に更新しないといけない方だと思います。 :mrgreen: