【发布时间】:2012-03-01 20:07:09
【问题描述】:
我有很多短语,例如
"Nola jumped off the cliff"
"Loroy jumped off the cliff"
"Nola jumped off the couch"
"Leroy lept off the couch"
我需要在一个短语中找到一个不同单词的每个点,并将该单词添加到一个节点,该节点是一个可以在短语中该位置使用的单词列表。所以我们最终会得到。
"Node1(1) Node2(1) off the Node3(1)"
"Node1(2) Node2(1) off the Node3(1)"
...etc
其中节点 1 代表名称列表 (Nola,Leroy),节点 2 代表动作列表 (jumped,lept),节点 3 最终代表位置列表 (cliff,couch)
这个想法是获取一个短语列表,并让它自动创建节点,并用短语中可以在该节点处使用的单词填充它。
那么,第一,我将如何生成短语节点列表?我一直无法弄清楚如何比较两个句子,看看它们是否完全一样减去一个单词。
第二次设置节点后,比较所有节点组合以得出新匹配的最佳方法是什么? (希望有道理)
【问题讨论】:
-
“我需要找到一个短语中的每个点,它是一个不同的单词”——不同于 what?
-
您可以使用 string.Split() 将每个字符串拆分为一个 string[] 并使用空格作为分隔符。然后比较结果数组中的每个字符串。
-
您可以为句子中的每个单词位置创建“节点列表”,遍历所有样本,并收集您的节点。然后你可以折叠所有只包含一个单词的节点(在你的例子中,位置 3 和 4 的节点)。
-
您可能希望从解决最长公共子序列问题开始。我在这里有一个 JavaScript 解决方案的草图;应该很容易适应C#:blogs.msdn.com/b/ericlippert/archive/2004/07/21/189974.aspx
标签: c# string comparison