タグ付けされた質問 「pattern-matching」

このタグは、データ構造に特定の形状があるかどうか、または特定の場所に特定の値が含まれているかどうかのテストに関する質問に使用します。多くの関数型言語は、パターンマッチング構成を提供します。このタグ内のほとんどの質問には、プログラミングしている言語のタグも必要です。このタグは通常の表現の質問には使用しないでください。[regex] INSTEADを使用してください。同様に、POSIXのようなシェルでのパターンマッチング(グロビング)には、[glob]を使用します。

10
意味のあるJavaScriptのあいまい検索
配列をフィルタリングするためのあいまい検索JavaScriptライブラリを探しています。fuzzyset.jsとfuse.jsを使用してみましたが、結果はひどいです(リンクされたページで試すことができるデモがあります)。 レーベンシュタイン距離について少し読んだ後、それはユーザーがタイプしたときに探しているものの不十分な近似として私に印象づけます。知らない人のために、システムは、2つの文字列を一致させるために必要な挿入、削除、および置換の数を計算します。 Levenshtein-Demerauモデルで修正された明らかな欠陥の1つは、blubとboobの両方が球根に等しく類似していると見なされることです(それぞれ2つの置換が必要です)。ただし、bulbはboobよりもblubに似ていることは明らかです。先ほど述べたモデルでは、転置を許可することでそれを認識しています。 これをテキスト補完のコンテキストで使用したいので、配列['international', 'splint', 'tinder']があり、クエリがintの場合、前者のスコア(higher = worse)が10であっても、splintよりもInternationalのランクが高くなるはずです。後者の対3。 だから私が探しているのは(そしてそれが存在しない場合は作成します)、次のことを行うライブラリです: さまざまなテキスト操作に重みを付ける 各操作の重み付けは、単語のどこに出現するかによって異なります(初期の操作は後の操作よりもコストがかかります)。 関連性でソートされた結果のリストを返します 誰かがこのようなものに出くわしましたか?StackOverflowがソフトウェアの推奨事項を求める場所ではないことに気づきましたが、上記の暗黙の(もうない!)は次のとおりです。これを正しい方法で考えていますか? 編集する この件に関して良い論文(pdf)を見つけました。いくつかのメモと抜粋: アフィン編集距離関数は、挿入または削除のシーケンスに比較的低いコストを割り当てます Monger-Elkan距離関数(Monge&Elkan 1996)。これは、特定のコストパラメータを持つSmith-Waterman距離関数(Durban et al。1998)のアフィンバリアントです。 ためのスミス-ウォーターマン距離(ウィキペディア)、「その代わりに全配列を見てから、スミス-ウォーターマンアルゴリズムは、すべての可能な長さのセグメントを比較し、類似性測度を最適化します。」それはn-gramアプローチです。 編集距離モデルに基づいていない、広く類似したメトリックは、Jaroメトリックです(Jaro 1995; 1989; Winkler 1999)。レコードリンケージの文献では、2つの文字列間の共通文字の数と順序に基づく、このメソッドのバリアントを使用して良好な結果が得られています。 Winkler(1999)によるこのバリアントも、最長の共通プレフィックスの長さPを使用します (主に短い文字列を対象としているようです) テキスト補完の目的で、Monger-ElkanおよびJaro-Winklerのアプローチが最も理にかなっているようです。WinklerのJaroメトリックへの追加は、単語の始まりをより重く効果的に重み付けします。また、Monger-Elkanのアフィン的側面は、単語を補完する必要性(これは単なる追加のシーケンスです)がそれほど嫌われないことを意味します。 結論: TFIDFランキングは、いくつかのトークンベースの距離メトリックの間で最もよく機能し、MongeとElkanによって提案された調整されたアフィンギャップ編集距離メトリックは、いくつかの文字列編集距離メトリックの間で最もよく機能しました。驚くほど良い距離メトリックは、Jaroによって提案され、後でWinklerによって拡張された高速ヒューリスティックスキームです。これは、Monge-Elkanスキームとほぼ同じように機能しますが、桁違いに高速です。TFIDFメソッドとJaro-Winklerを組み合わせる簡単な方法の1つは、TFIDFで使用されている正確なトークンの一致を、Jaro-Winklerスキームに基づくおおよそのトークンの一致に置き換えることです。この組み合わせは、平均でJaro-WinklerやTFIDFよりもわずかに優れており、場合によってははるかに優れています。また、このペーパーで検討されているいくつかの最良のメトリックの学習された組み合わせに近いパフォーマンスを発揮します。

1
Scalaで複数の値をパターンマッチングする方法は?
同じコードを使用して、リモートサービスからの複数の戻り値を処理したいとします。これをScalaで表現する方法がわかりません。 code match { case "1" => // Whatever case "2" => // Same whatever case "3" => // Ah, something different } Extractメソッドを使用してそれを呼び出すことができることはわかっていますが、呼び出しにはまだ繰り返しがあります。Rubyを使用している場合は、次のように記述します。 case code when "1", "2" # Whatever when "3" # Ah, something different end 例を簡略化したので、正規表現などでパターンマッチングを行いたくないことに注意してください。一致値は実際には複素数値です。

10
ケースクラスコンパニオンで適用をオーバーライドする方法
これが状況です。次のようなケースクラスを定義したいと思います。 case class A(val s: String) そして、クラスのインスタンスを作成するときに、次のように「s」の値が常に大文字になるようにオブジェクトを定義したいと思います。 object A { def apply(s: String) = new A(s.toUpperCase) } ただし、Scalaがapply(s:String)メソッドが2回定義されていると文句を言っているため、これは機能しません。ケースクラスの構文で自動的に定義されることは理解していますが、これを実現する別の方法はありませんか?パターンマッチングに使用したいので、ケースクラスを使い続けたいと思います。

3
固定最小長リストを完全かつエレガントな方法で使用するにはどうすればよいですか?
私は現在、次のような関数を扱っています。 foo = (\(a:b:c:d:e:f:_) -> foobar a b c d e f) . (++ repeat def) つまり、リストが与えられた場合、最初の6つの要素を何かに使用し、リストが6要素未満の場合defは、欠落している要素の代わりとして使用します。これは合計ですが、その一部は(のようにmap fromJust . filter isJust)異なるため、私は好きではありません。私はこれを書き直して、偏りを使用する必要がないようにして、これを得ました: foo [] = foobar def def def def def def foo [a] = foobar a def def def def def foo [a,b] = foobar a b def def def …

1
パターンマッチングにおけるメソッドの型推論とクラス型パラメーターの違い
型パラメーターが、囲んでいるクラスではなく、囲んでいるメソッドからのものである場合、パターンマッチングの動作が異なるのはなぜですか?例えば、 trait Base[T] case class Derived(v: Int) extends Base[Int] class Test[A] { def method(arg: Base[A]) = { arg match { case Derived(_) => 42 } } } エラーを与える constructor cannot be instantiated to expected type; found : A$A87.this.Derived required: A$A87.this.Base[A] case Derived(_) => 42 ^ Aメソッド型パラメーターの場合は正常にコンパイルされますが class Test { def …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.