8

C#で正規表現を使用して用語を検索したいと考えています。これらの用語の複数形を検索に含めたいと思います。たとえば、ユーザーが「パイプ」を検索したい場合は、「パイプ」の結果も返します。

だから私はこれを行うことができます...

string s ="\\b" + term + "s*\\b";
if (Regex.IsMatch(bigtext, s) {  /* do stuff */ }

ユーザーが「stress」と入力したときに「stresses」と一致し、「pipe」/「pipes」で機能するようにするには、上記をどのように変更しますか?

4

3 に答える 3

9

man直面する可能性のある問題は、、、fishなどの不規則な名詞がたくさんあることですindex。したがってPluralizationService、メソッドを持つを使用することを検討する必要がありPluralizeます。使い方を示す例です

用語の複数形を取得したら、複数形または単数形の両方の用語を検索する正規表現を簡単に作成できます。

PluralizationService ps = PluralizationService.CreateService(CultureInfo.CurrentCulture);
string plural = ps.Pluralize(term);
string s = @"("+term+"|"+plural+")";
if (Regex.IsMatch(bigtext, s)) {
    /* do stuff */
}
于 2012-04-24T11:55:02.100 に答える
2

複数形を削除するために作成された正規表現は次のとおりです。

 /(?<![aei])([ie][d])(?=[^a-zA-Z])|(?<=[ertkgwmnl])s(?=[^a-zA-Z])/g

デモとソース

私はそれがあなたが必要としているものではないことを知っていますが、それはあなたが何かを見つけるのを助けるかもしれません。

于 2012-04-24T11:42:24.153 に答える
0

バックエンドとしてSQLサーバーを使用している場合、Soundexを利用できませんでしたか?何を検索しようとしているのかわかりません。検索入力として動的SQLを作成しようとしていると思います。そうでない場合は、LINQ用のSoundExがあると思います。

編集:私は訂正されたままです、SoundExのために行うことができるいくつかのlinqtosqlエンティティのものがあるようです。

ただし、MSDNにはsoundexの例があります。これは、今朝実行した簡単なテストでは、テストしたものと同じくらいうまくいくようです。 http://msdn.microsoft.com/en-us/library/bb669073.aspx

私が行った変更は、.ToUpper(invariant)の代わりに.ToUpperInvariant()を使用し、(文字列ワード)を渡す代わりに拡張メソッド(この文字列ワード)を使用しました

これが私が実行したものの例です

List<string> animals = new List<string>();
animals.Add("dogs");
animals.Add("dog");
animals.Add("cat");
animals.Add("rabbits");
animals.Add("doggie");

string dog = "dog";
var data = from animal in animals
where animal.SoundEx() == dog.SoundEx()
select animal;

データ:犬、犬、わんわん

SQLサーバーで、Contains / FreeText / ContainsTableなどを使用し、カタログに対してSoundExを使用すると(SQLサーバーの新しいバージョンに精通していません。使用したSQLServer 2000の実装に戻ります)、結果をランク付けすることもできます。

また、SQLサーバーを使用できる場合は、次のオプションを検討することをお勧めし ます。LINQ to SQL SOUNDEX-可能ですか?

複数化ソリューションに関する懸念事項は、.Net4を利用できる必要があることです。

役に立つかもしれないレーベンシュタイン距離アルゴリズムもあります。

于 2012-04-24T11:53:06.077 に答える