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