解析不规则逗号分隔值的算法

时间:2012-08-01 18:53:30

标签: algorithm machine-learning

假设我们有一个包含多个事物描述的列表。描述由逗号分隔的单词组成。让我们以下面的列表为例(每一行都是单独的描述):

white, leather, round
black, plastic, rectangular
wood, rectangular, brown
...

我们希望将它们解析为以下结构:(颜色,材质,形状)

前两个描述可以直接映射到我们的结构中。但第三个不能。因为值的顺序不同:材料,形状,颜色。

所以实际的问题是:我们如何检测这些不规则的条目并解析它们?

我想我们必须以某种方式检测每个单词所描述的部分。但我甚至不知道在哪里以及如何开始。我也非常感谢任何提示,算法和论文(关于相关算法)。

编辑:抱歉忘了提及没有已知和固定的词汇表。在不同的类别中可能会有相同的单词。 但是,我认为我错过的最重要的事情可能是:大多数条目是定期的。所以我想我们可以用某种方式来发展字典。

4 个答案:

答案 0 :(得分:2)

没有某种限制,这是一个不可能的问题。假设你有某种字典来对词进行分类(可能含糊不清),你可以取得一些进展。以下是算法的概述:

  1. 首先,将每行解析为三个单词,而不对其进行分类。
  2. 然后使用字典为每个单词分配一组候选类别(颜色,材料和/或形状)。
  3. 如果单词只有一个类别,则从其他两个单词中删除该类别。重复,直到无法取得进一步进展。
  4. 如果所有单词都只有一个类别,那么您已经完成并找到了唯一的解决方案。
  5. 如果任何单词的类别为零,则这三个单词组合无效。
  6. 您现在必须猜测:选择一个包含多个类别的单词,并选择一个类别作为该单词的暂定作业。重新应用步骤3中的规则。
  7. 如果任何单词的类别为零,则如果尚未尝试任何类别,则返回步骤6;否则退出。
  8. 如果所有单词都有一个类别,那么您就找到了一致的作业。如果您只需要某些解决方案,那么请退出此解决方案。如果您需要所有解决方案,请将此解决方案添加到一组解决方案中,并回溯到步骤6以进行另一次尝试。
  9. 如果某些单词仍有多个类别,请返回步骤6(不回溯)。

答案 1 :(得分:1)

对于第一个婴儿步骤,我的想法是建立颜色,材料和形状的词典,然后根据这个词典进行解析。

否则,您无法检测哪个词属于哪个类别

答案 2 :(得分:0)

从三个单词列表,材质,颜色和形状开始。对于要解析的每一行,尝试将每个条目与所有三个列表中的单词进行匹配。当你有匹配时,将它放入相关的结构字段中。如果您有2个匹配项,请将第三个匹配项附加到不匹配的列表中。如果你可以匹配少于2个条目,那么跳过那一行并在第二次传递中尝试使用希望更大的列表。如果您无法在第3个传递之后解析该行,则要求用户解析该行并将条目附加到相关列表中。

答案 3 :(得分:0)

在每个位置保留三个单词列表。给定新条目,基于其在该列表中的频率(绝对频率和/或相对于其总出现次数)对每个列表的每个单词进行评分。对于具有最高分数的单词列表组合,将该单词与该列表匹配。在剩下的两个单词和两个列表中重复。然后将最后剩余的单词与最后剩余的单词匹配。