gpt4 book ai didi

python - 检查字符串是否是名称的可能缩写

转载 作者:太空狗 更新时间:2023-10-29 18:20:44 26 4
gpt4 key购买 nike

我正在尝试开发一个 python 算法来检查一个字符串是否可以是另一个词的缩写。例如

  • fckfc kopenhavn 的匹配项,因为它匹配单词的第一个字符。 fhk 不匹配。
  • fco 不应与 fc kopenhavn 匹配,因为没有人会将 FC Kopenhavn 缩写为 FCO。
  • irl现实生活中的匹配项。
  • ifk 匹配 ifk goteborg
  • aikallmanna idrottskluben 匹配。
  • aidallmanna idrottsklubben 匹配。这不是真正的团队名称缩写,但我想很难排除它,除非您应用有关瑞典语缩写如何形成的领域特定知识。
  • manu 匹配 manchester united

很难描述算法的确切规则,但我希望我的例子能说明我所追求的。

更新 我在显示匹配字母大写的字符串时犯了一个错误。在实际场景中,所有的字母都是小写的,所以不像只检查哪些字母是大写那么容易。

最佳答案

这通过了所有测试,包括我创建的一些额外测试。它使用递归。以下是我使用的规则:

  • 缩写的首字母必须与首字母匹配正文
  • 缩写的其余部分(缩写减去第一个字母)必须是以下缩写:

    • 剩下的话,或者
    • 剩余的文字从第一个单词中的任何位置。

tests=(
('fck','fc kopenhavn',True),
('fco','fc kopenhavn',False),
('irl','in real life',True),
('irnl','in real life',False),
('ifk','ifk gotebork',True),
('ifko','ifk gotebork',False),
('aik','allmanna idrottskluben',True),
('aid','allmanna idrottskluben',True),
('manu','manchester united',True),
('fz','faz zoo',True),
('fzz','faz zoo',True),
('fzzz','faz zoo',False),
)

def is_abbrev(abbrev, text):
abbrev=abbrev.lower()
text=text.lower()
words=text.split()
if not abbrev:
return True
if abbrev and not text:
return False
if abbrev[0]!=text[0]:
return False
else:
return (is_abbrev(abbrev[1:],' '.join(words[1:])) or
any(is_abbrev(abbrev[1:],text[i+1:])
for i in range(len(words[0]))))

for abbrev,text,answer in tests:
result=is_abbrev(abbrev,text)
print(abbrev,text,result,answer)
assert result==answer

关于python - 检查字符串是否是名称的可能缩写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7331462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com