更好的缩短英语单词的算法

时间:2017-09-24 13:46:27

标签: algorithm text nlp

我有一些从我的应用程序的各个独立组件中的字符串(例如:网站主机名)生成的唯一代码。

这些代码仅供机器使用,因此我希望尽可能缩短它们。

以下算法将应用于字符串中的每个单词。输出字将与短划线连接以生成唯一代码。

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. 建筑摘要eu => archtctrl-DGST-EU
  2. arizona foothills magazine => arzn-fthlls-的MgZn
  3. 是否有更好的方法来缩短英语单词,使其尽可能地被人类读者识别?

    输出应该是确定性的,并且只要在同一输入上运行就会产生相同的缩短版本。

    一个好的算法也应该减少类似拼写单词的冲突次数。

2 个答案:

答案 0 :(得分:2)

  

我有一些从字符串生成的唯一代码

我担心这不是真的。在剥离元音时,有许多英语单词将减少为相同的“代码字”。例如,'离开' - > '生活'鉴于,这是相当罕见的,它仍然可能导致问题。

如果您说,这些“代码字”仍然是人类可读的,那么它们只能被机器使用,这有多重要?如果它不重要,我建议您研究一些更简单的压缩算法,如Huffman CodingLZW 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库通常这样工作:

  1. 通过映射替换非ascii语言字符(例如:影師嗎 -> ying-shi-ma
  2. 通过映射替换带有ascii等效项的带重音的拉丁字母(例如:C'est déjà l'été. -> c-est-deja-l-ete
  3. 删除开头和尾随空格/标点符号
  4. 将剩余空格和标点符号转换为破折号,将一行中的多个破折号折叠为单个破折号
  5. 如果你想缩短slu ,,你可以删除元音,或者更简单地说,使用最大长度。