检查字符串是否是名称的缩写
-
27-10-2019 - |
题
我正在尝试开发python算法,以检查字符串是否可以用作另一个单词的缩写。例如
-
fck
与fc kopenhavn
匹配,因为它与单词的第一个字符匹配。fhk
不匹配。 -
fco
不应与fc kopenhavn
匹配,因为没有人会缩写FC Kopenhavn为FCO。 -
irl
是in real life
的匹配项。 -
ifk
是ifk goteborg
的匹配项。 -
aik
是allmanna idrottskluben
的匹配项。 -
aid
是allmanna idrottsklubben
的匹配项。这不是真正的团队名称缩写,但是除非您应用有关瑞典缩写形式的特定领域知识,否则我想很难排除它。 -
manu
是对manchester united
的匹配。很难描述算法的确切规则,但我希望我的示例能够说明我的追求。
更新我在显示匹配字母为大写的字符串时出错。在实际情况下,所有字母都是小写字母,所以这并不像检查哪个字母是大写字母那样容易。
解决方案
这将通过所有测试,包括我创建的一些额外测试。它使用递归。这是我使用的规则:
- 缩写的首字母必须与的首字母匹配 文字
-
其余的缩写(缩写减去首字母)必须是以下缩写:
- 剩余的单词,或
- 其余文字从
第一个单词的任何位置。
通用标签
其他提示
这是完成您似乎想做的事情的一种方法 通用标签
插入符号确保缩写的第一个字符与单词的第一个字符匹配,大多数缩写都应为真。
修改:
您的新更新稍微改变了规则。通过使用"(|.*\s)"
而不是".*"
,缩写中的字符只有在彼此相邻或下一个字符出现在新单词的开头时才匹配。
这将正确地将fck
与FC Kopenhavn
匹配,但fco
不会。
但是,将aik
与allmanna idrottskluben
进行匹配将无效,因为这需要了解瑞典语,而且操作也不容易。
这是经过小的修改的新代码 通用标签
@Ocaso Protal
在评论中说how should you decide that aik is valid, but aid is not valid?
,他是对的。
我想到的算法是使用word threshold
(用空格分隔的单词数)来工作。
通用标签
您必须定义自己的逻辑,不能盲目地找到缩写。
您的算法似乎很简单-缩写是所有大写字母的串联。 所以: 通用标签
这可能就足够了。 通用标签
不隶属于 StackOverflow