簡體   English   中英

根據相似性比較字符串?

[英]Comparing strings based on similarity?

我有一組格式正確的電話號碼:

string[] phoneNumbers = {"US +1 866 XXX XXXX",
                         "UK +44 (0)XXX XXX XXXX",
                         "Singapore +65 XXXX XXXX"
                        };

我輸入的電話號碼與列表中的這些項目之一相對應,但是其格式略有不同。 輸入可以是這3個輸入之一。請注意,不包括開頭的國家/地區名稱。

  • (866)XXX-XXXX
  • +44(0)XXX XXXXXX
  • +65 XXXXXXXX

如您所見,我的輸入格式與數組略有不同。

我的問題是,當我有格式不同的輸入時,從數組中提取數字的正確格式版本的好方法是什么?

我沒有要求別人為我做這件事,因為我可以做得很好。 出於某種原因,這種邏輯使我立即陷入困境。

我考慮過的事情是,使用並行電話號碼數組,其中包含所有格式錯誤的輸入,並獲取該數組中該項的索引,並獲取正確數組的相應輸入。 這看起來合乎邏輯嗎? 有沒有更好,更快的方法?


編輯:

目前,我正在完成此工作:

                for(int i=0; i<phoneNumbers.Count(); i++)
                {
                    var tempDialInNumber = (from t in input //input from the user
                                            where char.IsDigit(t)
                                            select t).ToArray();
                    string tDialInNumber = new string(tempDialInNumber);

                    var tempDigitPhoneNumber = (from t in phoneNumbers.GetValue(i).ToString()
                                            where char.IsDigit(t)
                                            select t).ToArray();

                    string tDigitPhoneNumber = new string(tempDigitPhoneNumber);

                    if (tDigitPhoneNumber.Contains(tDialInNumber))
                    {
                        dialInNumber = phoneNumbers.GetValue(i).ToString(); 
                    }

                }

做到這一點的規范方法是:

  1. 將您的數據轉換為規范形式。
  2. 對規范形式進行愚蠢的比較。

我會嘗試使用此http://en.wikipedia.org/wiki/Levenshtein_distance 1st。

根據錯誤率,我將通過對字符串進行預分類來優化算法(可以使用正則表達式生成字符串類),然后使用Levenshtein在類內部進行比較。

另一種方法是基於字符串模式創建Bloom過濾器 ,然后使用它與所需的字符串進行匹配。 我不確定這是否能更好地解決您的問題。

似乎如果您忽略'+'和括號以及前導1和空格,那么您將獲得國家代碼集中前2或3位數字的匹配項。 因此,您只需刪除“ +”,括號和空格以及前導“ 1” 1,然后查看前導數字與哪個前導國家/地區代碼匹配,然后檢查后綴數字的數量是否與您對該國家/地區的期望匹配(否則匹配的國家/地區)是“未知”)。 請注意,如果國家/地區代碼以“ 1”開頭,則該國家/地區的領先代碼可能有兩個匹配項。 同樣,如果數字計數與美國數字計數匹配,並且一個國家/地區不匹配,則它是美國數字。 然后,一旦您知道國家/地區,就可以將電話號碼的數字放入該國家/地區的標准模板中,然后根據需要將國家/地區的名稱放在前面。

暫無
暫無

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

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