小编lat*_*lip的帖子

在一大组字符串中查找类似字符串的组

我有一个相当大的字符串集(比如100),它有许多以其相似性为特征的子组.我试图找到/设计一个算法,可以合理有效地找到这些组.

举个例子,假设输入列表位于左下方,输出组位于右侧.

Input                           Output
-----------------               -----------------
Jane Doe                        Mr Philip Roberts
Mr Philip Roberts               Phil Roberts     
Foo McBar                       Philip Roberts   
David Jones                     
Phil Roberts                    Foo McBar        
Davey Jones            =>         
John Smith                      David Jones      
Philip Roberts                  Dave Jones       
Dave Jones                      Davey Jones      
Jonny Smith                     
                                Jane Doe         

                                John Smith       
                                Jonny Smith 
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何合理有效地解决这个问题?

寻找类似字符串的标准方法似乎是Levenshtein距离,但我无法看到如何在这里充分利用它,而不必将每个字符串与列表中的每个其他字符串进行比较,然后以某种方式决定差异判断两个字符串是否在同一组中的阈值.

另一种方法是将字符串分解为整数的算法,其中类似的字符串散列为在数字行上靠近的整数.我不知道会是什么算法,如果有的话甚至存在

有没有人有任何想法/指示?


更新:@Will A:也许名字并不像我最初想的那么好.作为一个起点,我认为我可以假设在我将使用的数据中,字符串中的一个小变化不会使它从一个组跳到另一个组.

string algorithm design-patterns

41
推荐指数
2
解决办法
2万
查看次数

将服务绑定到angular的$ rootScope是不是很糟糕?

在角度,我有一个对象将通过服务暴露在我的应用程序中.

该对象上的某些字段是动态的,并且将通过使用该服务的控制器中的绑定正常更新.但是一些字段是计算属性,取决于其他字段,需要动态更新.

这里有一个简单的例子(这是工作在jsbin 这里).我的服务模型公开领域a,bc在那里c通过以下公式计算a + BcalcC().请注意,在我的实际应用程序中,计算要复杂得多,但实质内容就在这里.

我能想到让它工作的唯一方法是将我的服务模型绑定到$rootScope,然后$rootScope.$watch用来监视任何控制器更改ab何时更改,重新计算c.但这看起来很难看.有没有更好的方法呢?


第二个问题是表现.在我的整个应用程序ab是对象的大名单,其中获得合计下来c.这意味着$rootScope.$watch函数将进行大量深度数组检查,这听起来会损害性能.

我在BackBone中采用了一种平衡的方法,尽可能地减少了重新计算,但角度似乎并不适合采用一种方法.对此的任何想法都会很棒.


这是示例应用程序.

var myModule = angular.module('myModule', []);

