【发布时间】:2012-05-03 14:02:15
【问题描述】:
这是对this response 和用户发布的伪代码算法的后续问题。由于它的年龄,我没有对这个问题发表评论。我只对验证字符串是否可以拆分为单词感兴趣。该算法不需要实际拆分字符串。这是来自链接问题的回复:
让 S[1..length(w)] 是一个带有布尔条目的表。 S[i] 为真,如果 单词 w[1..i] 可以拆分。然后设置 S[1] = isWord(w[1]) 并为 i=2 到 length(w) 计算
S[i] = (isWord[w[1..i] 或对于 {2..i} 中的任何 j:S[j-1] 和 isWord[j..i])。
我正在将此算法翻译成简单的 python 代码,但我不确定我是否正确理解它。代码:
def is_all_words(a_string, dictionary)):
str_len = len(a_string)
S = [False] * str_len
S[0] = is_word(a_string[0], dictionary)
for i in range(1, str_len):
check = is_word(a_string[0:i], dictionary)
if (check):
S[i] = check
else:
for j in range(1, str_len):
check = (S[j - 1] and is_word(a_string[j:i]), dictionary)
if (check):
S[i] == True
break
return S
我有两个相关的问题。 1) 这段代码是否将链接算法正确翻译成 Python,如果是,2) 现在我有了 S,我如何使用它来判断字符串 is 是否仅由单词组成?在这种情况下,is_word 是一个简单地在列表中查找给定单词的函数。我还没有实现它作为一个尝试。
更新:更新代码以包含建议的更改后,它不起作用。这是更新后的代码:
def is_all_words(a_string, dictionary)):
str_len = len(a_string)
S = [False] * str_len
S[0] = is_word(a_string[0], dictionary)
for i in range(1, str_len):
check = is_word(a_string[0:i], dictionary)
if (check):
S[i] = check
else:
for j in range(1, i): #THIS LINE WAS UPDATED
check = (S[j - 1] and is_word(a_string[j:i]), dictionary)
if (check):
S[i] == True
break
return S
a_string = "carrotforever"
S = is_all_words(a_string, dictionary)
print(S[len(S) - 1]) #prints FALSE
a_string = "hello"
S = is_all_words(a_string, dictionary)
print(S[len(S) - 1]) #prints TRUE
它应该为这两个返回True。
【问题讨论】:
-
你有没有让这个工作?
-
@thinkdevcode 是的。请参阅我对accepted answer 的评论。
标签: python algorithm nlp dynamic-programming text-segmentation