Skip to content

Instantly share code, notes, and snippets.

@void666
Created June 23, 2016 01:22
Show Gist options
  • Select an option

  • Save void666/02efb7178c3699f16900b1899d39aafb to your computer and use it in GitHub Desktop.

Select an option

Save void666/02efb7178c3699f16900b1899d39aafb to your computer and use it in GitHub Desktop.
this works 2!!
__author__ = 'Sushim'
from collections import Set as set
from collections import OrderedDict
global_word_list = {}
global_list_of_pages = {}
global_list_of_queries = []
class factory:
"""
factory class for pages and queries.
with getters and setters and constructor
"""
def __init__(self):
self.name = ""
self.word_list = {}
self.count = 9999
self.sum = 0
def getName(self):
return self.name
def getWordList(self):
return self.word_list
def setName(self, name):
self.name = name
def addToList(self, words):
"""
assigns weight from a fixed counter to the words
:param words:
"""
for word in words:
self.word_list[word] = self.count - len(self.word_list)
def add_to_global(words, pageName):
"""
function to fill the global_word_list with words as keys and list of page name, where they have occurred.
:param words: list of words
:param pageName: current page name being processed.
"""
for word in words:
if word in global_word_list:
global_word_list[word].append(pageName)
else:
global_word_list[word] = [pageName]
def createPage(value,i,type):
"""
create page object and add it global list of pages
:param value: string from input
:param i: index for creating name of the page
"""
page = factory()
words = value.split()
page.addToList(words)
if type is 'p':
page.setName("P" + str(i + 1))
add_to_global(words, page.getName())
global_list_of_pages[page.getName()] = page
else:
page.setName("Q" + str(i + 1))
global_list_of_queries.append(page)
def createQuery(value,i):
"""
:param value:
:param i:
"""
query = factory()
query.setName("Q" + str(i+1))
words = value.split()
query.addToList(words)
global_list_of_queries.append(query)
def searchMain():
for query in global_list_of_queries:
visited =[]
d ={}
for word in query.getWordList():
if word in global_word_list:
for page in global_word_list[word]:
if page not in visited:
visited.append(page)
sop = sumOfProducts(query,global_list_of_pages[page])
d[page] = sop
d = OrderedDict(sorted(d.items(), key=lambda t: t[1],reverse=True))
print(d,query.getName())
def sumOfProducts(query,page):
sop = 0
for qword in query.getWordList():
if qword in page.getWordList():
sop = sop + query.getWordList()[qword] * page.getWordList()[qword]
return sop
if __name__ == '__main__':
inputs = int(input("Enter number of pages and queries"))
queries = 0
for index in range(inputs):
value = input()
if value[0] is 'P':
createPage(value[1:],index,'p')
if value[0] is 'Q':
createPage(value[1:],queries,'q')
queries += 1
searchMain()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment