0

私はこの問題を解決する必要があります

次のような2つの異なる単語から形成されたユーザーからの入力単語があります

AppleCake or BrownPie

次に、この入力を取得して単語のライブラリと照合し、単語を意味のある部分、つまりAppleとCakeに分割するプログラムを開発する必要があります。

入力:AppleCake

出力:この入力には、AppleとCakeの2つの単語があります

入力:RedGrapesWine

出力:この入力には、赤、ブドウ、ワインの3つの単語があります

私の質問は:

この問題にどのように取り組み始める必要がありますか?

誰かがその解決に向けた疑似コード/ステップで私を助けることができますか?

4

4 に答える 4

1

アルゴリズムを改善するには、辞書に含まれるすべての語頭を含むセットを最初に作成する必要があります。「Apple」と「Cake」が辞書にある場合、セットには「A」、「Ap」、「App」、「Appl」、「Apple」、「C」、「Ca」、および「Cake」が含まれている必要があります。

したがって、トークンが既知の単語の先頭と一致しないため、トークンが単語ではないかどうかがすぐにわかります。

于 2012-10-25T06:34:42.087 に答える
1

単語の数が少ない場合にのみ機能する非常に単純なアプローチは、単語リストを反復処理し、単語ごとに一致を試みることです。

これは非常に基本的な例です (大文字と小文字の区別や単語の複数回の出現などは処理しません) が、その方法を示しています。

String input = readFromUser();
String[] dictionary = new String[] { "Apple", "Cake" };
List<String> found = new ArrayList<>();
for (String word : dictionary) {
    int index = input.indexOf(word);
    if (index >= 0) {
        input = input.substring(0, index) + input.substring(index + word.length());
        found.add(word);
    }
}
System.out.println("Found " + found.size() + " words: " + found);

時間がかかるため、これは非常に単純なアプローチです。

もう 1 つのアプローチは、Trieを使用して、適切な単語が見つかるまでナビゲートすることです (より適切なアプローチである必要があります)。

于 2012-10-24T10:16:59.697 に答える
0

簡単な解決策は、可能なすべてのパーティションをハッシュマップ/辞書に対してテストすることです。

例えば

thebody -> t hebody (do t と hebody は存在しますか?)、the body (th と ebody ?)、the body (the と body?) など。

于 2012-10-24T10:23:45.217 に答える
0

新しい単語が大文字を使用している場合は、それを使用して単語を必要な断片に分割できます。

于 2012-10-24T09:58:39.670 に答える