//A service providing a model available to multiple controllers
myModule.factory('aModel', function($rootScope) {
  var myModel = {
    a: 10,
    b: 10,
    c: null
  };

  //compute c from a and b
  calcC = function() …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs angularjs-rootscope

32
推荐指数
2
解决办法
3万
查看次数

给定切片列表,如何按顺序拆分序列?

给定切片列表,如何基于它们分离序列?

我有很长的氨基酸字符串,我想根据列表中的起止值进行拆分.一个例子可能是最明确的解释方式:

str = "MSEPAGDVRQNPCGSKAC"
split_points = [[1,3], [7,10], [12,13]]

output >> ['M', '(SEP)', 'AGD', '(VRQN)', 'P', '(CG)', 'SKAC']
Run Code Online (Sandbox Code Playgroud)

额外的括号是显示从split_points列表中选择的元素.我不认为开始 - 停止点会重叠.

我有一堆可行的想法,但看起来非常低效(代码长度明智),似乎必须有一个很好的pythonic方式来做到这一点.

python

11
推荐指数
1
解决办法
430
查看次数

在VIM中重用ex命令中的先前范围

是否可以在VIM中重用ex命令的范围?

例如,我可以使用以下命令将当前文件中的第4行(第10行)写入(复制)到新文件:

:4,10w foo/bar.txt
Run Code Online (Sandbox Code Playgroud)

但我真正想做的是将线移到一个新文件.我可以这样做:

:4,10w foo/bar.txt
:4,10d
Run Code Online (Sandbox Code Playgroud)

但是两次输入4,10都有点烦人.

所以我有两个问题:

  1. 通常,有没有办法在ex命令中引用先前使用的范围?
  2. 具体来说,如果没有办法(1),是否有更简单的方法将一行文件中的一些行剪切并粘贴到一个新文件中.

vim

9
推荐指数
2
解决办法
654
查看次数

将base64图像转换为multipart/form-data并使用jQuery发送

我在javascript中有一个base64编码的jpg,我想发布到期望multipart/form-data的服务器.

具体来说,对于关键跟踪器API,它有一个示例curl调用,如下所示:

curl -H "X-TrackerToken: TOKEN" -X POST -F Filedata=@/path/to/file \
http://www.pivotaltracker.com/services/v3/projects/PROJECT_ID/stories/STORY_ID/attachments
Run Code Online (Sandbox Code Playgroud)

我有基本的XML调用他们的API工作正常,使用.ajax像这样:

$.ajax({
  url: 'http://www.pivotaltracker.com/services/v3/projects/158325/stories',
  type: 'POST',
  contentType: 'application/xml',
  dataType: 'xml',
  beforeSend: function(xhr) {
    xhr.setRequestHeader("X-TrackerToken", "<KEY>")
  },
  data: '<story><story_type>feature</story_type><name>Fire torpedoes</name></story>',
  success: function() { alert('PUT completed'); }
});
Run Code Online (Sandbox Code Playgroud)

但我很难理解如何使用我的base64编码的jpg并发送它,好像我已经在表单中上传了一个文件.

有任何想法吗?

javascript api jquery base64

8
推荐指数
1
解决办法
1万
查看次数

如何将活动记录视为真实属性等虚拟属性?

我很高兴在Rails模型上使用虚拟属性,如果它们是字符串,但我也想使用其他类型的属性,如日期或布尔值,以便我可以使用像date_select这样的帮助器来设置虚拟属性.

有这么好的方法吗?

就目前而言,在虚拟属性上使用date_select助手会引发:

1 error(s) on assignment of multiparameter attributes
Run Code Online (Sandbox Code Playgroud)

如果我想要一个布尔属性,我最终会得到@v_attribute = "true",而不是@v_attr = true.


我找到了一个似乎有用的例子:

class MyModel
  #virtual attribute
  attr_accessor :v_date_field
  attr_accessible :v_date_field

  columns_hash["virtual_date_field"] = ActiveRecord::ConnectionAdapters::Column.new("vi_date_field", nil, "date")
end
Run Code Online (Sandbox Code Playgroud)

但我真的不知道它为什么会起作用,它是否有任何副作用,而且看起来像是一个黑客.

ruby ruby-on-rails

5
推荐指数
1
解决办法
1016
查看次数

具有多列的 Postgres 全文搜索,为什么在索引中而不是在运行时连接?

最近几天我在 postgres 中遇到了全文搜索,在跨多列搜索时我对索引有点困惑。

postgres文档讨论了ts_vector在连接列上创建索引,如下所示:

CREATE INDEX pgweb_idx ON pgweb 
    USING gin(to_tsvector('english', title || ' ' || body));
Run Code Online (Sandbox Code Playgroud)

我可以这样搜索:

... WHERE 
      (to_tsvector('english', title||' '||body) @@ to_tsquery('english', 'foo'))
Run Code Online (Sandbox Code Playgroud)

但是,如果我想有时只搜索标题,有时只搜索正文,有时两者都搜索,我将需要 3 个单独的索引。如果我添加了第三列,那可能是 6 个索引,依此类推。

我在文档中没有看到的另一种方法是单独索引两列,然后只使用普通WHERE...AND查询:

... WHERE
      (to_tsvector('english', title) @@ to_tsquery('english','foo'))
    AND
      (to_tsvector('english', body) @@ to_tsquery('english','foo'))
Run Code Online (Sandbox Code Playgroud)

在大约 100 万行上对两者进行基准测试似乎在性能上基本上没有差异。

所以我的问题是:

为什么我要像这样连接索引,而不是单独索引列?两者的优点/缺点是什么?

我最好的猜测是,如果我事先知道我只想搜索两列(一次从不搜索),我将只需要通过连接使用较少内存的一个索引。


编辑

移至:https : //dba.stackexchange.com/questions/15412/postgres-full-text-search-with-multiple-columns-why-concat-in-index-and-not-at

postgresql indexing search

4
推荐指数
1
解决办法
6068
查看次数

在全表的子集上操作时LIKE查询的性能影响

我很欣赏LIKE查询很慢,因为它们无法编入索引.但是,我很好奇在这种情况下的性能影响:

说我有一个像这样的表:

user_id  |  message 
-------------------
   1     |  foo bar baz
   1     |  bar buz qux
   .     .      .
   .     .      .
   2     |  bux bar foo
   2     |  bar
Run Code Online (Sandbox Code Playgroud)

我说100万行,但有10,000个用户,所以每个用户有大约100条消息.

显然搜索如下:

SELECT * FROM table WHERE message like '%ar%';
Run Code Online (Sandbox Code Playgroud)

会很慢.但是在我的应用程序中,我只会搜索用户的消息:

SELECT * FROM table WHERE message like '%ar%' AND user_id = 2;
Run Code Online (Sandbox Code Playgroud)

其中user_id列将被索引.

我是否正确地认为在这样的场景中,Postgres只会在使用索引的user_id列而不是完整的表后对用户~100行执行慢LIKE查询 - 从而限制了我的性能损失?

而且只要任何一个用户只有大约100条消息,这样的查询对于10或1亿用户来说不会明显变慢?

sql postgresql indexing pattern-matching sql-like

4
推荐指数
1
解决办法
3508
查看次数