如何独特地缩短字符串列表,以使它们最多只有x个字符长度(关于IT技术)

7
我正在寻找一个算法,可以接收一个字符串向量v1并返回一个类似的字符串向量v2,其中每个字符串都小于x个字符,并且是唯一的。 v1中的字符串可能不是唯一的。
虽然我需要接受v1中的ASCII字符,但在需要插入新字符时,我更喜欢只插入字母数字字符([A-Za-z0-9])。
显然这里有三个注意点:
  1. 对于某些v1x的值,可能不存在唯一的v2。例如,当v1有37个元素且x == 1时。

  2. 如问题所述,“相似”是主观的。这些字符串将面向用户,很可能是短的自然语言短语(例如:“颜色数量”)。我希望人们能够尽可能轻松地将原始字符串映射到缩短的字符串。这可能意味着利用启发式方法,例如disemvoweling。因为我的相似性构建可能没有客观的度量方式(字符串距离可能不是最有用的,尽管它可能是),所以我对好坏的判断是随意的。该方法应适用于英语-其他语言无关紧要。

显然,这是一个(编程)语言无关的问题,但如果使用Python实现(因为我认为它的字符串处理语言很简单),我会持积极态度。


1
当需要插入新字符时,“我更喜欢只插入字母数字字符([A-Za-z0-9])”这句话是什么意思? - jamylak
5
这听起来像是一个有趣的问题,但我很难看出你具体在问什么。你能否提供一个非常简单的输入和期望的输出示例呢? - Nolen Royalty
另外,我们谈论的“缩短”程度是多少?颜色数量 -> 颜色数,还是颜色数量 -> n o c? - Nolen Royalty
3个回答

2

草图 -

编写一系列函数来缩小英文字符串的大小。将这些函数按照最不模糊到最模糊的顺序进行排序。

对于v1中的每个字符串,重复应用一个模糊函数,直到无法再次缩小该字符串的大小,然后继续下一个函数。

当达到所需的大小x时,请验证减小的字符串相对于已经存在于v2中的字符串是唯一的。如果是,则将其添加到v2中,如果不是,则继续应用模糊函数。

以下是一些尺寸缩小函数的想法,根据主观顺序从最不模糊到最模糊进行排序。(随机选择旨在增加减小的字符串唯一性的概率。)

  1. 将两个空格字符的随机出现替换为单个空格
  2. 将标点符号后面的空格的随机出现替换为单个空格
  3. 随机删除一个单词,该单词也是杀死列表的成员(例如“I”,“a”)
  4. 随机删除一个两个字符的单词,该单词也是杀死列表的成员(例如“an”,“of”)
  5. 随机删除一个三个字符的单词,该单词也是杀死列表的成员(例如“the”,“and”)
  6. 用由第一个和最后一个字符组成的单词替换五个或更多字符的单词(例如“number”变为“numr”,“colours”变为“colrs”)
  7. 随机删除一个元音字母
  8. 删除在v1中大量字符串中出现的单词。其想法是非常常见的单词价值较低。
  9. 根据字典(同义词词典)将单词/短语翻译为更短的“虚荣车牌”单词(例如http://www.baac.net/michael/plates/index.html
(注:最后两个函数需要访问初始未更改的字符串以及未更改和更改后单词之间的对应关系。)

1

关于用Python进行此操作的一些建议/指南。

  1. 使用bisect模块将结果数组保持有序,以便轻松确定潜在的非唯一项。即使v1已经排序(例如,在去除元音字母后,nameenemy也会产生冲突),这也很有帮助。
  2. 通过对字符串调用.translate(None, "aeiouyAEIOUY")可以实现去除元音字母。
  3. 如果出现重复项,可以尝试先通过将所有结果转换为小写并使用swapcase作为“位掩码”来解决冲突,例如多个aaa变为["aaa", "aaA", "aAa", "aAA"]等,如果这还不够,则从末尾开始“递增”字符,直到找到一个不冲突的标识符为止,例如["aa"]*7会变成["aa", "aA", "Aa", "AA", "ab", "aB", "Ab"]

-1
def split_len(seq, length):
    return [seq[i:i+length] for i in range(0, len(seq), length)]
newListOfString=[]
for item in listOfStrings:
    newListOfString.append(split_len(item,8)[0])

这将返回前8个字符。


2
我相信原帖的作者已经自己解决了这个问题。另外,[_[:8] for _ in listOfStrings]也可以达到同样的效果。 - Kimvais

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接