比方说,我有一个名称字典(一个巨大的CSV文件)。我想从一个没有明显的可解析点(。, - ,_)的电子邮件中猜出一个名字。我想要做这样的事情:走过字符串猜测基于名称字典的电子邮件名称?
dict = ["sam", "joe", "john", "parker", "jane", "smith", "doe"]
word = "johnsmith"
x = 0
y = word.length-1
name_array = []
for i in x..y
match_me = word[x..i]
dict.each do |name|
if match_me == name
name_array << name
end
end
end
name_array
# => ["john"]
不坏,但我想要的“约翰·史密斯”或[“约翰”,“史密斯”]
换句话说,我递归遍历字(即,未分析的电子邮件字符串,“[email protected]”),直到我在字典中找到匹配。 我知道:这是非常低效的。如果有更简单的方法来做到这一点,我全是耳朵!
如果没有更好的方法去做,那么请告诉我如何解决上面的例子,因为它有两个主要缺陷:(1)我如何设置循环的长度(请参阅找到“我(2)如何在上面的例子中增加“x”,这样我就可以在给定任意字符串的情况下遍历所有可能的字符组合?
问题,找到环路的长度,“我”的:
for an arbitrary word, how can we derive "i" given the pattern below?
for a (i = 1)
a
for ab (i = 3)
a
ab
b
for abc (i = 6)
a
ab
abc
b
bc
c
for abcd (i = 10)
a
ab
abc
abcd
b
bc
bcd
c
cd
d
for abcde (i = 15)
a
ab
abc
abcd
abcde
b
bc
bcd
bcde
c
cd
cde
d
de
e
进一步的研究表明,可以使用三角形序列序列来导出“i”:a(n)= C(n + 1,2)= n(n + 1)/ 2 = 0 + 1 + 2 +。 .. + N。 http://oeis.org/search?q=1%2C+3%2C+6%2C+10%2C+15&language=english&go=Search – MorningHacker