我有一些从我的应用程序的各个独立组件中的字符串(例如:网站主机名)生成的唯一代码。
这些代码仅供机器使用,因此我希望尽可能缩短它们。
以下算法将应用于字符串中的每个单词。输出字将与短划线连接以生成唯一代码。
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
是否有更好的方法来缩短英语单词,使其尽可能地被人类读者识别?
输出应该是确定性的,并且只要在同一输入上运行就会产生相同的缩短版本。
一个好的算法也应该减少类似拼写单词的冲突次数。
答案 0 :(得分:2)
我有一些从字符串生成的唯一代码
我担心这不是真的。在剥离元音时,有许多英语单词将减少为相同的“代码字”。例如,'离开' - > '生活'鉴于,这是相当罕见的,它仍然可能导致问题。
如果您说,这些“代码字”仍然是人类可读的,那么它们只能被机器使用,这有多重要?如果它不重要,我建议您研究一些更简单的压缩算法,如Huffman Coding或LZW Compression。然后,如果用户需要查看代码字的翻译,只需解压缩即可。
如果你必须保持人类可读性,我不确定你能做些什么来缩短它。您可以查看特定的拉丁语+希腊词根,并确定是否可以手动缩短它们,然后自动替换它们。
或者,您可以转向语音方法。自动搜索单词的发音,然后查看它是否更短(或者自身可以被压缩,将'cee'变为'C',或'kay'变为'K')。这将是更多的时间和CPU密集型,但如果你真的需要简短但可读的代码,它仍然是一个选项。
答案 1 :(得分:1)
您所生成的内容听起来像是"slug"。有许多库可以处理适用于您的目的的博客或站点生成器。以下是名为slugify的Python库中的一个用法示例:
txt = "___This is a test ---"
r = slugify(txt)
self.assertEqual(r, "this-is-a-test")
Slug库通常这样工作:
影師嗎 -> ying-shi-ma
)C'est déjà l'été. -> c-est-deja-l-ete
)如果你想缩短slu ,,你可以删除元音,或者更简单地说,使用最大长度。