2012-07-19 37 views
3

我正在創建一個應用程序,該應用程序正在從舊的問題論文中創建問題的數據庫。我想保留一張表格,將相似的問題連在一起插入。 (我想到的表是修改的預定義遍歷樹)。在考試試卷中鏈接類似的總和/問題

我的要求是:

  1. 與改變數字題應該連在一起
  2. 與專有名詞/名被不同的應連在一起Word中的問題。
  3. XYZ,ABC,PQR,MNO是等效的(例如三角形命名法)
  4. 忽略標點和連詞以及'小詞'。
  5. 標籤!我用它的主題標記每個問題。數學問題與歷史問題類似的可能性很少。但化學熱力學問題可能類似於物理熱力學問題。

任何有關如何繼續進行算法方面的事情將非常感激。

另外我會處理包含數學符號的圖像。我是否應該確保我的所有圖像在'ALT'屬性中都有LaTeX,以確保它們可以通過此算法處理,或者有更好的方法來實現它?

回答

2

這聽起來像是你想要考慮兩個問題,當他們有相同的句子結構時,類似的句法模式,你希望改變後洗出清單。因爲這樣的問題看起來類似於在語料庫中檢測近似重複的文檔的問題。

這樣做的一種方法是一種叫做「simhashing」的技術。一個需要(預處理)文件並計算一個simhash指紋。像典型的散列一樣,指紋具有固定大小,看起來像二進制亂碼。 不同,一個典型的散列,文本相似的文檔也會有相似的指紋。通過選擇指紋可以不同的最大(漢明)距離,您可以定義您認爲「相似」的文檔羣集(問題)。

用於索引的新問題則是這樣的過程:

  1. 規範化問題文本。這是一項標準的信息檢索任務,對每個人來說意味着稍微不同的事情,但是轉換如破壞空白,將所有內容放在小寫字母中並剝離標點是典型的。您可能還想將所有數字或專有名稱的白名單變爲佔位符(「數字」,「名稱」等)
  2. 將生成的文本輸入到simhash實現中以獲取指紋。
  3. 在您的語料庫中搜索足夠靠近新語料的指紋。這實際上比你想象的要有效得多。Google came up with a reasonable approach,這歸結爲指紋的排序表中增加了一些人工的。
  4. 在發現問題插入一個應該被視爲類似,您可以自由丟棄重複的問題,掛在它和做簿記等。

book是一般信息檢索的優秀入門。這是simhash paper。這裏有一個簡單的程序來計算simhashes的manpage,它可能是一個很好的起點,如果你不想讓自己實現算法。

+0

+1」你也可能想把所有的數字或白名單的專名變成佔位符(「數字」,「名字」等)和指向simhashing :) – Angad 2012-07-20 16:40:48

+0

這可能讓我完全聽起來白癡,但它值得一試。我可以使用Jaro-Winkler距離比較這些哈希值以找到類似的哈希值嗎?效率似乎是一個很大的問題,正如http://dannykopping.com/blog/fuzzy-text-search-mysql-jaro-winkler 中指出的那樣,我想我必須添加一些索引來簡化流水線哈希匹配。但是我覺得我現在似乎得到它:) – Angad 2012-07-20 17:28:39

+0

你可以使用一個加權哈羅 - 溫克勒判斷simhash距離。問題是,哈希「0af」應被視爲接近「0bf」比「0FF」,儘管都是由一個字符被關閉; JW會認爲這些是等距的(如果我正確地閱讀它的話)。通過將哈希保持爲字符「0」和「1」的文本字符串,可以跳舞,在這種情況下,JW降低到漢明距離。不過,我仍然建議只是在simhashes上保留索引/排序表並使用二分查找來堅持。 – phs 2012-07-20 23:04:09

2

您需要需要來做特徵提取和讀取。

數據挖掘的關鍵是預處理。你不能把硬盤放在它上面,並期望它找到有用的東西,但是你需要通過適當地預處理數據來指導搜索。這可能是90%的工作。所以請閱讀功能提取!

+0

+1爲指針特徵提取:)我想學習一些問題創造了一套基本的「標籤」,我可以從身體的問題自動檢測的。這將是一個非常漫長的過程。有沒有辦法創建我缺少的「自動學習」系統? 「 – Angad 2012-07-20 16:43:35