2012-08-01 52 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

爲每個位置的單詞保留三個列表。給定一個新條目,根據該列表中的頻率(絕對頻率和/或相對於其發生的總次數)爲每個列表評分每個單詞。對於具有最高分數的單詞列表組合,將該單詞與該列表匹配。在剩下的兩個單詞和兩個列表中重複。然後將剩下的最後一個單詞與最後剩下的單子進行匹配