初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2020-06-06 13:21:55

dong
Guest

フィールド内容同士で関連がありそうな別レコードを取得する方法は

filemakerWin19にしようか検討中の18です。

まだ新機能を把握していないのですが、
フィールド内容が「ざっくりと似ている」別レコードを関連レコードとして表示することはできるでしょうか。

たとえば、
あるレコードのテキストフィールドに
「昔々あるところにおじいさんとおばあさんが」と入っているとして

別レコードの
「昔々あるところにたいそう美しい娘がおったそうな」
は関連する

しかし、
「じさまと暮らす豆太は、5歳になっても夜中に一人でせっちんに行けない」
と入力されているレコードは関連されない

ということができないか・・・?
と検討中なのです。

フィールドの索引を取得して、索引同士でリレーションし関連数がX以上なら・・
なども考えたのですが、そもそもそのレコードの特定フィールドにある索引を取得できるのか、というところからして手詰まりです。

漠然とした要望で申し訳ないのですが
FM19のAI学習機能を使ったり、他の機能を活用したりで
なにか出来そうなヒントをお持ちの方がいらっしゃったら教えていただけると助かります

#2 2020-06-06 19:10:45

koeda
Member

Re: フィールド内容同士で関連がありそうな別レコードを取得する方法は

「FM19のAI学習機能」と書かれていますが、FileMakerがAI機能を装備したわけではありません。
AppleのOSが備えるCore MLという機械学習モデルを取り扱うフレームワークを呼び出すための
スクリプトステップと関数が追加されただけです。
Core MLはAppleのOSに依存するので、動作はmacOSとiOSとiPadOSに限定されます(Win版はスクリプトの作成のみ)。
また、現在のところCore MLの自然言語処理に日本語は含まれません。

個人的には、まずはiPhoneやiPadのカメラを活用した画像認識のような用途からかな?と思っています。

Last edited by koeda (2020-06-06 19:41:42)

Offline

#3 2020-06-07 09:55:26

koeda
Member

Re: フィールド内容同士で関連がありそうな別レコードを取得する方法は

前向きなアイディアも出さないと、ですね。

オープンソースの形態素解析用ライブラリMeCabとその分かち書き辞書mecab-ipadic-NEologdを使って例文を解析するとそれぞれ以下のようになります。
※出力は以下の通りです。
表層形(タブ)品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音

FileMakerからMeCabを呼び出すことは容易なので、
問題は、こうした解析結果をもとにどうやって類似度を算出するか、ですね。
当然ですが、類似度の算出基準は使用目的によって変わってくるものと思われます。
一案としては名詞や動詞(と読み)に着目して比較用の索引テーブルを作り、出現回数で比較するとかでしょうか?

"昔々あるところにおじいさんとおばあさんが"

昔々	名詞,固有名詞,一般,*,*,*,昔々,ムカシムカシ,ムカシムカシ
ある	動詞,自立,*,*,五段・ラ行,基本形,ある,アル,アル
ところ	名詞,非自立,副詞可能,*,*,*,ところ,トコロ,トコロ
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
おじいさん	名詞,一般,*,*,*,*,おじいさん,オジイサン,オジーサン
と	助詞,並立助詞,*,*,*,*,と,ト,ト
おばあさん	名詞,一般,*,*,*,*,おばあさん,オバアサン,オバーサン
が	助詞,格助詞,一般,*,*,*,が,ガ,ガ

"昔々あるところにたいそう美しい娘がおったそうな"

昔々	名詞,固有名詞,一般,*,*,*,昔々,ムカシムカシ,ムカシムカシ
ある	動詞,自立,*,*,五段・ラ行,基本形,ある,アル,アル
ところ	名詞,非自立,副詞可能,*,*,*,ところ,トコロ,トコロ
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
たいそう	副詞,一般,*,*,*,*,たいそう,タイソウ,タイソー
美しい	形容詞,自立,*,*,形容詞・イ段,基本形,美しい,ウツクシイ,ウツクシイ
娘	名詞,固有名詞,一般,*,*,*,娘。,ムスメ,ムスメ
が	助詞,格助詞,一般,*,*,*,が,ガ,ガ
おっ	動詞,自立,*,*,五段・ラ行,連用タ接続,おる,オッ,オッ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
そう	名詞,接尾,助動詞語幹,*,*,*,そう,ソウ,ソー
な	助詞,終助詞,*,*,*,*,な,ナ,ナ

"じさまと暮らす豆太は、5歳になっても夜中に一人でせっちんに行けない"

