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

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

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

You are not logged in.

Announcement

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


#1 2018-07-06 22:31:30

灸太郎
Guest

スペルチェッカーの自作方法

FM14のAdvanceを使っています。

以下のような自作のスペルチェッカーのスクリプトを作りたいと思っています。

テーブルAとテーブルBがあります。
テーブルAにはそこそこ長い文章(数百~数千語)が入っているフィールドA1があります。このフィールドA1にある文章の文字や単語を検索置換したいと思っています。

その置換したい文字や単語が入っているのがテーブルBで、テーブルBのフィールドB1には置換前単語(文字)、フィールドB2には置換後の単語(文字)が入っています。

テーブルAの任意のレコードを参照しているときにスクリプトを実行し、テーブルBに入っている全レコードの置換前の単語(文字)を置換後の単語(文字)に置き換えるようなスクリプトをつくりたいと思っています。

置換単語の数が少なければ「検索/置換」のスクリプトステップを並べれば簡単なのですが、そこをレコードに置き換えて任意に増減したいのです。

どのようにすればいいでしょう?

#2 2018-07-07 00:54:19

Shin
Member

Re: スペルチェッカーの自作方法

単に loop を回すだけで良いのでは

Offline

#3 2018-07-07 01:14:11

Hiro
Member

Re: スペルチェッカーの自作方法

Substitute関数の置換が良いでしょう。確か1000組まで入れ子の置換ができたと思います。
かりに、テーブルBに入っている全レコードが1000を超えるようなときでも
何度かに切り分けて全レコードをこなす様にすれば対応できると思います。
アイデアとしては、下記式をテキスト計算で生成して、
それをEvaluate("式")で実行すれば良いでしょう。

生成式 (テキスト記述) =
"
Substitute(文章フィールド
; [\"置換前1\";\"置換後1\"]
; [\"置換前2\";\"置換後2\"]
; [\"置換前3\";\"置換後3\"]
; ・・・・・
; ・・・・・
; [\"置換前n\";\"置換後n\"]
)
"

どのようにすれば、上記の式がテキスト計算生成できるか、考えてみて下さい。
ヒントは、「フィールド内容の全置換」で変数に目的の式の繰り返し部分を積み上げてゆきます。

・・・・と、書いてきて、
おっと、閃きました。
何の事はない、「フィールド内容の全置換」で1レコード1組づつ直接 Substitute 置換してしまえば良いですネ!!
この場合、1000の制限もありませんし、

Last edited by Hiro (2018-07-07 01:35:05)

Offline

#4 2018-07-07 09:52:55

チポ
Member

Re: スペルチェッカーの自作方法

テーブルBの全レコードを見て、
B1とB2に同じ値が入っている場合が有ると、
変換を繰返すことがありますね。

これを防ぐには変換の順に注意が必要ですね。


スレ主さんは1レコードで、と言っている様ですが、
その場合、全置換とフィールド設定ではどちらが早いのでしょう?
単なる疑問ですが・・

Offline

#5 2018-07-07 10:02:51

Shin
Member

Re: スペルチェッカーの自作方法

大きな疑問があるのですが、置換後の単語があるとして、置換前の単語はどうやって集めるのでしょう。
1文字違いなどの単語が入るのが普通でしょうが、それですとほぼ無限に近い膨大な候補になってしまいます。オールマイティーを使うとなると検索するしかないですし。

Offline

#6 2018-07-07 17:55:27

灸太郎
Guest

Re: スペルチェッカーの自作方法

アドバイスありがとうございます。
テキストは中国語の簡体字の文章をコンバーターを使って繁体字になおし、それでも治りきらないのを手作業で修正して底本を作るということを考えているのです。
テーブルAの側でloop を回すのはわかるのですが、テーブルBのサイズの大きなフィールドデータの持ってきかたがわからなかったのですが、アドバイスをヒントに今日明日やってみます。

#7 2018-07-07 21:22:40

Hiro
Member

Re: スペルチェッカーの自作方法

勘違いしてるようなので、老婆心...です、

  • loop を回すのはテーブルAでなく、テーブルBの側です!!

  • ですから、フィールドデータを持って来るのは、テーブルAの文章データの方です。

  • 1レコードづつ繰り返し置換処理していくループスクリプトに代わる、
    一発ショートカット処理が「フィールド内容の全置換」なのですが、……

  • 繰り返しループ・スクリプト処理より、断然、簡便でしかも早いと思います。


所で、恥ずかしながら、全く無知の門外漢なので、教えてください。
FMでは中国語の簡体字と繁体字を同時に混在して扱えるのでしょうか?
Unicodeだから関係ない??

Last edited by Hiro (2018-07-07 22:02:47)

Offline

#8 2018-07-08 12:45:36

Hiro
Member

Re: スペルチェッカーの自作方法

>#6 『それでも治りきらないのを手作業で修正して底本を作る』
そうだと、底本、テーブルBのレコード数は1000には満たないでしょうか?
それなら、先の>#3の提案式をカスタム関数化するのが、
今回意向には最適かもしれない!
手作業の修正 が稼働後も頻繁にあるかで、

  • あるなら、カスタム定義式をグローバルフィールドへ修正再計算・結果保存して、Evaluateで式実行。

  • めったにないなら、Advanced版でカスタム関数に設定定義しておいて、必要になった時に修正計算結果を手動で再定義し直す。

Last edited by Hiro (2018-07-08 13:21:12)

Offline

#9 2018-07-08 19:23:56

灸太郎
Guest

Re: スペルチェッカーの自作方法

Hiroさん
>loop を回すのはテーブルAでなく、テーブルBの側です!!
すいません、書き間違えてました。ご指摘ありがとうございます。
そこの部分は理解しています。

>FMでは中国語の簡体字と繁体字を同時に混在して扱えるのでしょうか?
変換ツールでUnicodeに大雑把に変換してからFMに取り込んでいます。

>そうだと、底本、テーブルBのレコード数は1000には満たないでしょうか?
現時点では1000よりはるかに少ないですが、手分けして作業するので可変にしておきたいんです。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 7 queries executed - Memory usage: 521.59 KiB (Peak: 526.13 KiB) ]