2016-06-21 4 views
2

まず、実際のファジーマッチングアルゴリズムを探していません。 Diceの係数とLevenshtein Distanceの両方を使用しています。私はこれらのアルゴリズムを利用するための賢明な方法を探しています。段落内の複数の語句をファジーマッチングするアルゴリズム

目標:

私は、彼らが起こるためには、テキストの段落の都市の名前を検出しようとしています。約100万のロケーション名のリストがあります。私は、テキストの段落を検索し、これらの場所のいずれかが存在するときを検出し、その都市を格納したいと思います。ロケーション名は、単一または複数の単語にすることができます。

例の段落:

こんにちはママ!サムと私はカナダ 翌月の道路トリップを考えています。私たちはすでに、ジョンの家にはケベック 市で滞在できることを知っています。 カナダにたくさん旅行したことが分かりましたので、私は をあなたのアドバイスにしたいと思っていました。

私が言ったように、我々は、おそらくハリファックスに向かう前に ミラミチに車で、ケベック市で開始すると思います。 2日後に ケープブレトンに行きたいです。最後に、我々はすぐにファンディ湾のような もの、ディグビー、聖エリザベスの桟橋

の話を見て提唱ハーバーをチェックしたいです!

期待される成果

  • カナダ
  • ケベック
  • カナダ
  • ミラミチ
  • ハリ
  • ケープブレトン
  • 提唱ハーバー
  • ファンディ
  • のベイ
  • ディグビー
  • 聖エリザベスの桟橋

問題

私の現在のバリケードは、複数の単語でロケーション名を検出する方法です。場所の名前

  • の私のリストに対する最初のワードは

    1. ファジーマッチマッチ、ファジーマッチ(最初の単語+二noの場合:私は、私のリストに照らして、それらを比較、私は言葉に段落を分割することができます知っている、などの単語)地名
    2. の私のリストに対して地名
    3. マッチしない、あいまい一致(最初+二+ 3ワード目)の場合の私のリストに対して...など

    これは、私の現在のアプローチでありますしかし、それは信じられないほど遅く、非効率的な。私が探しているものを達成するための巧妙な方法はありますか?

  • +1

    段落を1行の文字列のように扱い、ある種の文字列一致アルゴリズムを使用できますか? https://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_algorithm(複数のパターンに一致するもの) – shole

    +0

    はい、これは私が探していたものです。ファジーマッチングはしませんが、完璧に機能します。これを回答として提出すれば、それを正しいものとしてマークします。 – CHawk

    +0

    ありがとうございます。それが助けることを知ってうれしい:) – shole

    答えて

    1

    私はここで

    は彼らのためにリストされ、いくつかの文字列照合アルゴリズムがあなたのためにも完璧にうまくいくと思う:あなたのケースでは String Matching Algorithms

    、私は、あなたが1に一致する複数のパターン文字列を必要とするようなAho–Corasick algorithm

    考えます
    +1

    これは素晴らしいです!他の人のリファレンスとして、私はこの宝石からAho-Corasick実装を使用して終了しました:https://github.com/ahnick/ahocorasick – CHawk

    関連する問題