2012-08-01 66 views
1

假设我们有一个包含多个事物描述的列表。描述由逗号分隔的单词组成。让我们以下列表为例(每一行是一个单独的说明):解析不规则逗号分隔值的算法

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

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

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

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

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

编辑:对不起,忘了提及没有已知和固定的词汇。在不同的类别中可能会有相同的单词。 但是,我认为我错过的最重要的事情是:大多数条目都是正规的。所以我想我们可以用它来成长字典。

+1

数据是如何生成的?这是你做的事吗?还是你从外部来源? – 2012-08-01 18:55:27

+1

你对颜色,材质和形状有一个已知和固定的词汇吗?是否有重叠(例如,颜色=沙子和材质=沙子)? – 2012-08-01 18:57:11

+0

查看编辑的答案@TedHopp – sorgenkind 2012-08-01 19:25:58

回答

0

从三个单词列表,材料,颜色和形状开始。对于要分析的每一行,尝试将每个条目与所有三个列表中的单词进行匹配。当你有一场比赛将其放入相关的结构领域。如果您有2个匹配,请将第三个追加到不匹配的列表中。如果您可以匹配少于2个条目,那么跳过该行并在第二遍中尝试使用更大的列表。如果你不能解析后面的行,比如说第3遍,那么请求用户解析该行并将条目追加到相关列表中。

1

对于第一步宝宝来说,我的想法是建立颜色,材质和形状的字典,然后根据这些字典来解析。

否则,你无法检测哪些词属于哪个

2

类如果没有某种形式的限制,这是一个不可能的问题。假设你有某种字典来分类单词(或许含糊不清),你可以取得一些进展。下面是一个算法的概要:

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

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