2017-09-24 71 views
0

我有一些獨特的代碼,從我的應用程序的各個獨立組件中的字符串(例如:網站主機名)生成。更好的算法縮短英文單詞

這些代碼僅供機器使用,因此我希望儘可能縮短它們。

以下算法將應用於字符串中的每個單詞。輸出字將與短劃線連接以生成唯一代碼。

The current algorithm I have used: 

- Skip word if length is less than 6 

- Leave first character as is 

- Remove every wowel in the word from the second character onwards 
  1. 建築消化歐盟=> archtctrl-DGST歐盟
  2. 亞利桑那山麓雜誌=> arzn-fthlls,鎂鋅

有沒有更好的辦法來縮短英語單詞離開它儘可能識別人類讀者?

輸出應該是確定性的,並且只要它在同一輸入上運行,就會生成相同的縮短版本。

一個好的算法也應該儘量減少類似拼寫單詞的衝突次數。

回答

1

我恐怕是不正確的,從字符串

產生一些獨特的代碼。有許多英語單詞在剝離元音時會縮減爲相同的「代碼詞」。例如,'離開' - >'生活'鑑於,這是相當罕見的,它仍然可能導致問題。

這些'代碼字'如果像你說的那樣只能被機器使用,它們仍然是人類可讀的,這有多重要?如果它不那麼重要,我會建議尋找一些更簡單的壓縮算法,如Huffman CodingLZW Compression。然後,如果用戶需要查看代碼字的翻譯,只需解壓縮即可。

如果你必須保持它的可讀性,我不確定你能做些什麼來縮短它。你可以看看特定的拉丁文+希臘文根,然後確定是否可以手動縮短這些,然後自動替換掉。

或者,您可以轉而使用拼音方法。自動搜索單詞的發音,然後查看它是否更短(或者本身可以壓縮,從'cee'到'C'或'kay'到'K')。這將花費更多的時間和CPU時間,但如果你確實需要簡短但可讀的代碼,它仍然是一種選擇。

+0

感謝您的回覆。壓縮是一個不錯的選擇,但不可讀,也不需要反轉代碼。同意語音方法非常重要。需要找到一箇中間立場。 :)同樣值得注意的是,當多個單詞出現時,衝突的可能性會降低。 – Rohit

1

你生成的聲音聽起來像是所謂的"slug"。有許多圖書館可以處理這個適合您的目的的博客或網站生成器。下面是一個使用例子從一個Python庫叫slugify

txt = "___This is a test ---" 
r = slugify(txt) 
self.assertEqual(r, "this-is-a-test") 

彈頭庫,一般像這樣工作:

  1. 通過映射取代非ASCII語言字符(例如:影師嗎 -> ying-shi-ma
  2. 取代的重音(例如:C'est déjà l'été. -> c-est-deja-l-ete
  3. 刪除開始和結尾空格/標點符號
  4. 轉換剩餘的空格和標點符號,以破折號,倒塌多個短線在連續一個破折號

如果你想蛞蝓短,你可以刪除元音或更簡單地說,使用的最大長度。