1

電話のキーパッド1のように、電話のキーパッドに基づいてアルファベット検索を実装しています

ユーザーがたとえば2と入力すると、組み合わせで{A、B、C}が得られます。ユーザーが23と入力すると、{AD、AE、AF、BD、BE、BF、CD、CE、CF}の組み合わせが表示されます。入力を続けて組み合わせを作成すると、何千もの組み合わせが得られ、検索プロセスが非常に遅くなります。そこで、CF BD CDのような非論理的な組み合わせを削除するアルゴリズムを実装したいと思います。つまり、論理的には、これらの組み合わせで始まる名前はなく、おそらく母音のない2つの子音です。このようにして、検索を絞り込みたいと思います。Cで実装されたそのようなステートマシンについて知っている人はいますか?

4

2 に答える 2

4

検索しているデータセットに基づいて、有効なプレフィックスのトライを作成できます。部分的な入力をそれと照合するのは非常に簡単です。

于 2013-03-26T08:10:26.463 に答える
1

言語データに関しては、「非論理的」は「ありそうもない」の良い代用ではないことに注意してください。これは、名前に関しては特に当てはまります。例として、英語の「子音」の標準的な定義によれば、私の家系の名前は4つの子音で始まります。それがドイツのファッションの後に書かれるとしたら、それは5から始まります。このような問題について考えるときは、次の点に注意してください。

  1. 音は文字ではなく、文字は音ではありません。ほとんどの正書法システムでは、文字から音へのマッピングは1:1ではありません。
  2. 多くの言語には予期しない音節核があります。たとえば、Tamazight Berberはm、母音が一般的に英語で行うように、音が音節核の役割を果たす音節を許可します。CCmCしたがって、ベルベル語の名前は(Cは子音を表す)のように見え、その言語で完璧になります。ベルベル出身の人が英語で同様の正書法を使用する可能性は低くありません。これは、素朴なシステムでは「非論理的」であると除外されます。
  3. 最後に、英語で外国語の名前や単語を書くための多くのシステムは、英語で外国語の音を表すためにダイグラフまたはトリグラフ(2文字と3文字の組み合わせ)を使用します。これにより、違法な子孫クラスターのように見えるものが作成されます。私たちは英語がそれを行うことを知っています(sh1つの音を表します。ポイント1を参照)が、これは外国語を書き写すときに特に当てはまります。

したがって、期待する名前の正書法の規則をよく理解していない限り、単純なシステムを使用して正当な名前を除外する可能性があります。

于 2013-03-28T19:42:02.493 に答える