Algorithm 一种更好的英文单词缩略算法

Algorithm 一种更好的英文单词缩略算法,algorithm,text,nlp,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 fro

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

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

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

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
  • 建筑文摘eu=>archtctrl dgst eu
  • 亚利桑那山麓杂志=>arzn FTHLS mgzn
  • 有没有更好的方法来缩短英语单词,使其尽可能让人类读者识别

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

    一个好的算法还应该尽量减少拼写相似单词的冲突次数

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

    恐怕那不是真的。许多英语单词在去掉元音后会变成同一个“暗号”。例如,“离开”->“生活”,这是相当罕见的,它仍然可能导致问题

    如果如你所说,这些“代码词”只供机器使用,那么它们保持人类可读性有多重要?如果没有那么重要,我建议研究一些更简单的压缩算法,比如or。然后,如果用户需要查看代码的翻译,只需解压缩即可

    如果你必须让它具有可读性,我不确定你还能做更多的事情来缩短它。你可以看一看具体的拉丁语+希腊语词根,然后确定是否可以手工缩短这些词根,然后自动替换掉它们

    或者,你可以转向语音方法。自动搜索单词的发音,然后查看它是否更短(或者它本身可以被压缩,将“cee”改为“C”,或将“kay”改为“K”)。这将需要更多的时间和CPU密集型,但如果您确实需要简短但可读的代码,这仍然是一个选项

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

    恐怕那不是真的。许多英语单词在去掉元音后会变成同一个“暗号”。例如,“离开”->“生活”,这是相当罕见的,它仍然可能导致问题

    如果如你所说,这些“代码词”只供机器使用,那么它们保持人类可读性有多重要?如果没有那么重要,我建议研究一些更简单的压缩算法,比如or。然后,如果用户需要查看代码的翻译,只需解压缩即可

    如果你必须让它具有可读性,我不确定你还能做更多的事情来缩短它。你可以看一看具体的拉丁语+希腊语词根,然后确定是否可以手工缩短这些词根,然后自动替换掉它们


    或者,你可以转向语音方法。自动搜索单词的发音,然后查看它是否更短(或者它本身可以被压缩,将“cee”改为“C”,或将“kay”改为“K”)。这将需要更多的时间和CPU密集型,但如果您真的需要简短但可读的代码,这仍然是一个选项。

    您生成的代码听起来像是一个。有许多库可以为博客或站点生成器处理此问题,这些库应该适合您的目的。下面是一个Python库的使用示例,名为:

    Slug库通常是这样工作的:

  • 通过映射替换非ascii语言字符(例如:
    影師嗎 -> 英石马
  • 通过映射将重音拉丁字母替换为ascii等效字母(例如:
    C'est déjálété。->C-est-deja-l-ete
  • 删除开头和结尾的空格/标点符号
  • 将剩余的空格和标点转换为破折号,将一行中的多个破折号折叠为一个破折号

  • 如果你想让鼻涕虫变短,你可以去掉元音,或者更简单地说,使用一个最大长度。

    你所产生的声音就像所谓的a。有许多库可以为博客或站点生成器处理此问题,这些库应该适合您的目的。下面是一个Python库的使用示例,名为:

    Slug库通常是这样工作的:

  • 通过映射替换非ascii语言字符(例如:
    影師嗎 -> 英石马
  • 通过映射将重音拉丁字母替换为ascii等效字母(例如:
    C'est déjálété。->C-est-deja-l-ete
  • 删除开头和结尾的空格/标点符号
  • 将剩余的空格和标点转换为破折号,将一行中的多个破折号折叠为一个破折号

  • 如果你想让鼻音变短,你可以去掉元音,或者更简单地说,使用最大长度。

    谢谢你的回复。压缩是一个很好的选择,但不可读,而且我永远不需要反转代码。我同意语音学方法很重。需要找到一个中间立场。:)同样值得注意的是,当出现多个单词时,冲突的几率会降低。谢谢你的回复。压缩是一个很好的选择,但不可读,而且我永远不需要反转代码。我同意语音学方法很重。需要找到一个中间立场。:)同样值得注意的是,当出现多个单词时,发生冲突的可能性会降低。
    txt = "___This is a test ---"
    r = slugify(txt)
    self.assertEqual(r, "this-is-a-test")