我有一个字符串列表,其中包含大小为152MB的文本文件中的大约700万个项目.我想知道什么是实现一个函数的最佳方法,该函数接受一个字符串并返回它是否在该字符串列表中.
我是Haskell和编程的新手.关于在模式匹配的递归函数中绑定的问题.例如,假设我有一个函数来检查给定列表(x:xs)是否是另一个列表的子列表(y:ys).根据我的教科书中的例子,我最初的想法是:
sublist [] ys = True
sublist xs [] = False
sublist (x:xs) (y:ys)
| x == y = sublist xs ys
| x /= y = sublist (x:xs) ys
Run Code Online (Sandbox Code Playgroud)
这适用于测试数据,例如,
sublist [1, 2, 3] [1, 2, 4, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
在哪里,我预计它会失败.我希望它会失败,因为
sublist [1, 2, 3] [1, 2, 4, 1, 2, 3]
= sublist [2, 3] [2, 4, 1, 2, 3]
= sublist [3] [4, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
在这一点上,我认为,[3] = 3:[]将与子列表中的(x:xs)匹配,[4,1,2,3]将与子列表中的(y:ys)匹配.那么子列表是如何工作的呢?
编辑:感谢大家,我想我已经解决了我的问题.如上所述,我("下意识地")想要子列表为我回溯.使用最后一个答案(BMeph)作为指南,我决定以不同的方式解决问题,以解决"绑定问题",即"回溯"问题.
subseq :: (Eq …Run Code Online (Sandbox Code Playgroud) 如果我运行grep -C 1 match以下文件:
a
b
match1
c
d
e
match2
f
match3
g
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
b
match1
c
--
e
match2
f
match3
g
Run Code Online (Sandbox Code Playgroud)
如您所见,由于连续匹配"match2"和"match3"的上下文重叠,因此它们会合并.但是,我更愿意为每个匹配获得一个上下文描述,可能在上下文报告中复制输入行.在这种情况下,我想要的是:
b
match1
c
--
e
match2
f
--
f
match3
g
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最佳方法是什么?我宁愿解决方案,足够一般是平凡适用于其他grep选项(不同的值-A,-B,-C,或完全不同的标志).理想情况下,我希望有一个聪明的方法来做到这一点grep....
我必须编写一个程序,将10'000'000个实体相互比较.这些实体基本上是数据库/ csv文件中的平行.
比较算法必须非常灵活,它基于规则引擎,最终用户输入规则,每个实体与每个其他实体匹配.
我正在考虑如何将此任务拆分为较小的工作负载,但我还没有找到任何东西.由于规则是由最终用户输入的,因此预先排序DataSet似乎是不可能的.
我现在要做的是将整个DataSet放在内存中并处理每个项目.但这不是很高效,需要大约.20 GB内存(压缩).
你知道如何分割工作量或减少它的大小吗?
谢谢
因此,请遵循Matching包中的示例,特别是GenMatch示例 链接到pdf
按照这里的例子
library(Matching)
data(lalonde)
attach(lalonde)
X = cbind(age, educ, black, hisp, married, nodegr, u74, u75, re75, re74)
BalanceMat <- cbind(age, educ, black, hisp, married, nodegr, u74, u75, re75, re74,
I(re74*re75))
genout <- GenMatch(Tr=treat, X=X, BalanceMatrix=BalanceMat, estimand="ATE", M=1,
pop.size=16, max.generations=10, wait.generations=1)
Y=re78/1000
mout <- Match(Y=Y, Tr=treat, X=X, Weight.matrix=genout)
summary(mout)
Run Code Online (Sandbox Code Playgroud)
我们看到所有治疗病例都与对照病例相匹配.现在假设我们想要在已婚状态(或任何其他变量)上进行精确匹配.但是我们仍然希望使用之前创建的GenMatch矩阵.
参考链接
Exact = .....如果提供了逻辑向量,则应为X中的每个协变量提供逻辑值.使用逻辑向量允许用户为某些变量指定精确匹配,但不为其他变量指定精确匹配.如果未找到完全匹配,则会删除观察结果.
因此以下是正确的??
mout2 <- Match(Y=Y, Tr=treat, X=X, exact=c(0,0,0,0,1,0,0,0,0,0), Weight.matrix=genout)
summary(mout2)
Run Code Online (Sandbox Code Playgroud)
我会说那是不正确的,就像你比较一样
summary(mout$weights)
summary(mout2$weights)
Run Code Online (Sandbox Code Playgroud)
你得到相同的价值观
基本上我只是想找到一种方法来找到最接近的匹配(不一定是精确的) String
例如,发现"delicous"在{"pie", "delicious", "test"}
这很明显,但数组中的值可能并不总是那么明显.
有人可以帮助我实现这一目标.
免责声明:这不是任何一种功课,在我浏览所有圣诞卡时,我才想到这个问题
问题如下:我们有M个信封和N个字母,每个字母被描述为一对正整数.信封和字母都是矩形的,显然可以旋转.如果两个尺寸都小于或等于信封的尺寸,则字母会放入信封中.目标是找到最大的信封 - 字母匹配.
该问题很容易转换为最大的二分匹配问题,其中O(sqrt(M+N) * MN)存在一个运行的算法(Hopcroft-Karp,转换平常运行O(MN)).我试图提出一个贪婪的算法或动态的方法,但我没有找到任何.
你知道更快的解决方案吗?
我有一个Adhoc iOS应用程序,它给了我"在xcode 6中找不到匹配的配置文件",我创建了一个Adhoc配置文件,下载它,双击它并在General - Identity下选择了一个团队.但我接着得到了那条消息,并尝试使用"修复问题"按钮没有帮助.在构建设置 - 供应配置文件 - 发布我有"自动".
任何人都可以帮助我,我完全迷失了......
我遇到了以下问题
vec <- c("a11","b21","c31")
df <- data.frame(a = c(0,0,0), b = c(1,1,1), row.names = vec)
df["a",]
Run Code Online (Sandbox Code Playgroud)
回报
df["a",]
a b
a11 0 1
Run Code Online (Sandbox Code Playgroud)
然而,
"a" %in% vec
Run Code Online (Sandbox Code Playgroud)
和
"a" %in% rownames(df)
Run Code Online (Sandbox Code Playgroud)
两者都返回False
当使用字母后跟行号的数字时,R允许字符串的部分匹配.我已经在R v3.2.2和R v3.2.1上复制了这个.甚至
df[["a",1,exact=T]]
Run Code Online (Sandbox Code Playgroud)
返回0
有什么我可以设置,以便R不允许这种部分匹配?
我有两个包含地址的表(街道,城市,邮政编码和两个包含这些连接值的字段),我想对Zipcode进行模糊匹配,但仅适用于具有完全相同StrCity值的情况.我开始首先只选择与字典中的StrCity匹配然后进行模糊匹配的地址,但有两个问题:
1)如果与Zipcode匹配,它不考虑街道和城市2)如果匹配地址(包含所有的Zipcode,Street和City),它也返回可能的值,在同一个邮政编码上有另一条街道在距离方面足够接近.
可能我需要同时做两个不同的匹配(一个模糊和一个精确),但我不知道如何实现它,而不是在性能方面杀死我的计算机.
这是TableAd的数据样本:
StrCity ID Zipcode Street City Address
Bia?owiejskaWarszawa 5148676 01-459 Bia?owiejska Warszawa 01-459Bia?owiejskaWarszawa
Bukowi?skaWarszawa 6423687 02-730 Bukowi?ska Warszawa 02-730Bukowi?skaWarszawa
Kana?owaWarszawa 6425093 03-536 Kana?owa Warszawa 03-536Kana?owaWarszawa
Run Code Online (Sandbox Code Playgroud)
字典样本:
Zipcode Street City Address StrCity
02-882 Agaty Warszawa 02-882AgatyWarszawa AgatyWarszawa
03-663 Kana?owa Warszawa 03-663Kana?owaWarszawa Kana?owaWarszawa
03-536 Ko?owa Warszawa 03-536Ko?owaWarszawa Ko?owaWarszawa
Run Code Online (Sandbox Code Playgroud)
这是我目前的代码:
TableMatch <- merge(TableAd, TableDict, by="StrCity")
TableMatch <- TableMatch[, -grep("y", colnames(TableMatch))]
names(TableMatch)[names(TableMatch)=="Zipcode.x"] <- "Zipcode"
names(TableMatch)[names(TableMatch)=="Address.x"] <- "Address"
ResultTable <- TableMatch %>%
stringdist_left_join(TableDict, by="Address", distance_col="dist", method="lv", max_dist=5, ignore_case = TRUE) %>%
select(ID, …Run Code Online (Sandbox Code Playgroud)