質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

7回答

1618閲覧

何万語の中から該当する語を瞬時に検索する方法

dedede914

総合スコア62

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

3クリップ

投稿2022/01/26 20:31

この質問はこのサイトの趣旨に沿っていなければ申し訳ありません
今辞書アプリなるものを初めて作っていまして、この疑問にあたりました

辞書アプリの検索機能のプログラムについての質問です
辞書アプリなどの大量の情報が必要なアプリで、任意の単語を検索機能で検索すると一瞬で該当するものが表示されます。そんな一瞬でヒットできるものなんでしょうか
例えば、英和辞書なら見出し語が9万語以上あるのにそんな一瞬で探し出せるのでしょうか?
というのも素人考えで、検索機能を考えたんですけど
見出し語がリストに格納してあって、検索にかけられた単語と1個1個一致するのを探していく
見出し語リストは、頭文字がどのアルファベットから始まるかでaからzでふり分けられていて、で、検索にかけられた単語の頭文字と一致するところをまた1個1個一致するまで検索していく
これで検索する量が多くとも6分の1ほどの1万ちょっとには抑えられます(sから始まる単語が全体の1/6くらいある)

//見出し語のリスト (語順適当です) //List = [[apple,...], [bat,...],[candy,..],. .... ,[zoo,...]]

みたいなイメージです
1万個のデータのどれと一致するか判断するのに1,2秒じゃ足りないと思います
何か根本的に違う検索の仕方をしているんでしょうか

もうひとつ質問があってデータについてです
単語の説明文などはtxtでまとめて保存すべきかとかプログラムにstringで直に書き込んでいくべきかなどそういったことは、どういううキーワードで調べたらいいですか

回答よろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2022/01/27 05:05

データが有るのでしたら、何事も経験と思って考えた方法でやってみては如何でしょうか。
hoshi-takanori

2022/01/27 05:07

とりあえずアルゴリズムやデータ構造を学ぶと良いかも。二分探索とかハッシュ表とかツリー構造とか…。
guest

回答7

0

m.ts10806さんが書かれていますが、辞書は辞書データと別に大量のインデックスを持っています。

電子辞書データの規格であるEPWINGについて調べれば、そのデータ構造はわかります。
更に極めよ「EPWING/PDIC辞書」あたりを見れば、辞書の作成方法も書いてありますので、作ってみれば元データよりも大きなデータが作られていることは良くわかります。

EPWING辞書の検索ソフトもいろいろありますが、GitHub FooSoft/yomichanのようにソースが公開されているものもありますので、読んでみると良いかもしれません。

自作にこだわらなれば、EPWING辞書の適当なインタフェースの検索ライブラリも見つかるはずですのでそれを使うという方法も検討されてはいかがでしょうか。

投稿2022/01/27 02:47

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

見出し語

こちら本件を解決するためのキーワードになり得ます。
既に出ているように一般的には大量データの操作はデータベースを利用します。
データにキーやインデックスといった設定を適切にすることで高速に目的のデータまで辿り着くことができるわけです。
※部分一致や文字列検索だと若干パフォーマンスは落ちますがそれでも全件ループするよりは圧倒的に速い

投稿2022/01/26 21:43

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

実装方法は色々ありますが、簡単にできる例を一つ言えば、a フォルダの中の p フォルダの中の p フォルダの中の l フォルダの中の e フォルダがあれば apple が辞書にあり、その中に ja.txt があればそこにはリンゴと書かれているとすれば良いのではないでしょうか。

より最適化するには「探索木」を調べてみてください。

投稿2022/01/26 21:42

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

普通の紙の辞書を考えてみてください。
調べようとした単語を適当に開いて、そのページ載ってなくても
順番にならんでいてるので開いたページの前にあるか、後ろにあるか、わかりますよね?
開いたページから前にあるか後ろにあるかわかっているので、無い方を調べませんよね?
1件1件全件比較しなくてもいいことがわかりますよね?

投稿2022/01/27 03:53

tmp

総合スコア277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まあフツーはデータベース(DBMS)に丸投げするのかな。
それができないなら上記相当のことを自分で実装することに。
たぶん(情報があるなら)CODASYL系のが参考にかると思います。

メモリを潤沢に使っていいなら話は早いですけど
そういうのはあんまり無いでしょうからね~

ちなみに、データとコードは分けとく方が主流でしょう。
なんか特別な理由があれば別ですけどね。

投稿2022/01/26 21:17

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

4億行を超えるテキストから前方一致で2万件取り出すシェルスクリプトを書いたことがありますが、grepだと3年くらいかかりそうだったので、lookというコマンドを使いました。こいつはまず探査対象がソート済みであることが条件で「2分探査法」という検索方法をとります、真ん中で割ってどっちにいるかを繰り返す検索方法です。爆速でした。

投稿2022/02/01 04:33

suga000

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

検索そのものは皆さん書かれてますので、もう一つの側面を。
辞書の様に 見出し語 だけで検索しますか?
それとも「辞書アプリの検索機能のプログラムについての質問です」をhitさせるのに

  1. 辞書、アプリ、検索、機能、プログラム、質問 のどれでもhitさせたいです
  2. 辞典、事典、字典、じしょ、じてん としてもhitさせたいですか?

1 でしたら、文章を細切れにする技術が必要です
2 は類似語を集めた辞書が必要です。

投稿2022/02/01 00:31

winterboum

総合スコア23329

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問