2008-09-17 26 views
57

似たような質問がありますが、私のソースコードで使用できるC#ライブラリに関してはありません。C#用に書かれたファジー検索または文字列類似関数ライブラリはありますか?

ありがとうございました。

私は既にluceneを見てきましたが、類似の文字列を検索するのが簡単で、インデックス部分のオーバーヘッドがないようなものが必要です。

私がマークした答えには、2つの非常に簡単なアルゴリズムがあり、1つはLINQも使用しているので完璧です。

+3

は私をエスケープします。 OPは、SOが徹底的にサポートしている機能がライブラリにあるかどうかを尋ねています。 – 010110110101

答えて

30

レーベンシュタイン距離の実装:

私は後者を使用する.NET 1.1プロジェクトを持っています。シンプルではありますが、私が必要とするものに完全に対応しています。私が覚えていることから、微調整が必​​要でしたが、それは明らかではありませんでした。

+0

なぜ「LINQの使用」と言いますか?これらの実装のいずれもLinqを使用していません... –

+1

実際にはこれらの実装は同じですが、後者はSubstringを使用しますが、毎回新しいStringインスタンスを作成するため、インデクサーを使用するよりもはるかに遅くなります。 –

+0

確かに正しいです。私はLINQの愛があったことを誓ってもいいし、少なくともLINQyか何かを主張していることを誓っていたかもしれない。 –

0

Linux用Beagle Projectはc#(モノ)で書かれており、Googleデスクトップのような検索ツールです。このような文字列マッチングのために、そこにいくつかのコードがあるかもしれません。

正しくリコールすれば、データの検索と取得にはLuceneライブラリが使用されます。多分あなたのプロジェクトにも役立つかもしれません。

2

Lucene.netを見ましたか?これは.Netプラットフォームに対するJava Lucene検索エンジンAPIのポートです。そのライブラリは多くの検索機能を提供します。私は1年かそこら前に遊んだので、たくさんの経験に基づいて私の提案をしないでください。私は本のWindows Developer Power Toolsでそれを見て、テストドライブのためにそれを取った。 API documentationを見て、探しているファジー検索のようなものがあるかどうかを確認してください。

+0

Luceneを使用して類似度を取得する方法を教えてください。 –

+0

申し訳ありませんが、私はそれを専門的に使用していません。私の記事で言及したように、私はちょうど2007/2008の周りにそれを周りに遊んだ。 –

+0

おそらく、[Lucene in Action、2ed](http://goo.gl/0skkw7)の本は、類似度をどのように得るかを教えてくれるかもしれません。 – AechoLiu

1

二つの文字列の類似度に値を代入する次のレーベンシュタイン距離アルゴリズムがある(良く、差実際)上に構築するために使用することができる:http://www.merriampark.com/ldcsharp.htm

27

あなたはまた、サムの文字列メトリックhttp://sourceforge.net/projects/simmetrics/files/題し非常に印象的な図書館で見ることができます。これには多数のアルゴリズムが含まれています。

  • ハミング距離
  • レーベンシュタイン距離
  • ニードル-Wunch距離または売り手アルゴリズム
  • スミス - ウォーターマン距離
  • 後藤距離やスミス - ウォーターマン・後藤距離
  • ブロック距離またはL1距離または市のブロック距離
  • Monge Elkan距離
  • JARO距離メトリック
  • JAROウィンクラー
  • SOUNDEX距離メトリック係数
  • ダイスの係数
  • ジャカード類似性またはジャカード係数やタニモト係数
  • オーバーラップ係数
  • ユークリッド距離やL2距離
  • マッチング
  • コサイン類似度
  • V ariational距離
  • ヘリンガー距離またはバタチャリヤ距離
  • 情報半径(ジェンセン・シャノン発散)
  • 調和平均
  • スキュー発散
  • 混同確率
  • タウ
  • FellegiとSunters(SFS)メトリック
  • TFIDFまたはTF/IDF
  • FastA
  • BLASTP
  • 最大は一致し
  • Q-グラム
  • Ukkonenアルゴリズム
+14

この回答のリンクは私に403エラーを与えています。 [Wayback Machine](http://web.archive.org/web/http://staffwww.dcs.shef.ac.uk/people/[email protected]/stringmetrics)を使用することができます。 .html)代わりに。 –

+0

私は上記のライブラリの.NETバージョンは[ここ](http://sourceforge.net/projects/simmetrics/files/)だと思います。私はそれをVisual Studio 2010に変換し、NUnitの参照を更新した後、ビルドします。また、87回のテストに合格します。 – dalenewman

+0

私はこのライブラリの.netライブラリバージョンを[SimMetrics.Net on GitHub](https://github.com/StefH/SimMetrics.Net)で見つけました。 @ dalenewmanの提案と同じでしょうか? – Spiralis

11

彼らは自分の発明ではありませんが、彼らは私のお気に入りで、私はちょうどそれらについてブログや自分を公開しましたFour Functions for Finding Fuzzy String Matches in C# Extensionsというブログポストで、ダイス係数、Levenshtein Distance、Longest Common Subsequence、Double Metaphoneのバージョンを調整しました。

+1

これはあなたのプロジェクトにドロップすることができるクラスで既製です。これは、簡単に行ける方法です。 – cjbarth

+0

コードはGitHubにありますhttps://github.com/tylerjensen/duovia-fuzzystrings – DanO

+0

ブログ記事へのリンクが更新されました:http://www.tsjensen.com/blog/post/2011/05/27/Four+Functions+ + Finding + Fuzzy + String + Matches + In + C + Extensions.aspx –

関連する問題