2016-06-21 77 views
2

首先,我沒有找到實際的模糊匹配算法。我們使用Dice係數和Levenshtein距離。我正在尋找最聰明的方式來利用這些算法。段落中模糊匹配多詞短語的算法

目標:

我試圖發現城市的名字在一段文字中,它們發生的順序。我們有一個約100萬個位置名稱的列表。我想搜索一段文字,並檢測其中一個位置是否存在,然後存儲該城市。地點名稱可以是單個或多個單詞。

例段落:

媽媽你好!山姆和我正在考慮下個月在加拿大 絆倒。我們知道我們已經可以住在約翰的房子裏魁北克省 城市。我知道你已經在加拿大旅行了很多,所以我想得到你的建議 。

就像我說的,我們會在魁北克市啓動,那麼很可能前往哈利法克斯前開車到 米拉米奇。 2天后我們想去 布雷頓角。最後,我們想看看倡導港看到像灣芬迪的,迪格 的事情,聖伊麗莎白的碼頭

你說話很快!

預期結果

  • 加拿大
  • 魁北克市
  • 加拿大
  • 米羅米奇
  • 哈利法克斯
  • 布雷頓角
  • 提倡港
  • 芬迪
  • 迪格
  • 聖伊麗莎白碼頭

的問題

我目前的路障灣是如何檢測與多個單詞的位置名稱。我知道我可以分割段成詞,然後比較他們對我的列表,如:第一個字對我的位置名單

  1. 模糊匹配
  2. 如果不匹配,模糊匹配(第一個字+第二字)對我的位置名單
  3. 如果不匹配,模糊匹配(第一+第二+三字)對我的地點名稱
  4. 的列表...等

這是我目前的做法,但它非常慢,而且效率低下。有沒有一種聰明的方式可以完成我正在尋找的東西?

+1

段落可以像一串字符串對待,並使用某種字符串匹配算法嗎?如https://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_algorithm匹配多個模式(在你的情況下的位置) – shole

+0

是的,這正是我所期待的。它不做模糊匹配,但完美運作。提交這個答案,我會標記爲正確的。 – CHawk

+0

謝謝。很高興知道它有幫助:) – shole

回答

1

我認爲一些字符串匹配算法可以工作得很好了你,

這裏是他們的列表:String Matching Algorithms

在你的情況,我認爲你需要多模式字符串匹配的一個,如Aho–Corasick algorithm

+1

這很好用!作爲其他人的參考,我最終使用了這個gem的Aho-Corasick實現:https://github.com/ahnick/ahocorasick – CHawk