2011-09-04 95 views
6

想知道是否有一組用於複雜字符串操作的設計模式?字符串操作模式

基本上我試圖解決的問題是,我需要能夠在一個字符串來讀取,如下所示:

「[name_of_kicker]看起來盡力解圍踢,但在一些真正的來自[防守陣容]球員的壓力,他得到了一個[長度踢球]的踢球,但是他碰到了全身。「

「[name_of_kicker]收到來自[name_of_passer]球並啓動了炸彈。[name_of_kicker]確實取得了良好的接觸,它給一對夫婦獵[name_of_attacking_team]充裕的時間來當它下降時,就會受到控制。「

並用可能的值替換每個"tag"並檢查該字符串是否等於另一個字符串。

因此,例如,代表一名玩家的任何標籤,我需要能夠代表22個代表玩家的字符串值中的任何一個。但是我也需要能夠確保我已經循環遍歷各種標籤的玩家組合,我可以在字符串中找到它們。注意,上述2個樣本中列出的標籤並不是唯一可能的標籤,還有無數個可能出現在任何句子中的標籤。

我曾嘗試創建一個嵌套循環的負載來通過玩家等的集合,並試圖每次都替換標籤,但有很多標籤的可能性我只是在內部創建一個嵌套for循環另一個,它已變得難以管理,我也懷疑效率低下,因爲我需要循環上面的樣本超過1000個基本字符串,並用每個球員等替換差異標籤...

所以,任何字符串操作模式,我可以看看,或沒有人有任何可能的解決方案來解決這樣的問題。

回答

1

首先,回答你的問題。

想知道是否有一組複雜的字符串操作設計模式?

不是。有一些技巧,但他們幾乎沒有資格作爲設計模式。想到的兩種技術是模板擴展和模式匹配。

您目前在做什麼/建議做的是一種模板擴展的形式。但是,典型的模板引擎不支持您正在嘗試執行的組合擴展,正如您預期的那樣,這似乎是解決問題的低效方式。

更好的技術似乎是模式匹配。讓我們把你的第一個例子,並把它變成一個模式:

「(羅納爾迪尼奧|馬拉多納|彼德·希爾頓|成龍查爾頓)看起來盡力解圍踢,但在從(埃弗頓一些真正的壓力|房地產馬德里|阿德萊德聯隊)的球員,他得到一個([0-9] +米)的踢球,但是在接球的時候碰到了。「

我所做的是插入所有可能的選擇爲僞模板,把它變成一個正則表達式。我現在可以編譯這個正則表達式到java.util.Pattern,並用它來匹配你的其他字符串列表。


話雖如此,如果您嘗試這樣做「分析」文本,我不評分您的成功機率。我認爲你最好走下NLP路線。

+0

我'我會讓你知道它是怎麼回事。 –

+0

是的,我用模式匹配使用正則表達式,它會奇怪我需要它做什麼,謝謝。 –

0

我的兩分錢,正如你說「我只是創建嵌套的內另一個循環之一,它已經變得難以管理,」

您正在尋找在錯誤的方向我的朋友那裏是整個宇宙您正面臨的問題的解決方案,只需知道爲規則引擎。 有各種類型的規則引擎(業務規則引擎,網頁模板引擎等),但對於上述要求,我建議業務規則引擎。

不能哪一個評論使用,因爲它取決於

  1. 多線程。
  2. 開源/商業。
  3. 負載率/處理時間等

希望它可以幫助

http://ratakondas.blogspot.in/2012/06/business-rules-engines-white-paper.html [閱讀摘要部分它提供了最好的建議。]

https://en.wikipedia.org/wiki/Business_rules_engine#Types_of_rule_engines https://en.wikipedia.org/wiki/Comparison_of_web_template_engines

歡迎世界的規則引擎:)