じさ	名詞,一般,*,*,*,*,時差,ジサ,ジサ
ま	フィラー,*,*,*,*,*,ま,マ,マ
と	助詞,格助詞,引用,*,*,*,と,ト,ト
暮らす	動詞,自立,*,*,五段・サ行,基本形,暮らす,クラス,クラス
豆	名詞,一般,*,*,*,*,豆,マメ,マメ
太	名詞,固有名詞,人名,名,*,*,太,フトシ,フトシ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
、	記号,読点,*,*,*,*,、,、,、
5歳	名詞,固有名詞,一般,*,*,*,5歳,ゴサイ,ゴサイ
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
なっ	動詞,自立,*,*,五段・ラ行,連用タ接続,なる,ナッ,ナッ
て	助詞,接続助詞,*,*,*,*,て,テ,テ
も	助詞,係助詞,*,*,*,*,も,モ,モ
夜中	名詞,一般,*,*,*,*,夜中,ヤチュウ,ヤチュー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
一人	名詞,一般,*,*,*,*,一人,ヒトリ,ヒトリ
で	助詞,格助詞,一般,*,*,*,で,デ,デ
せっちん	名詞,一般,*,*,*,*,雪隠,セッチン,セッチン
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
行け	動詞,自立,*,*,一段,未然形,行ける,イケ,イケ
ない	助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ

「じさま」が「時差+ま」と解釈されたり、「豆太」が「豆」と「太」に分割されるなど、多少辞書に手を入れるか、結果を手で修正する必要がありそうです。

Last edited by koeda (2020-06-07 11:33:45)

Offline

#4 2020-06-07 13:01:42

medicalmac
Member

Re: フィールド内容同士で関連がありそうな別レコードを取得する方法は

目標とする言語が、口語だったり、この場合のように現代用語でない場合、mecabを使うと上手に切れない、あるいは専門用語の辞書登録が必要になると思います。なので、まずアノテーションのインタフェースをお造りになって、重要と思われる単語について、ある程度辞書を整備されたらいかがでしょうか。この場合、「、。」などの記号や句読点でまず切断。その後私の場合は次のカスタム関数で文字種類で切断をしています。

Let(c=Code(chr);
If(Position("0123456789..%ー&+@!$";chr;1;1)>0;2 ;//数値
  Case(c ≥ 65313 and c ≤ 65370 ;3 ;//アルファベット
          c ≥ 12353 and c ≤ 12435 ;5 ;//ひらがな
    c ≥ 12449 and c ≤ 12534 ;7 ;//カタカナ
          9//その他
   )
))

また他にも
"¶< ()#、,,。:;【】[]○●□■{}〈〉『』〔〕「」・→/|+&    @<>=±①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳"
を切断用記号として弁別しております。

用途によって異なると思いますが、例えばよく使われる(というかアノテーション時に重要と思われる単語の接頭語として過剰に切断されると困るもの)を区別して処理しています。
"右¶左¶慢性¶急性¶陳旧性¶術後¶両側¶秒¶分¶~¶本日¶明日¶昨日¶多発¶本日¶"
同様に接尾語として
"疑¶症¶障害¶低下¶上昇¶異常¶継続¶陽性¶陰性¶後¶?¶急性増悪¶術後¶持続¶穿孔¶形成¶処方¶合併¶出現¶行¶腫張¶"
などを登録してスクリプト内で処理をわけています。

これには単位を知っていた方がいい場合など、いろいろな処理を加えるなど工夫をしてください。
"CP¶mg/dl¶RA¶"

それと、事前処理辞書を用意するとなおいいと思います。単純にsubstituteで事前に置き換えていきます。このとき、原則として文字種類で単純に切断されるとを考慮して辞書を整備されることお勧めします。

こうして文字を一旦、大きな塊で切断していただき辞書を作成していきます。できれば例題は5000文程度あるといいと思います。
私の場合は、全処理用ルール辞書を600程度、専門用語辞書を5万、検査用語1万に加えて、アノテーションから追加した専用辞書を8000ほど登録して処理しています。

この処理系を通して一旦文章を文字群で切断し、同じ意味群を一つのコードに集約し、改行コードを加えてindexに羅列していただきます。
この時にアノテーション作成時に重要語句として重み付けをしていただき、index結合時に重み付けでソートしていき、上位を採択していけばある程度長い文節もインデックスができるのではないでしょうか。

同じエンジンで、検索語もインデックス化して、上位インデックスをグローバルフィールドに順番にいれていき、重み付けてでリレーション先を評価し、ポイント付して順位で並べてみたらいかがでしょうか。ただ、これだと短い文章のヒット率が下がる可能性があるので、点数付けのヒット率の調整が必要だと思います。

文節による仮定、否定語、文章全体の書き方による肯定、否定フレーズの抽出などを使って、文章の添削をおこない文章を短くしてしまい特徴点を減らしているのと、文章自体の記載者の属性DBによる処理、アノテーションから略語に重点をおくという処理や、文脈類推を併用しており、インデックス作成はには標準コードをつかうなどしておりますので、そのままでは参考にならないと思いますが、基本おやりになりたいことをするには、アノテーションのUIを作るところから始めることをおすすめします。

19にアップしなくてもできると思います。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 584.47 KiB (Peak: 589.72 KiB) ]