2017-09-24 74 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. 转换剩余的空格和标点符号,以破折号,倒塌多个短线在连续一个破折号

如果你想蛞蝓短,你可以删除元音或更简单地说,使用的最大长度。