簡體   English   中英

模糊匹配並從字符串中獲取模式的索引

[英]Fuzzy match and get index of a pattern from a string

我有一個公司名稱列表,我想將其與句子列表進行匹配,如果任何句子中存在關鍵字,則獲取索引開始和結束 position。

我編寫了用於精確匹配關鍵字的代碼,但意識到句子中的名稱並不總是完全匹配。 例如,我的關鍵字列表可以包含Company One Two Ltd但句子可以是 -

  • Company OneTwo Ltd won the auction
  • Company One Two Limited won the auction
  • The auction was won by Co. One Two Ltd

給定一個公司名稱,我想找出索引開始和結束 position 即使句子中的公司名稱不是完全匹配而是變體。 下面是我為精確匹配編寫的代碼。

def find_index(texts, target):
    idxs = []
    for i, each_sent in enumerate(texts):
        add = [(m.start(0), m.end(0)) for m in re.finditer(target, each_sent)]
        if len(add):
            idxs.append([(i, m.start(0), m.end(0)) for m in re.finditer(target, each_sent)])
    return idxs

我可以想到 2-3 種可能性各有不同的優點/缺點:

  1. 創建更通用的正則表達式

(Company|Co\.?)\s?One\s?Two\s?(Limited|Ltd)

  1. 基於之前的建議,遍歷公司列表並創建模糊搜索

Company->(Company|Co\.?) , ' '->\s? , imited->(Limited|Ltd)

  1. 編輯距離計算器

    例子

其中引用外部庫fuzzywuzzy ,有替代品fuzzy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM