2015-07-21 76 views
4

我試圖用他們今天的菜單來顯示辦公室周圍的午餐場所列表。但問題是提供午餐菜單的網站並不總是提供相同類型的內容。混合內容的一組頁面的最佳方式

例如,一些網站提供了一個不錯的JSON輸出。 Look at this one,它分開提供英文/芬蘭課程名稱,我需要的一切都可用。有這樣的其他人。

但其他人,並不總是有一個很好的輸出。 Like this one。內容以簡單的HTML佈局,而英文和芬蘭食品名稱並沒有完全排列。此外,像(L,VL,VS,G等)的食物屬性只是正常的文字,如食物名稱。

在您看來,什麼是以不同格式提取所有這些可用數據並將其轉換爲可用數據的最佳方式?我試圖用Node.js(& phantomjs等)製作一個刮板,但它只適用於一個網站,並且在食品名稱不準確的情況下。

在此先感謝。

回答

1

你可以使用像kimonolabs.com這樣的東西,它們更容易使用,它們爲你提供API來更新你的一面。 請記住,它們最適合表格數據內容。

1

那裏有我的問題的簡單算法解決方案,如果有一個所有可用的食物名稱列表,這可能是非常有幫助的,你會發現一個食物名稱(今天)的發生。

如果沒有任何食物列表,您可以使用TF/IDF。 TF/IDF允許計算當前文檔和其他文檔之間文檔中單詞的分數。但是這個解決方案需要足夠的數據來工作

我認爲最好的辦法就是一些這樣的事:

  1. 創建應報廢的所有可用網站的列表。
  2. 爲每個網站數據編寫驅動程序類。
  3. 每個驅動程序都有責任從其標準文檔創建通用域實體。

如果您可以使用PHP,Simple HTML Dom Parser以及Guzzle將是一個不錯的選擇。這兩個將提供一個類似jQuery的路徑查找器和一個很好的包裝器。

0

您正在觸摸真正困難的問題。不幸的是,沒有簡單的解決方案

其實有兩個不同的部分來解決:

  1. 數據從不同的來源刮
  2. 數據集成

讓我們先從第一個問題 - 數據從不同的來源刮。在我的項目中,我通常會分幾步處理數據。我有專門的刮削器,因爲我希望所有的特定網站,並按照以下順序處理它們:

  1. 獲取原始頁面(非結構化數據)頁面
  2. 提取數據(非結構化數據)
  3. 提取,轉換和地圖數據轉換成特定頁面模型(完全結構化數據)從完全結構模型來共同/歸一化的模型
  4. 地圖數據

步驟1-2被刮取向和步驟3-4是嚴格的數據額外面向數據集成。

雖然使用自己的webscrapers或利用現有的web服務可以輕鬆實現步驟1-2,但數據集成是您的案例中最困難的部分。您可能需要一些機器學習技術(淺層,特定領域的自然語言處理)以及自定義啓發式技術。

如果像this one這樣的混亂輸入的情況下,我會單獨處理行,並使用一些字典來擺脫芬蘭語/英語單詞和分析剩下的東西。但在這種情況下,由於人爲輸入錯誤的可能性,它絕對不會100%準確。

我也擔心你的堆棧不太適合做這樣的任務。對於這樣的處理,我正在利用Java/Groovy以及集成框架(Mule ESB/Spring Integration)來協調數據處理。

總結:這是一個非常困難和複雜的問題。我寧願承擔更少的輸入數據覆蓋率,也不願意100%準確(除非真的值得)。

相關問題