2017-02-19 65 views
4

我正在找一種方法來模糊substring函數。這是什麼意思:模糊.substring文本匹配功能

  • 給出了兩個字符串。
  • 一個通常比另一個長。讓我們打電話然後「短」和「長」
  • 我們想要評分「長」中出現多少「短」。
  • 我們想要考慮接近度和oder。如果「短」的元素出現在「長」中,他們傾向於以相同順序出現並且彼此接近。

實施例1:

  • 簡稱:「雜草毀」
  • 長:與細菌基因使得對除草劑而雜草被破壞可以增長抗性的植物工程化「作物,並基因工程農作物可以抵抗破壞性昆蟲,從而減少對化學殺蟲劑的需求。「

這是一個完全匹配,應該有1.0分。

實施例2:

  • 簡稱: 「雜草會被破壞」
  • 長:同上。

這是一個模糊匹配,因爲「weed」和「destroyed」出現在文本中,但沒有「will be」。它仍然應該得到高分(比如說0.8)。

例3:

如果我們設置的「短」,以「破壞將是雜草」,但「破壞」和「野草」都出現在原文中,比分應該是非常低的,因爲他們的訂單已經改變。

對此有何建議的實現?

最後一點是,沒有獨特的方式來做這個評分。但是我正在尋找AN算法。該算法的參數可以根據需要和要求進行調整。

+0

停止詞可能會照顧確定者和文章。 N-gram可以闡明語法。我的意思。 – arjun

+0

A)這不是一個Scala問題B)它肯定會要求一個「非現場資源」,所以是關閉主題。 C)如果不是這樣,它太寬了! D)右側的很多「相關」問題似乎涵蓋了相同的理由。 –

回答

2

這裏的一個可能的方法:

  1. 用於第一字短(0),存儲所述第一的indexOf在長
  2. 對於每個後續字短(n)時,同時存儲的:a)所述第一indexOf in long,以及b)(首選)第一個indexOf short(n),它不晚於首選indexOf short(n-1)。
  3. 得分相應
+0

很好的答案。重複(「長」段中的「短」術語)可能使這種方法複雜化。 – Daniel

2

我會一分爲依賴關係樹兩個字符串(像this)。然後,從根目錄遞歸遍歷較小的樹並檢查令牌是否存在於較大的樹中。如果是,則添加分數similarity_of_dependency_kind。可選地,可以乘以similarity_of_destination_words(根據同義性,類似wordnet)。

這種方法效率較低,但更準確。

此外,不要忘記初步數據清理,如錯別字更正。