initial commit
This commit is contained in:
168
rankwords.py
Normal file
168
rankwords.py
Normal file
@@ -0,0 +1,168 @@
|
||||
#! /usr/bin/python
|
||||
|
||||
import re
|
||||
|
||||
letterscore = {
|
||||
"s": 26,
|
||||
"e": 25,
|
||||
"a": 24,
|
||||
"o": 23,
|
||||
"r": 22,
|
||||
"i": 21,
|
||||
"l": 20,
|
||||
"t": 19,
|
||||
"n": 18,
|
||||
"u": 17,
|
||||
"d": 16,
|
||||
"c": 15,
|
||||
"y": 14,
|
||||
"p": 13,
|
||||
"m": 12,
|
||||
"h": 11,
|
||||
"g": 10,
|
||||
"b": 9,
|
||||
"k": 8,
|
||||
"f": 7,
|
||||
"w": 6,
|
||||
"v": 5,
|
||||
"z": 4,
|
||||
"x": 3,
|
||||
"j": 2,
|
||||
"q": 1,
|
||||
"\n": 0
|
||||
}
|
||||
|
||||
def trimWordList(toRemove, words):
|
||||
for word in toRemove:
|
||||
try:
|
||||
words.pop(word)
|
||||
except(KeyError):
|
||||
pass
|
||||
|
||||
def rankWord(word, words):
|
||||
word=word.lower()
|
||||
score=0
|
||||
for letter in word:
|
||||
score=score+letterscore[letter]
|
||||
|
||||
multiplier=countDistinct(word)
|
||||
|
||||
words[word] = score*multiplier
|
||||
return score*multiplier
|
||||
|
||||
def rankLetters(words):
|
||||
|
||||
lettercount = {
|
||||
"\n": 0
|
||||
}
|
||||
for word in words:
|
||||
for letter in word:
|
||||
if letter in lettercount.keys():
|
||||
lettercount[letter]=lettercount[letter]+1
|
||||
else:
|
||||
lettercount[letter]=1
|
||||
sort_letters = sorted(lettercount.items(), key=lambda x: x[1])
|
||||
|
||||
for key in letterscore:
|
||||
letterscore[key] = 0
|
||||
|
||||
rank=0
|
||||
|
||||
for i in sort_letters:
|
||||
letterscore[i[0]] = rank
|
||||
rank+=1
|
||||
|
||||
def matchKnown(mask, words):
|
||||
toRemove = []
|
||||
for word in words:
|
||||
if not re.search(mask, word):
|
||||
toRemove.append(word)
|
||||
trimWordList(toRemove, words)
|
||||
|
||||
def removeExcluded(mask, words):
|
||||
toRemove = []
|
||||
for word in words:
|
||||
for letter in mask:
|
||||
if re.search(letter, word):
|
||||
toRemove.append(word)
|
||||
trimWordList(toRemove, words)
|
||||
|
||||
|
||||
def matchIncluded(mask, words):
|
||||
toRemove = []
|
||||
for word in words:
|
||||
for letter in mask:
|
||||
if not re.search(letter, word):
|
||||
toRemove.append(word)
|
||||
trimWordList(toRemove, words)
|
||||
|
||||
|
||||
|
||||
def removeMask(masks, words):
|
||||
toRemove = []
|
||||
for word in words:
|
||||
index=0
|
||||
for letter in word:
|
||||
for excluded in masks[index]:
|
||||
if letter == excluded:
|
||||
toRemove.append(word)
|
||||
index+=1
|
||||
|
||||
|
||||
trimWordList(toRemove, words)
|
||||
|
||||
|
||||
|
||||
def countDistinct(str):
|
||||
s = set(str)
|
||||
return len(s)
|
||||
|
||||
def loadWords(file, words):
|
||||
with open(file) as f:
|
||||
for line in f:
|
||||
words[line.rstrip()]=0;
|
||||
|
||||
def parseMask(mask, masks):
|
||||
index=0
|
||||
for letter in mask:
|
||||
if letter != ".":
|
||||
masks[index].append(letter)
|
||||
index+=1
|
||||
else:
|
||||
index+=1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
|
||||
words = {}
|
||||
|
||||
|
||||
loadWords(sys.argv[1], words)
|
||||
|
||||
masks=[]
|
||||
maskList=[[]]
|
||||
for index in range(0,len(next(iter(words)))-1):
|
||||
new=[]
|
||||
maskList.append(new)
|
||||
|
||||
matchKnown(sys.argv[2], words)
|
||||
removeExcluded(sys.argv[4], words)
|
||||
matchIncluded(sys.argv[3], words)
|
||||
|
||||
for index in range(5, len(sys.argv)):
|
||||
masks.append(sys.argv[index])
|
||||
for mask in masks:
|
||||
parseMask(mask, maskList)
|
||||
|
||||
removeMask(maskList, words)
|
||||
|
||||
rankLetters(words)
|
||||
|
||||
for word in words:
|
||||
words[word] = rankWord(word, words)
|
||||
|
||||
|
||||
for word in words:
|
||||
print str(words[word]) + " " + word
|
||||
|
||||
Reference in New Issue
Block a user