Created
June 23, 2016 01:22
-
-
Save void666/02efb7178c3699f16900b1899d39aafb to your computer and use it in GitHub Desktop.
this works 2!!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| __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