ノイズの多い文字列のリストから正規の文字列を抽出する


10

何千もの文字列のリストがあり、各リストには約10個の文字列があります。特定のリストのほとんどの文字列は非常によく似ていますが、一部の文字列は他の文字列と(ほとんど)まったく無関係であり、一部の文字列には無関係な単語が含まれています。これらは、標準的な文字列のノイズの多いバリエーションと見なすことができます。各リストをこの正規の文字列に変換するアルゴリズムまたはライブラリを探しています。

以下はそのようなリストの1つです。

  • スター・ウォーズ:エピソードIV新しい希望| StarWars.com
  • スターウォーズエピソードIV-新しい希望(1977)
  • スター・ウォーズ:エピソードIV-新しい希望-腐ったトマト
  • スター・ウォーズ:エピソードIV-新しい希望をオンラインで無料で見る
  • スター・ウォーズ(1977)-グレイテスト・フィルム
  • [REC] 4つのポスターが船外機による死を約束-SciFiNow

このリストでは、正規表現に一致する任意の文字列^Star Wars:? Episode IV (- )?A New Hope$が受け入れられます。

私は、Courseraでの機械学習に関するAndrew Ngのコースを見ましたが、同様の問題を見つけることができませんでした。


2
PSあなたが探している用語は「標準的」だと思います
ショーン・オーウェン

正規表現を特定しようとしている「最も可能性の高い」/「最も合意された」文字列はありますか?または、リストの文字列の1つですか?
MrMeritology 2014

@MrMeritology正規表現を探していません。正しいと考える文字列の種類にどれだけ柔軟に対応できるかを示すために、質問に正規表現を示しました。
ラクトン2014

OK。次に、私が下で与えた答えがあなたのために働くはずです。
MrMeritology 2014

これはNER(名前付きエンティティ認識)に分類されますか?
ヒッピートレイル2014

回答:


4

単純な解決策として、最初にリスト内で最も頻繁に使用されるトークンを含む文字列を選択することをお勧めします。このようにして、無関係な文字列を取り除くことができます。

2番目のフレーズでは、過半数の投票を行います。3つの文を想定します。

  • スター・ウォーズ:エピソードIV新しい希望| StarWars.com
  • スターウォーズエピソードIV-新しい希望(1977)
  • スター・ウォーズ:エピソードIV-新しい希望-腐ったトマト

トークンを1つずつ確認します。まずは「スター」から。すべての文字列がそれで始まるので、勝ちます。「戦争」も勝つでしょう。次は「:」です。それも勝ちます。

すべてのトークンは、「希望」まで投票で過半数を獲得します。「Hope」の次のトークンは「|」、「(」、「-」のいずれかになります。過半数の投票で勝つ人はいないので、ここで終了します!

もう1つの解決策は、おそらく最も長い共通のサブシーケンスを使用することです。

私が言ったように私はそれについてあまりしていません。だからあなたの問題にはもっと良い解決策があるかもしれません:-)


3

まず、文字列のすべてのペア間の編集距離を計算します。http://en.wikipedia.org/wiki/Edit_distanceおよびhttp://web.stanford.edu/class/cs124/lec/med.pdfを参照してください。次に、距離のしきい値に基づいて外れ値の文字列を除外します。

残りの文字列については、距離行列を使用して最も中央の文字列を特定できます。使用する方法によっては、一部のデータについてあいまいな結果が得られる場合があります。すべての可能性に最適な方法はありません。目的のために必要なのは、あいまいさを解決するためのいくつかのヒューリスティックルール、つまり2つ以上の候補を選択することだけです。

文字列のリストから「最も中心的な」ものを選択するのではなく、すべての非外れ値文字列に共通するパターンをキャプチャする正規表現を生成したい場合があります。これを行う1つの方法は、すべての外れ値以外の文字列から等距離の文字列を合成することです。マトリックスから必要な編集距離を計算してから、それらの距離を制約として使用して規則的にランダムに生成します。次に、候補の正規表現をテストし、制約に適合する最初の正規表現を受け入れ、外れ値以外のリストのすべての文字列も受け入れます。(正規表現は、ワイルドカード文字ではないため、最も長い共通の部分文字列リストから作成します。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.