Bjö*_*ist 11 python text-analysis abbreviation string-matching slug
我正在尝试开发一个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.很难描述算法的确切规则,但我希望我的例子能说明我所追求的内容.
更新我在显示匹配字母大写的字符串时犯了一个错误.在实际场景中,所有字母都是小写的,因此它不像检查哪些字母是大写的那么容易.
unu*_*tbu 12
这通过了所有测试,包括我创建的一些额外测试.它使用递归.以下是我使用的规则:
其余缩写(缩写减去第一个字母)必须是以下缩写:
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
Run Code Online (Sandbox Code Playgroud)