【发布时间】:2017-12-08 12:25:18
【问题描述】:
假设我有一个一定长度的字符向量,
vec <- c("man lives to work", "man works to live")
从头开始,我现在想在这个向量中找到最短的唯一子字符串(完整的单词)。
换句话说,我不是在寻找整体上最短的子字符串,但我希望 crop 在它变得唯一的单词之后的字符串,在这种情况下,在 work 和 lives 之后,分别。
所以结果应该是,在这种情况下:
[1] "man lives" "man works"
字符串应该在 lives/works 之后被裁剪,因为这是它们变得唯一的最早点(在这种情况下)。
包括to 将是多余的,因为它们已经是唯一的。
仅包括 man 是不够的,因为 c("man", "man") 不是唯一的。
(我想用它来自动生成有效的 R 名称,其余的由base::make.names() 完成)。
我该怎么做?
我想,必须有一个已经这样做的包,但找不到它。
【问题讨论】:
-
您能否再次澄清一下最短唯一子字符串的含义。在您的情况下,例如,就字符数而言,字符串“to”或“to work”将比“man living”短。因此,不太清楚你想要什么。
-
感谢您的澄清。但是,您是否要切断仍然不是很清楚。您提到了有关“完整单词”的内容。 “to”也是一个完整的词。我猜您想在出现“to”、“and”等特定停用词时立即停止。或者你只是想在第二个学期结束后切断?想象像“投票权”或只有“投票权”这样的短语。这里期望的输出是什么。抱歉这么挑剔,但这些选择可能会产生重要影响。
-
了解@ManuelBickel。我没有特别的停用词。我想在
lives/words之后停止,因为包括这些词,这两个字符串变得唯一。将更新问题。 -
再次更新问题以解释截止@ManuelBickel。
-
对于
c("the right to vote", "right to vote"),所需的输出确实是c("the", "right")——尽管我可以看出这是多么粗略。如果有其他已建立/更好的方法以人类可读的方式缩写(可能很长)字符串,那也很好,但我猜这里超出了范围。