2013-03-29 68 views
1

我正在使用監視軟件根據大量網絡資源和方程式查找關於特定主題的文章。方程ressemble以下內容:以上我可以使用什麼輸入文件格式來創建一個等式?

(K1 AND K2) OR K3 NOT "K4" OR "K5 K6"~5 

爲例示出了幾乎所有可能的運算符,是〜接近操作者,當這兩個詞被找到和至多n個字分離請求匹配。

爲了給你一個更精確的例子(是一個字符通配符; *任何數量的字符)

("Game of Thrones" OR "George R. R. Martin") AND (Targaryen? OR Baratheon? NOT Lannister? OR "mother dragon?"~5) 

我想什麼做的是提供一個腳本或程序,它會取出關鍵字並形成等式,而不必寫出所有的括號。我認爲這將提供兩個方程之間的更容易的比較並降低錯誤率。

我首先想到的Excel工作表有一個默認的「OR」操作符:

keyword | logical operator | depth of parentheses 

但是這並沒有在每個組合的工作 - 當深度兩者之間是恆定的程序無法猜測當它,實際上,它-1 -1

我想輸入這是最容易的,因爲我可能會發送給一般用戶。你有什麼主意嗎 ?然後我可以用C++,Java甚至VBA做解釋器。

編輯 /爲了澄清,我正在尋找將允許最終用戶不寫括號和只關心自己的關鍵字和它們之間的關係的輸入格式。

回答

1

你在找什麼,是匹配一個字符串輸入對一個給定的模式。這是CS中的一個非常普遍的問題,通常被稱爲regexps的regular expressions的概念很好地解決了這個問題。

但是正則表達式並不是那麼無聊,特別是對於新手來說。即使有經驗的程序員有時也很難編寫他們想要的確切正則表達式。

有一個有用的網站來生成正則表達式here。它需要一些時間來了解它是如何工作的,但這是一個令人難以置信的節省時間。

+0

謝謝,我已經很流利的正則表達式;)看到你的三個答案,我想我的問題沒有清楚說明。我正在尋找一種輸入格式,允許用戶不要寫括號。 –

+1

我想你應該爲最終用戶提供一個圖形界面來構建它的查詢。在這種情況下,你真的不會在乎輸入格式,在任何情況下都會很複雜(你總是需要圓括號來表示複雜的布爾表達式) – Julien

1

我認爲這些圓括號不能一直用正則表達式正確完成。

正如我從大學的記憶中,我們瞭解到CompilerFormal Languages

您將需要定義您的語言和一些規則中允許的單詞,作爲一個有效的語法(例如:括號必須關閉,必須是一個單詞後跟一個邏輯運算符等),最後您將擁有執行結果。

在執行時,它需要使用這些括號來構建堆棧。把價值觀,偷看一個。

我希望它有幫助,你有幾個關鍵詞在哪裏搜索它。

+0

感謝您的回答。我明白你的觀點,儘管它只解決錯誤率問題,而不是簡單易用。 –

1

您需要的是掃描儀和解析器。

自己寫掃描儀和解析器並不難。你可以在一百行中做一個簡單的RECURSIVE DESCENT PARSERhttp://en.wikipedia.org/wiki/Recursive_descent_parser)。

但是,您也可以使用編譯器編譯器(如lex/yacc)工具從給定的語法生成解析器。

相關問題