2013-07-06 81 views
0

如何使用機器學習或其他技術來區分什麼是數學用戶輸入和什麼不是PHP中的數學用戶輸入?區分數學用戶輸入和其他所有其他

通過數學用戶輸入,我的意思是一個可以計算/求解的數學語句。

因此,我構建了一個可以在PHP中處理基本算術的計算器。 之前,我通過用戶輸入我想檢查它是否是一個可以計算的數學語句。如果它不是,那麼echo "can not be computed";

因此,在僞代碼/半碼:

function isComputable($input){ 
    /* code I need help with here */ 
} 
$userInput = $_GET['input']; 
if(isComputable($userInput){ 
    compute($userInput); 
} 
else{ 
    echo "can not be computed"; 
} 

什麼是PHP來做到這一點的最好方法是什麼?

+0

我不清楚你的問題。你有表達驗證問題嗎? – Fallen

+0

@MuhammedHedayet目前我只是使用正則表達式來查找數字,空格,數學運算符,數字。我覺得這太具體了。我正在尋找更廣泛的東西。 –

+0

那麼我認爲[Shunting Yard算法](http://en.wikipedia.org/wiki/Shunting-yard_algorithm)將用於你正在尋找的東西:) – Fallen

回答

0

最快方式做一些PHP(或JavaScript,爲此事)類型的「計算器」你描述將

  1. 驗證輸入,以確保中的字符,它包含十進制數字,圓括號和符號+,-,*/,然後
  2. 將該字符串傳遞給邪惡eval函數。

你會得到一個結果或問題。當然,使用eval已知是危險的,大多數人不會使用它(參見文檔中的WARNING!)在這種情況下,人們可能會說「至少如果我確保只有數字,parens ,那裏的運營商,那麼我想eval將是安全的。「但是,儘管如此,你應該明智的不要冒險。您應該定義一些算術表達式的語法,然後使用解析器來驗證字符串並進行評估。這不是一個微不足道的代碼,但someone has already done this on StackOverflow - 所以採用該代碼爲您的計算器。

滾動你自己的評估者(除了不必向你的朋友解釋你使用的是eval :))的好處是你可以添加自己的操作符,甚至可以用任意的精確數學做一些不錯的技巧。這不僅僅需要五分鐘,而是一個有用的練習。

1

Shunting-yard algorithm是一個很好的解決這個問題。您可以在PHP在線找到很多Shunting-yard算法的實現。它只需要一個堆棧和一個隊列數據結構來檢查表達式是否正確。

1

據我所知,OP已經建立了計算器。他不想評估一個表達式,他只是想知道給定的字符串是否是數學表達式。爲什麼不嘗試一種機器學習方法?您可以使用幾個可接受的數學表達式來訓練分類器。

您可以使用在線API(如Wit)來嘗試此方法。