我是初学者,我想知道如何确定字符串是否包含在模式中重新出现的字符。
示例:" aabcdabcdabcdabcd" 这里有四个字符 - ' abcd'矿石重复。 但我不知道有多少人物在重复。
模式不确定。我不知道。 " abcd就是"一个例子。 模式可以是任何顺序 请帮忙。 我的代码是:
我实际上并不知道字符串!
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"
以上程序仅适用于给定的字符串。我希望它能够评估任何字符串。
答案 0 :(得分: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
答案 1 :(得分:0)
在自然语言处理中,这些被称为ngrams,对于大多数常见的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最常见的ngrams:
ngrams_found.most_common(5)
答案 2 :(得分:0)
我自己对Python比较陌生,我最初发现最令人兴奋的事情之一就是很容易开始处理构成字符串的字符。
要回答你的问题,我会从:
开始for letter in string:
# work through the string and check for repeated patterns