def calculateProbability(rules, word): """ 计算某个口令的概率 @param: rules:规则集 word:口令字符串 @return:该口令在该规则集中出现的概率 """ word_rules = [w for w in rules if w[0] == 'N1'] seg_rules = [w for w in rules if w[0] != 'N1'] after_seg_word = process(word) wordlist = [after_seg_word] rules = generateRules(wordlist) new_rules = [] for rule in rules: if rule[0] == 'N1': if len([w for w in word_rules if w[2] == rule[2]]) != 0: probability = float( [w[3] for w in word_rules if w[2] == rule[2]][0]) else: probability = 0 new_rules.append((rule[0], rule[1], rule[2], '%.4f' % probability)) else: if len([w for w in seg_rules if w[0] == rule[0] and w[2] == rule[2]]) != 0: probability = float( [w[3] for w in seg_rules if w[0] == rule[0] and w[2] == rule[2]][0]) else: probability = 0 new_rules.append((rule[0], rule[1], rule[2], '%.4f' % probability)) final_probability = 1 for rule in new_rules: final_probability = final_probability * float(rule[3]) return final_probability
def calculateProbability(rules, word): """ 计算某个口令的概率 @param: rules:规则集 word:口令字符串 @return:该口令在该规则集中出现的概率 """ word_rules = [w for w in rules if w[0] == 'N1'] seg_rules = [w for w in rules if w[0] != 'N1'] after_seg_word = process(word) wordlist = [after_seg_word] rules = generateRules(wordlist) new_rules = [] for rule in rules: if rule[0] == 'N1': if len([w for w in word_rules if w[2] == rule[2]]) != 0: probability = float( [w[3] for w in word_rules if w[2] == rule[2]][0]) else: probability = 0 new_rules.append((rule[0], rule[1], rule[2], '%.4f' % probability)) else: if len([ w for w in seg_rules if w[0] == rule[0] and w[2] == rule[2] ]) != 0: probability = float([ w[3] for w in seg_rules if w[0] == rule[0] and w[2] == rule[2] ][0]) else: probability = 0 new_rules.append((rule[0], rule[1], rule[2], '%.4f' % probability)) final_probability = 1 for rule in new_rules: final_probability = final_probability * float(rule[3]) return final_probability
word_rules = [w for w in rules if w[0] == 'N1'] seg_rules = [w for w in rules if w[0] != 'N1'] probabilitiest_password_set = [] for i in xrange(0, num): choose_word_rule = chooseBestRules(word_rules) syntactic_structure = choose_word_rule[2] temp_syntactic_structure = syntactic_structure.replace(']', ']|') base_structure = temp_syntactic_structure.split("|")[:-1] probabilitiest_password = [] for w in base_structure: seg_set = [i for i in seg_rules if i[0] == w] choose_seg_rule = chooseBestRules(seg_set) probabilitiest_password.append(choose_seg_rule[2]) probabilitiest_password_set.append(''.join(probabilitiest_password)) return probabilitiest_password_set if __name__ == '__main__': word = ['iloveyou2', 'ihatedthem3', 'football3'] print '口令列表:' print word wordlist = [process(w) for w in word] rules = generateRules(wordlist) print '口令规则集:' pprint(rules) print '在规则集中最有可能的3个新口令:' print getProbabilitiestPassword(rules,3) probability = calculateProbability(rules,'youlovethem2') print ('%s 在规则集中的概率是:%f') %('youlovethem2',probability)
""" word_rules = [w for w in rules if w[0] == 'N1'] seg_rules = [w for w in rules if w[0] != 'N1'] probabilitiest_password_set = [] for i in xrange(0, num): choose_word_rule = chooseBestRules(word_rules) syntactic_structure = choose_word_rule[2] temp_syntactic_structure = syntactic_structure.replace(']', ']|') base_structure = temp_syntactic_structure.split("|")[:-1] probabilitiest_password = [] for w in base_structure: seg_set = [i for i in seg_rules if i[0] == w] choose_seg_rule = chooseBestRules(seg_set) probabilitiest_password.append(choose_seg_rule[2]) probabilitiest_password_set.append(''.join(probabilitiest_password)) return probabilitiest_password_set if __name__ == '__main__': word = ['iloveyou2', 'ihatedthem3', 'football3'] print '口令列表:' print word wordlist = [process(w) for w in word] rules = generateRules(wordlist) print '口令规则集:' pprint(rules) print '在规则集中最有可能的3个新口令:' print getProbabilitiestPassword(rules, 3) probability = calculateProbability(rules, 'youlovethem2') print('%s 在规则集中的概率是:%f') % ('youlovethem2', probability)