2011-11-29 73 views
5

我正在使用Java和Swing GUI在我的空閒時間開發財務經理。當用戶添加新條目時,系統會提示他填寫:金額,日期,評論和部分(例如汽車,薪金,計算機,食品等)字符串分析和分類

部分創建爲「即時」。當用戶輸入新的部分時,它將被添加到section-jcombobox以供進一步選擇。另一點是,評論可以用不同的語言。所以硬編碼詞和同義詞的列表將是巨大的。

所以,我的問題是,是否有可能分析評論(例如「燃料」,「汽車服務」,「午餐在**」)並預選一個適合的部分。 我的第一個想法是,如果用戶選擇另一個部分,那麼使用神經網絡並從輸入中學習。

但我的問題是,我不知道如何開始。我嘗試了Eclipse的「encog」並做了一些教程(XOR,...)。但他們都只使用雙打/輸出。

任何人都可以給我一個提示如何啓動或任何其他可能的解決方案呢?

Here是可運行的JAR(目前的發展狀態,需要Java7)和Sourceforge Page

+0

+1不錯的問題。 – gprathour

回答

1

忘掉神經網絡。這是一個高度技術性和專業化的人工智能領域,它可能不適合您的問題,需要紮實的專業知識。此外,針對您的問題還有很多更簡單更好的解決方案。

第一個明顯的解決方案,爲您的所有部分建立單詞和同義詞列表並解析這些同義詞。然後您可以在線收集關於同義詞分析的評論,或者使用解析用戶提供的評論/部分來統計檢測單詞之間的關係等。

有無數種可能的解決方案,從最簡單到最多的矯枉過正。現在您需要確定系統的這個功能是否關鍵(預填充可能不會),以及任何開發工作會帶給您什麼。一個小時的工作可以帶給你80%滿意的功能,而90%的目標需要花費一週的工作時間。是不是真的值得嗎?

尋求最簡單的解決方案,並解決任何開發項目的真正挑戰:交付。一旦您的應用程序交付,那麼您可以隨時返回並根據需要進行改進。

+0

我認爲單詞列表將過大,由於動態部分創建和可能(JAR +資料來源) –

+0

用我們現代化的機器,我會說沒有太大的單詞列表這樣的東西......即使是同義詞詞典也可以很容易地適應記憶。 – solendil

+0

是否有可能將所有用過的單詞存儲在數據庫中的除了被阻止的單詞(in,and,...)之外的評論中,然後將選定的單元分配給它並且當用戶添加評論時,通過(BIG DB)並根據單詞的條目選擇部分?由於大量的數據,我認爲性能會很低。 –

0
String myString = new String(paramInput); 

if(myString.contains("FUEL")){ 
//do the fuel functionality 
} 
+0

請參閱GP Singh的回答 –

0

在一個簡單的應用程序,如果你將有隻有在應用程序中某些特定部分那麼你可以得到從評論字符串,並檢查它是否包含一些關鍵字,然後根據它改變部分的值。

+0

感謝您的答覆。但問題是,這些部分是「即時」創建的。當用戶輸入新的部分時,它將被添加到section-jcombobox以供進一步選擇。所以,它不那麼容易:(另一件事是,這些評論可以用不同的語言。 –

0

如果您有很多類別,我會使用類似於Apache Lucene的東西,您可以使用它們的名稱和可能出現在用戶描述中的潛在關鍵字/短語爲所有類別建立索引。然後,您可以簡單地通過Lucene運行描述,並使用頂級匹配類別作爲「最佳猜測」。

P.S.神經網絡的輸入和輸出將始終是雙精度或浮點數,其值在0和1之間。至於如何實現字符串匹配,我甚至不知道從哪裏開始。

+0

請參閱評論在GP辛格的答案 –

0

在我看來,那下面會做什麼:

  • 硬字統計
  • 也許制止類(英語/西班牙語),從而降低像「午餐」到「午餐」一詞。
  • 的最頻繁的非字(在,在,一,爲...)

最適合的還是一個線性問題,所以理論上適合於神經網絡,但爲什麼不拿名單立即數字最適合。

0

機器學習算法,如人工神經網絡似乎不是這裏最好的解決方案。人工神經網絡可以用於多類分類(即,「輸入表示的是提供的預訓練類中的哪一類?」而不僅僅是「輸入是否表示X?」),這符合您的用例。問題在於他們是受監督的學習方法,因此您需要提供一組關鍵字和類(部分)對的列表,其中涵蓋了您的用戶將提供的每個可能的輸入。這是不可能的,在實踐中,如果有更多的數據可用來產生更好的結果並創建更準確的將輸入映射到輸出的功能的決策邊界/表示,則人工神經網絡將被重新訓練。這也假定你在開始之前知道所有可能的類,並且每個類都有你提供的訓練輸入值。

問題是,您的ANN的輸入(字符列表或字符串的數字散列)不提供用於分類的上下文。沒有提供更高級的信息來描述單詞的含義。這意味着,如果訓練數據不足,則可能會錯誤地分類出一個散列到數值上接近的值的錯誤分類。

(如maclema說,從一個ANN的輸出將總是與表示接近一個類中的每個值浮子 - 或一類具有不確定性的水平)

一個更好的解決辦法是採用某種字關係或同義詞圖。 A Bag of words model可能在此處有用。

編輯:根據您的評論,您不知道節前的部分, 一個簡單的解決方案將提供一個文件中的關鍵字列表,在人們使用該程序時得到更新。簡單地存儲已提供評論的映射 - >您將在數據庫中擁有的部分將允許您篩選出非關鍵字(和,或,,...)。一種選擇是隨後找到所鍵入的關鍵字所屬的每個部分的列表並建議多個部分並讓用戶選擇一個部分。您從用戶選擇中獲得的反饋可以改進未來的建議。另一種方法是計算一個Bayesian probability--給定以前存儲的映射的這個詞屬於X節點的概率 - 對於所有關鍵字和節,並且採用模態節或者對每個唯一關鍵字進行標準化並採取平均值。當你收集更多的課程信息時,概率的計算需要更新,也許這可以在後臺線程中每增加一個新的內容來完成。