6

フォーマットされた結果を分析して、ヒューリスティックにフォーマット パターン文字列を決定する必要があります。

たとえば、次の文字列があります。

3件の未読メッセージがあります。

未読メッセージが10件あります。

ごめんなさい、デーブ。私はそれができないのではないかと心配しています。

ごめんなさい、フランク。私はそれができないのではないかと心配しています。

このステートメントは誤りです。

これらのフォーマット文字列を派生させたい:

%s件の未読メッセージがあります

すみません、%s。私はそれができないのではないかと心配しています。

このステートメントは誤りです。

ここで役立つアプローチやアルゴリズムはどれですか?

私が最初に考えたのは、機械学習を使用することでしたが、私の直感では、これはかなり古典的な問題である可能性があります。

いくつかの追加要件:

  • パラメーターの型は関係ありません。つまり、パラメーターが元々あった%s%dどうか、またはパディングまたはアラインメントされていたかどうかの情報は必要ありません。
  • 複数のパラメーターが存在する場合があります (またはまったく存在しない場合もあります)。
  • 通常、データは何千ものフォーマットされた文字列で構成されていますが、フォーマット パターンは数十しかありません。
4

1 に答える 1

1
  1. いくつかの類似度のメトリックによって文字列をクラスター化します (最長共通サブシーケンスの長さ、LCS を試してみます)。事前にわからない場合、クラスターの数を決定するのは難しい部分です。

  2. 各クラスター内で、その中のすべての文字列の LCS を決定し、発生したギャップの位置を記録します。ギャップを に置き換え%sます。fold(LCS ベースのフォーマット文字列を返す関数を作成したり、クラスターを介した関数を作成したい場合がreduceあります。)

上記は、与えられた { foobar, fooBaR} が生成する貪欲なアルゴリズムですfoo%sa%s%s単一の文字 (または単一の非空白文字など) で区切られたの出現のペアを%s、再帰的に単一の に置き換えたい場合があります。

于 2011-02-11T09:04:31.187 に答える