在python中识别重复的单词并以列表形式获取两个单词之间的距离

在python中识别重复的单词并以列表形式获取两个单词之间的距离,python,Python,字符串A是一个列出我建议的随机字符的字符串。有些是重复的字符串。长字符串中的重复字符串分别是字符串A中的“PPL”和“JSS”。16是字母“PPL”之间的距离,10是“JSS”之间的距离。最后,目标是自动确定重复的单词,并用python将这些单词之间的距离表示为列表 A = "AEJXKWKJSSSJKZJLJLEJSSLKXMPPLSSKKDNEMSMLDMMEPPLETFMM" print Repeat_Letter : [PPL:16, JSS:10] -->

字符串A是一个列出我建议的随机字符的字符串。有些是重复的字符串。长字符串中的重复字符串分别是字符串A中的“PPL”和“JSS”。16是字母“PPL”之间的距离,10是“JSS”之间的距离。最后,目标是自动确定重复的单词,并用python将这些单词之间的距离表示为列表

A = "AEJXKWKJSSSJKZJLJLEJSSLKXMPPLSSKKDNEMSMLDMMEPPLETFMM"
print Repeat_Letter : [PPL:16, JSS:10]   --> What I want 
通过这个,我检查了哪个单词是重复的。然而,我想知道如何得到这些被歧视的单词之间的距离。例如,我们不知道如何计算“PPL”和其他“PPL”之间的距离。

刚刚写了这篇文章

为了解决你的问题,你必须指出你要寻找的单词的长度,我认为这是一个参数

trigrams = [A[i:i+3] for i in range(len(A)-2)]
counts = collections.Counter(trigrams)
repeated = [trigram for trigram, count in counts.items() if count > 1]

可以使用正则表达式,如中所述:

从问题中复制的代码:

import collections, re
使用正则表达式查找距离:

A = "AEJXKWKJSSSJKZJLJLEJSSLKXMPPLSSKKDNEMSMLDMMEPPLETFMM"                                                                                                                                                                            

trigrams = [A[i:i+3] for i in range(len(A)-2)]
counts = collections.Counter(trigrams)
repeated = [trigram for trigram, count in counts.items() if count > 1]
输出:

dists = {}
for r in repeated:
    matches = [m for m in re.finditer(r, A)]
    dists[r] = matches[1].start() - (matches[0].end()-1)                                                                                                                                                                                

print(dists)

当然,这只会找到前两个匹配之间的距离。您没有指定是否应计算进一步的出现次数。

这使用查找和字符串切片方法

{'JSS': 10, 'PPL': 16}

“16”和“10”在示例输出中的作用是什么?展示您在解决问题时的尝试this@thethiny如果我们很好地要求对评论进行改进,我们可以更好地避免推迟新的SO贡献者。@user1717828感谢您的评论。我编辑了我的问题。16是字母“PPL”之间的距离,10是“JSS”之间的距离。这里一个词的定义是什么?np的作用是什么。其中(三个词==唯一)[0]?似乎“np.where(three_words==unique)”打印数组[x]和数据类型。因此,添加[0]意味着数组[x],但我不明白这意味着什么。是的,并且您希望从np的元组输出中获取数组[x]。在这里发生错误。“名称错误:名称‘dict_单词’未定义”你是什么意思?我添加了dict_单词的空首字母。请再试一次
{'JSS': 10, 'PPL': 16}
def find_distance_in_dups(string,length):
  dict_words={}
  for i in range(len(string)-length-1):
    word = string[i:length+i]
    distance=string[string.find(word)+length:].find(word)+1
    #print(distance)
    if distance > 0:
      dict_words[word]=distance
  #print(dict_words)
  return dict_words
print(find_distance_in_dups("AEJXKWKJSSSJKZJLJLEJSSLKXMPPLSSKKDNEMSMLDMMEPPLETFMM",3))