Questions tagged «pattern-matching»

使用此标记可以解决有关测试数据结构在特定位置是否具有特定形状或包含特定值的问题。许多功能语言提供模式匹配构造。此标签中的大多数问题也应具有您正在使用的编程语言的标签。请勿将此标签用于常规表达问题,使用[regex] INSTEAD;同样,对于类似POSIX的shell中的模式匹配(globbing),请使用[glob]。

10
合理的JavaScript模糊搜索
我正在寻找一个模糊搜索JavaScript库来过滤数组。我尝试使用Fuzzyset.js和fuse.js,但是结果很糟糕(可以在链接的页面上尝试一些演示)。 在对Levenshtein距离进行了一些阅读之后,我对用户输入时所寻找的内容的近似性感到不满意。对于那些不知道的人,系统会计算要使两个字符串匹配,需要多少个插入,删除和替换。 在Levenshtein-Demerau模型中修复的一个明显缺陷是,blub和boob都被认为与bulb相似(都需要两次替换)。很明显,但是,灯泡更类似于咕噜比布布是的,我刚才提到的模型识别到,允许换位。 我想在文本补全的背景下使用它,因此,如果我有一个数组['international', 'splint', 'tinder'],并且我的查询是int,我认为International应该比splint排名更高,即使前者的得分(高=差)为10与后者的3。 因此,我正在寻找(并且如果不存在的话将创建)一个执行以下操作的库: 权衡不同的文本操作 根据每个单词在单词中出现的位置,对每个操作进行加权加权(较早的操作比较晚的操作成本更高) 返回按相关性排序的结果列表 有没有人遇到过这样的事情?我意识到,StackOverflow并不是要求软件推荐的地方,但是上面的隐式(不再是!)是:我是否正在以正确的方式考虑? 编辑 我找到了一篇很好的论文(pdf)。一些注释和摘录: 仿射编辑距离功能为插入或删除序列分配了相对较低的开销 Monger-Elkan距离函数(Monge&Elkan 1996),它是Smith-Waterman距离函数(Durban et al。1998)的仿射变体,具有特定的成本参数 对于史密斯-沃特曼距离(Wikipedia),“史密斯-沃特曼算法无需查看总序列,而是比较所有可能长度的片段并优化相似性度量。” 这是n-gram方法。 大致上类似的度量标准(不是基于编辑距离模型)是Jaro度量标准(Jaro 1995; 1989; Winkler 1999)。在记录链接文献中,使用此方法的变体已获得了良好的结果,该变体基于两个字符串之间的公共字符的数量和顺序。 由于Winkler(1999)的不同,它也使用最长公共前缀的长度P (似乎主要用于短字符串) 为了完成文本,Monger-Elkan和Jaro-Winkler方法似乎最有意义。Winkler对Jaro度量标准的添加有效地对单词的开头进行了更重的加权。而且,Monger-Elkan的仿射方面意味着完成一个单词的必要性(这只是一系列加法)不会太不利于它。 结论: TFIDF排名在几个基于令牌的距离度量中表现最好,而Monge和Elkan提出的经过调整的仿射间隔编辑距离度量在几个字符串编辑距离度量中表现最好。令人惊讶的良好距离度量是Jaro提出并随后由Winkler扩展的快速启发式方案。这几乎和Monge-Elkan方案一样有效,但是速度要快一个数量级。结合TFIDF方法和Jaro-Winkler的一种简单方法是用基于Jaro-Winkler方案的近似令牌匹配替换TFIDF中使用的精确令牌匹配。平均而言,此组合的性能比Jaro-Winkler或TFIDF都要好,偶尔也要好得多。在性能上也接近本文所考虑的几种最佳指标的学习组合。

1
如何在Scala中对多个值进行模式匹配?
假设我想使用相同的代码处理来自远程服务的多个返回值。我不知道如何在Scala中表达这一点: code match { case "1" => // Whatever case "2" => // Same whatever case "3" => // Ah, something different } 我知道我可以使用Extract Method进行调用,但是调用中仍然存在重复。如果我使用的是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)方法定义了两次。我知道case class语法会自动为我定义它,但是我是否还有其他方法可以实现此目的?我想坚持使用case类,因为我想将其用于模式匹配。

1
Scala多种类型模式匹配
我想知道如何使用多种类型模式匹配。我有: abstract class MyAbstract case class MyFirst extends MyAbstract case class MySecond extends MyAbstract case class MyThird extends MyAbstract // shouldn't be matched and shouldn't call doSomething() val x: MyAbstract = MyFirst x match { case a: MyFirst => doSomething() case b: MySecond => doSomething() case _ => doSomethingElse() } …


28
byte []数组模式搜索
任何人都知道一种在byte []数组中搜索/匹配字节模式然后返回位置的好方法。 例如 byte[] pattern = new byte[] {12,3,5,76,8,0,6,125}; byte[] toBeSearched = new byte[] {23,36,43,76,125,56,34,234,12,3,5,76,8,0,6,125,234,56,211,122,22,4,7,89,76,64,12,3,5,76,8,0,6,125}


5
Mongo中不区分大小写的搜索
我在Mongo中使用不区分大小写的搜索,类似于https://stackoverflow.com/q/5500823/1028488。 即我正在使用带有选项i的正则表达式。但是我在将正则表达式限制为该单词时遇到了麻烦,它的执行效果更像SQL中的“ Like” 例如:如果我使用类似的查询 {"SearchWord" : { '$regex' : 'win', $options: '-i' }},它将向我显示胜利,窗户和冬季的结果。我如何将其限制为jsut show win? 我尝试过,/^win$/但是说无效的杰森...。请提出一种方法。 提前致谢

2
模式匹配“ @”符号
给定此Person案例类: scala> case class Person(name: String, age: Int) {} defined class Person ...和这个实例 scala> val b = Person("Kevin", 100) b: Person = Person(Kevin,100) 是否有理由偏爱此代码(带有@) scala> b match { | case p @ Person(_, age) => println("age") | case _ => println("none") | } age ...在以下? scala> b match { | …

3
x?.y?.z是什么意思?
C#中的模式匹配规范草案包含以下代码示例: Type? v = x?.y?.z; if (v.HasValue) { var value = v.GetValueOrDefault(); // code using value } 据我所知,Type?表明Type是空的,但假设x,y以及z是当地居民有哪些呢x?.y?.z是什么意思?

3
如何以完整而优雅的方式使用固定最小长度的列表?
我目前正在处理这样的功能: foo = (\(a:b:c:d:e:f:_) -> foobar a b c d e f) . (++ repeat def) 换句话说,给定一个列表,它将使用前六个元素来表示某项内容;如果列表的长度少于六个元素,则将其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 …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.