在Python中查找字符串中是否有字符组重复
我还是个初学者,想知道怎么判断一个字符串里有没有重复的字符模式。
比如说:“aabcdabcdabcdabcd”,这里面有四个字符 - 'abcd' 是在重复的。
但是我不知道到底有多少个字符在重复。
而且这个模式并不确定,我也不知道是什么。“aabcdabcdabcdabcd”只是一个例子。
这个模式可以是任何顺序的。请帮帮我。
我的代码是:
其实我根本不知道这个字符串是什么!
s1=str("aabcdabcdabcd")
x=0
z=""
for i in range (1,len(s1)):
z=s1[i:i+5]
s1.replace(z,"",1)
if z in s1:
x+=1
if x!=0:
print "yes":
else:
print "no"
上面的程序只适用于给定的字符串。我希望它能评估任何字符串。
3 个回答
0
在自然语言处理(NLP)中,这些被称为n-grams。对于大多数常见的NLP任务,nltk这个库非常好用:
from nltk.util import ngrams
from collections import Counter
s = 'aabcdabcdabcdabcd'
max_ngram = 5
minimum_count = 2
ngrams_found = Counter()
for x in range(max_ngram-1):
ngrams_found += Counter(["".join(ngram) for ngram in ngrams(s, x+minimum_count)])
for key, val in ngrams_found.items():
if val < minimum_count:
del ngrams_found[key]
else:
print(key, val)
Counter对象还可以让你打印出最常见的x个n-grams:
ngrams_found.most_common(5)
0
我自己也是Python的新手,最让我兴奋的事情之一就是它很容易就能开始处理字符串中的字符。
要解决你的问题,我会从这里开始:
for letter in string:
# work through the string and check for repeated patterns
1
这个代码会找到所有重复的字母,然后你可以筛选出你想要的那些。
cstr = 'aabcdabcdabcdabcd'
dd = {}
for ii, ch in enumerate(cstr):
# find all sequences of 3-6 characters long
for jj in range(3,7):
wrd = cstr[ii:ii+jj]
if not len(wrd) == jj:
break
dd.setdefault(wrd, 0)
dd[wrd] += 1
# find any "word" that occurs more than once
for k, v in dd.iteritems():
if v > 2:
print k, v