2

英語の散文の入力文字列からすべてのアポストロフィを削除したいのですが、元の意味と大文字化は保持します。つまり、

  • ではない --> ではない
  • 私は --> 私は
  • 彼らは --> 彼らは
  • すべきではありません --> すべきではありません
  • できない --> できない
  • ジョンズ --> ジョンズ (十分)

Javaでこれを達成するための最良/最も簡単な方法は何ですか?

4

2 に答える 2

9

Map<String, String>短縮形をスペルアウトされた形式にマップする短縮形辞書を用意します。アポストロフィが何を置き換えるかについての単一の規則はないため、この辞書は進むべき道に近づきます。

于 2012-12-27T22:19:37.707 に答える
8

収縮を置き換えるための厳格な規則がいくつかあります。文字列に対してこれらの機能を実行するメソッドを用意するだけです。

public String removeContractions(String inputString) { 

    inputString = inputString.replaceAll("n't", " not");
    inputString = inputString.replaceAll("'re", " are");
    inputString = inputString.replaceAll("'m", " am");
    inputString = inputString.replaceAll("'ll", " will");
    inputString = inputString.replaceAll("'ve", " have");

    return inputString;
}

これにより、所有格も保持されます。

もちろん、 のような文脈に依存するいくつかの短縮形がありますhe'd。これは、「できた」、「したかった」、「持っていた」などの可能性があり、単純な置換アルゴリズムを超えており、機械学習の領域ではそれ以上のものです。

public String removeControversialContractions(String inputString) {

    inputString = inputString.replaceAll("'d", " would");
    inputString = inputString.replaceAll("'s", "s");

    return inputString;
}

おそらく、'sそれを含む単語が大文字 (名前を示す) で始まるかどうかを確認し、条件付きでまたはのいずれかに置き換えることができsますis。ただし、これでは文頭の通常の短縮形がキャッチされないため、...

シンプル完璧なアプローチが必要な場合、それが得られるかどうかはわかりません。これらのより複雑なことを行うには、常に参照する大きな辞書ファイルか、機械学習技術が必要です。

于 2012-12-27T22:24:37.780 に答える