我想知道如何构建一个非常简单的令牌生成器。给定字典d(在此情况下为列表)和句子s,我想返回该句子的所有可能标记(=单词)。这是我尝试过的:
l = ["the","snow","ball","snowball","is","cold"]
sentence = "thesnowballisverycold"
def subs(string, ret=['']):
if len(string) == 0:
return ret
head, tail = string[0], string[1:]
ret = ret + list(map(lambda x: x+head, ret))
return subs(tail, ret)
print((list(set(subs(sentence))&set(l))))
但这返回:
["snow","ball","cold","is","snowball","the"]
我可以比较子字符串,但是必须有更好的方法来做到这一点,对吗?我想要的是:
["the","snowball","is","cold"]
您可以在此处使用正则表达式:
import re
l = ["the","snow","ball","snowball","is","cold"]
pattern = "|".join(sorted(l, key=len, reverse=True))
sentence = "thesnowballisverycold"
print( re.findall(pattern, sentence) )
# => ['the', 'snowball', 'is', 'cold']
请参阅Python演示。
模式将看起来像snowball|snow|ball|cold|the|is
,请参见regex在线演示。诀窍是要确保从最长到最短列出所有替代方案。请参见正则表达式运算符(.. | ..... .. | ..)的顺序。该sorted(l, key=len, reverse=True)
零件l
按长度降序对项目进行排序,并"|".join(...)
创建交替模式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句