diff --git a/Linux_sqlite_version/Parser.py b/Linux_sqlite_version/Parser.py new file mode 100644 index 0000000..4080796 --- /dev/null +++ b/Linux_sqlite_version/Parser.py @@ -0,0 +1,65 @@ +#using tag for fields in pdf for which information is to be extracted and value for information +from lxml import html +import requests +import os +from urllib import url2pathname +import need +import universal +import convert +import logwriter +import extractor +def reopen(filename): #open the html file for parasing + requests_session = need.requests.session() + requests_session.mount('file://', need.LocalFileAdapter()) + url = "file:///"+os.getcwd().replace(" ","%20").replace("\\","/") + page = requests_session.get(url+"/"+universal.tag_folder+"/"+filename) #file name + universal.tree = html.fromstring(page.content) +#def extractor(index,tag) : +# data from html file--> abcdaaa +# tag ---------> axabcydaa +#Approach A1 +#now what we know is that the tag is complete and a subsequence of tag will be the data from html file ....but if we use s.get_matching_blocks() it returns the longest common subsequence which will be wrong consider +#Approach A2 +# data from html file--> international_total_publication +# tag ---------> international publication +#this will match while they are two different tags so...we cant use this approach +#my approach:- +#remove all the whitespaces from the universal.datastring and then we will use the approach A1 to extract tags from universal.datastring +def begin(): #return 1 if string is not present + universal.datastring="" + reopen(universal.filename+universal.filename+".html") #html-tag filename converted from pdf + #page = requests_session.get('file:///home/killerbee/Desktop/test2/'+filename) #file name + #universal.tree = html.fromstring(page.content) + s = universal.tree.itertext() +# universal.test=["(21) Application No","Date of filing of Application","Publication Date","Title of the invention","International classification","Priority Document","Priority Date","Name of priority country","International Application","Fil","International Publication","Patent of Addition to Application","Fil","Divisional to Application","Fil","Name of Applicant","(72)Name of Inventor","Abstract"] + for a in s: + universal.datastring += a + try: + return(extractor.getdetails(universal.datastring)) + except Exception as e: + logwriter.logwrite("Extracter: "+str(e)+" on page "+str(int(universal.filename)+1)) + universal.logflag = 1 + return -1 + return 0 +# write code for case when tayal returns -1 and you have to run your extraction function +# implement ur extraction function and then call it + + + + + + + + + + #extractor.getdetails(universal.datastring) +# for tag in universal.test: +# tempi=i +# # i=extractor(i,tag) +# if i==-1: +# if(extractor.mycheck(universal.datastring)==0): +# fappend=open("log.txt",'a') +# fappend.write("-->"+str(universal.filename)+"->"+tag+"--->"+universal.datastring[tempi:tempi+len(tag)]+'\n') +# fappend.close() +# return -1 +# i+=1 diff --git a/Linux_sqlite_version/Parser.pyc b/Linux_sqlite_version/Parser.pyc new file mode 100644 index 0000000..def38d3 Binary files /dev/null and b/Linux_sqlite_version/Parser.pyc differ diff --git a/Linux_sqlite_version/browser.py b/Linux_sqlite_version/browser.py new file mode 100644 index 0000000..26bd41c --- /dev/null +++ b/Linux_sqlite_version/browser.py @@ -0,0 +1,6 @@ +import Tkinter,tkFileDialog +def browse(): + root = Tkinter.Tk() + root.withdraw() + filez = tkFileDialog.askopenfilenames(parent=root,title='Choose a file',filetypes = (("pdf files","*.pdf"),("all files","*.*"))) + return root.tk.splitlist(filez) diff --git a/Linux_sqlite_version/browser.pyc b/Linux_sqlite_version/browser.pyc new file mode 100644 index 0000000..fd48f81 Binary files /dev/null and b/Linux_sqlite_version/browser.pyc differ diff --git a/Linux_sqlite_version/controller.py b/Linux_sqlite_version/controller.py new file mode 100644 index 0000000..2f9c4a4 --- /dev/null +++ b/Linux_sqlite_version/controller.py @@ -0,0 +1,46 @@ +import main +import universal +import browser +import sqlitewriter +from shutil import copyfile +import os +#import test +universal.init() +sqlitewriter.init() +files=browser.browse() +for _file in files : + #main.run_command("cp "+str(_file)+" "+universal.current_dir) + src=str(_file) + universal.filename="" + temp=len(_file)-1 + while _file[temp]!="/": + universal.filename=_file[temp]+universal.filename + temp-=1 + tempfile = "copy"+universal.filename + dst=str(universal.current_dir+'/'+str("copy"+universal.filename)) + copyfile(src,dst) + universal.logfile = universal.filename.replace('.pdf','') #as univeral.filename changes in main + sqlitewriter.createconnection() + main.initial() + sqlitewriter.closeconnection() + + if(universal.logflag==0): + os.remove(universal.logfile+".txt") +# else: +# test.init(tempfile) + os.remove(tempfile) + os.remove(_file) + #main.run_command("rm "+universal.logfile) +#year=input("year\n") +#s=main.run_command("ls "+str(year),1).split("\n") +#fappend.close() +#for x in s: +# universal.filename=x +# main.run_command("mv "+str(year)+"/"+str(x)+" "+universal.current_dir) +# main.initial() +# main.run_command("mv "+universal.current_dir+"/"+str(x)+" "+str(year)) + +#fappend=open("log.txt",'a') +#fappend.write("\n********"+"\n"+str(year)+"\n*************\n\n\n") +#fappend.close() +#i=input("Filename\n") diff --git a/Linux_sqlite_version/convert.py b/Linux_sqlite_version/convert.py new file mode 100644 index 0000000..6dcb64a --- /dev/null +++ b/Linux_sqlite_version/convert.py @@ -0,0 +1,15 @@ +import commands +import universal +import logwriter +def run_command(string): + if commands.getstatusoutput(string)[0]!=0: + logwriter.logwrite("ERROR IN Commands.getstatusoutput "+string) +def convert(): + # run_command("pdf2txt.py -t html -Y exact "+"-o "+universal.filename+".html "+universal.current_dir+"/"+universal.year+"/"+universal.filename+".pdf") + run_command("pdf2txt.py -t tag -Y exact "+"-o "+universal.current_dir+"/"+universal.tag_folder+"/"+universal.filename+universal.filename+".html "+universal.current_dir +"/"+ universal.pdf_folder+"/"+universal.filename+".pdf") +#universal.init(); +#for i in range(8,622): +# #print(i) +# universal.filename=str(i); +# convert() #for initializing conversion of files + diff --git a/Linux_sqlite_version/convert.pyc b/Linux_sqlite_version/convert.pyc new file mode 100644 index 0000000..f1282c9 Binary files /dev/null and b/Linux_sqlite_version/convert.pyc differ diff --git a/Linux_sqlite_version/excelwriter.py b/Linux_sqlite_version/excelwriter.py new file mode 100644 index 0000000..d4eef3a --- /dev/null +++ b/Linux_sqlite_version/excelwriter.py @@ -0,0 +1,97 @@ +import xlsxwriter +import universal +import logwriter +def init(): #for initializing the xlsx file + universal.workbook = xlsxwriter.Workbook(universal.filename.replace(".pdf","")+".xlsx") + universal.worksheet = universal.workbook.add_worksheet() + headformat = universal.workbook.add_format() + headformat.set_bold() + headformat.set_text_wrap() + universal.worksheet.set_row(0, 60) + universal.worksheet.set_column(0,3,11) + universal.worksheet.set_column(4,4,30) + universal.worksheet.set_column(5,5,20) + universal.worksheet.set_column(6,6,15) + universal.worksheet.set_column(7,8,7) + universal.worksheet.set_column(9,9,12) + universal.worksheet.set_column(10,10,13) + universal.worksheet.set_column(11,12,9) + universal.worksheet.set_column(13,13,15) + universal.worksheet.set_column(14,14,12) + universal.worksheet.set_column(15,17,14) + universal.worksheet.set_column(18,18,11) + universal.worksheet.set_column(19,19,14) + + universal.worksheet.write('A1',"Application No.",headformat) + universal.worksheet.write('B1',"Date of filling of Application",headformat) + universal.worksheet.write('C1',"Publication Date",headformat) + universal.worksheet.write('D1',"Name of Applicant",headformat) + universal.worksheet.write('E1',"Title of Invention",headformat) + universal.worksheet.write('F1',"Name of Inventor(s)",headformat) + universal.worksheet.write('G1',"Abstract",headformat) + universal.worksheet.write('H1',"No. of pages",headformat) + universal.worksheet.write('I1',"No. of claims",headformat) + universal.worksheet.write('J1',"International classification",headformat) + universal.worksheet.write('K1',"Priority Document No.",headformat) + universal.worksheet.write('L1',"Priority Date",headformat) + universal.worksheet.write('M1',"Name of priority country",headformat) + universal.worksheet.write('N1',"International Application No.",headformat) + universal.worksheet.write('O1',"International Application Filling Date",headformat) + universal.worksheet.write('P1',"International Publication No.",headformat) + universal.worksheet.write('Q1',"Patent of addition to Application No.",headformat) + universal.worksheet.write('R1',"Patent of addition to Application No. Filling Date",headformat) + universal.worksheet.write('S1',"Divisional to Application No.",headformat) + universal.worksheet.write('T1',"Divisional to Application No. Filling Date",headformat) + universal.row = 1 + universal.date_format = universal.workbook.add_format({'num_format':'dd mm yyyy'}) + #universal.workbook.close() + + +#inside for loop +def loop() : + try: + universal.worksheet.write(universal.row, 0, universal.data["Application No."]) + universal.worksheet.write(universal.row, 1, universal.data["Date of filing of Application"], universal.date_format) + universal.worksheet.write(universal.row, 2, universal.data["Publication Date"], universal.date_format) + universal.worksheet.write(universal.row, 3, universal.data["Name of Applicant"]) + universal.worksheet.write(universal.row, 4, universal.data["Title of the invention"]) + universal.worksheet.write(universal.row, 5, universal.data["Name of Inventor"]) + universal.worksheet.write(universal.row, 6, universal.data["Abstract"]) + if(universal.data["No. of Pages"].upper()!="NA"): + universal.worksheet.write(universal.row, 7, int(universal.data["No. of Pages"])) + else: + universal.worksheet.write(universal.row, 7, universal.data["No. of Pages"].upper()) + if(universal.data["No. of Claims"].upper()!="NA"): + universal.worksheet.write(universal.row, 8, int(universal.data["No. of Claims"])) + else: + universal.worksheet.write(universal.row, 8, universal.data["No. of Claims"].upper()) + universal.worksheet.write(universal.row, 9, universal.data["International classification"]) + universal.worksheet.write(universal.row, 10, universal.data["Priority Document No"]) + if(universal.data["Priority Date"] == "NA"): + universal.worksheet.write(universal.row, 11, universal.data["Priority Date"]) + else: + universal.worksheet.write(universal.row, 11, universal.data["Priority Date"],universal.date_format) + universal.worksheet.write(universal.row, 12, universal.data["Name of priority country"]) + universal.worksheet.write(universal.row, 13, universal.data["International Application No"]) + if(universal.data["IAFiling Date"] == "NA"): + universal.worksheet.write(universal.row, 14, universal.data["IAFiling Date"]) + else: + universal.worksheet.write(universal.row, 14, universal.data["IAFiling Date"],universal.date_format) + universal.worksheet.write(universal.row, 15, universal.data["International Publication No"]) + universal.worksheet.write(universal.row, 16, universal.data["Patent of Addition to Application Number"]) + if(universal.data["IBFiling Date"] == "NA"): + universal.worksheet.write(universal.row, 17, universal.data["IBFiling Date"]) + else: + universal.worksheet.write(universal.row, 17, universal.data["IBFiling Date"],universal.date_format) + universal.worksheet.write(universal.row, 18, universal.data["Divisional to Application Number"]) + if(universal.data["ICFiling Date"] == "NA"): + universal.worksheet.write(universal.row, 19, universal.data["ICFiling Date"]) + else: + universal.worksheet.write(universal.row, 19, universal.data["ICFiling Date"],universal.date_format) + + universal.row = universal.row + 1 + except Exception as e: + universal.logflag=1 + logwriter.logwrite("Excelfile : "+str(e)+" on page "+str(int(universal.filename)+1)) + + diff --git a/Linux_sqlite_version/excelwriter.pyc b/Linux_sqlite_version/excelwriter.pyc new file mode 100644 index 0000000..50a9bd7 Binary files /dev/null and b/Linux_sqlite_version/excelwriter.pyc differ diff --git a/Linux_sqlite_version/extractor.py b/Linux_sqlite_version/extractor.py new file mode 100644 index 0000000..bde7be5 --- /dev/null +++ b/Linux_sqlite_version/extractor.py @@ -0,0 +1,439 @@ +#confirm identity of WIPO number +#implement sql +#implement a method to find and convert patent files of all year one by one +# -*- coding: utf-8 -*- +import difflib +from collections import namedtuple +import operator +import re +import universal +import logwriter +import unicodedata +pages_tag="No of Pages" #tags for pages and claims in whole file. +claims_tag="No of Claims"#we are using No not No. so that we can match it with No, no, +Pair = namedtuple("Pair", ["start", "end"]) +Tag = namedtuple("Tag",["tag","start","end"]) +Tags=["(21) Application","Address Applicant","(22) Date filing Application","(19) India","(43) Publication Date","(54) Title Invention","(51) International classification","(31) Priority Document","(32) Priority Date","(33) Name priority country","(86) International Application","(87) International Publication","(61) Patent Addition Application","(62) Divisional Application","(71) Name Applicant","(72) Name Inventor","(57) Abstract",pages_tag, claims_tag] +indexvalues = [] +flag={}#flag[tag]=1 implies value to tag has been assigned used in line 194 main usage +data = {} +probability = 0.85 +reslt={} +#removes spaces and lowers the string + +def burst(patent): + words = patent.split() + w = [] + for word in words: + a = word.split(':') + for b in a: + if(b!=""): + w.append(b.strip()) + return w; + +def modify(string): + string="".join(burst(string)).lower() + return string +def lcs(S,T): + m = len(S) + n = len(T) + counter = [[0]*(n+1) for x in range(m+1)] + for i in range(m): + for j in range(n): + if S[i] == T[j]: + counter[i+1][j+1] = counter[i][j]+1 + else: + counter[i+1][j+1]=max(counter[i+1][j],counter[i][j+1]) + return counter[m][n] +def match(word,tag): + word=modify(word) + tag=modify(tag) + sq=lcs(word,tag) + return(float(float(sq)/float(max(len(word),len(tag))))) +#this function locates expression with MINIMUM LENGTH ,similar to tag in fstring having probability atleast p0 +#no restriction on arguments passed can be with or without spaces (as the match function matches the string after modifng it) +def locate(tag,fstring,p0): #return null for Address of applicant + if(tag.find("Address")!=-1): + return (-1,"") +# if(tag.find("International Application")!=-1): +# return (-1,"") +# return (-1,"") + tag=modify(tag) + string="" + for x in fstring: #for converting fstring(which can be a list ) into string + string+=x+" " + #print(tag+" "+string) + p=0.0 + start=0 + end=0 + i=0 + while i p): + p=arr + start=i + end=j + elif(p==arr): + p=arr + if(end-start>=j-i): + start=i + end=j + j+=1 + i+=1 + #print(tag+" "+string[start:end+1]+" "+str(p)) + if (start==0 and end==0) or (p= probability: + arr.append(index) + index = index+1 + return arr; + +def searchtag(words,tag): #returns pair of starting and ending index of a tag in words + tag = tag.lower() + query = tag.split()#query(list) + arr = matches(words,query[0]) #returns list containing indexes of occurence of query[0] in words + index = -1 #start index variable + index1 = -1 #end index variable +# print(query) +# print(words) +# print(arr) + for a in arr: + i=1 + flag = True + while i0): + if(val[0]==':'): + val = val[1:] + if(len(val)>0): + data[indexvalues[p].tag] = val.strip() + else : + data[indexvalues[p].tag] = "NA" + else : + data[indexvalues[p].tag] = "NA" + flag[indexvalues[p].tag]=1 + p = p+1 + val = ' '.join(words[indexvalues[p].end+1:]) + if(len(val)>0 and val[0]==':'): + val = val[1:] + if(bool(val.lower().find("continued")!=-1)&bool(val.lower().find("to")!=-1)&bool(val.lower().find("part")!=-1)): + position = val.lower().find("continued") + val = val[:position] + data[indexvalues[p].tag] = val.strip() + flag[indexvalues[p].tag] = 1 + if(flag[pages_tag]==0): + data[pages_tag] = "NA" + if(flag[claims_tag]==0): + data[claims_tag] = "NA" + for tag in data: + if(bool(data[tag]=="")|bool(data[tag]=="na")|bool(data[tag]=="n.a.")|bool(data[tag].lower()=="nil")): + data[tag]="NA" + if(is_ascii(data[tag])==False): + data[tag] = transformunicode(data[tag]) + data[tag] = formatval(data[tag]) + #if(flag["(21) Application"]!=1): + data["(21) Application"] = formatdocumentno(data["(21) Application"]) + #if(flag["(31) Priority Document"]!=1): + data["(31) Priority Document"] = formatdocumentno(data["(31) Priority Document"]) + #if(flag["(87) International Publication"]!=1): + data["(87) International Publication"] = formatdocumentno(data["(87) International Publication"]) + #if(flag["(61) Patent Addition Application"]): + data["(61) Patent Addition Application"] = formatfilingno(data["(61) Patent Addition Application"],"(61) Patent Addition Application") + #if(flag["(62) Divisional Application"]!=1): + data["(62) Divisional Application"] = formatfilingno(data["(62) Divisional Application"],"(62) Divisional Application") + #if(flag["(86) International Application"]!=1): + data["(86) International Application"] = formatfilingno(data["(86) International Application"],"(86) International Application") + data["(54) Title Invention"] = formatstring(data["(54) Title Invention"]) + # if(flag["(57) Abstract"]!=1): + data["(57) Abstract"] = formatabstract(data["(57) Abstract"]) + data["(32) Priority Date"] = formatdate(data["(32) Priority Date"]) + data["(43) Publication Date"] = formatdate(data["(43) Publication Date"]) + data["(22) Date filing Application"] = formatdate(data["(22) Date filing Application"]) + #data["(87) WIPO"]=formatdocumentno(data["(87) WIPO"]) + #if(data["(87) International Publication"]=="NA"): #assuming WIPO=International publication + data["(87) International Publication"]=formatdocumentno(data["(87) International Publication"]) + #if(flag["(21) Application"]!=1): + universal.data["Application No."] = data["(21) Application"] + #if(flag["(22) Date filing Application"]!=1): + universal.data["Date of filing of Application"] = data["(22) Date filing Application"] + #if(flag["(43) Publication Date"]!=1): + universal.data["Publication Date"] = data["(43) Publication Date"] + #if(flag["(71) Name Applicant"]!=1): + universal.data["Name of Applicant"] = formatstring(data["(71) Name Applicant"]) +" Address of Applicant : " + formatstring(data["Address Applicant"]) + #if(flag["(54) Title invention"]!=1): + universal.data["Title of the invention"] = data["(54) Title Invention"] + #if(flag["(72) Name Inventor"]!=1): + universal.data["Name of Inventor"] = formatstring(data["(72) Name Inventor"]) + #if(flag["(57) Abstract"]!=1): + universal.data["Abstract"] = data["(57) Abstract"] + #if(flag[pages_tag]!=1): + universal.data["No. of Pages"] = data[pages_tag] + #if(flag[claims_tag]!=1): + universal.data["No. of Claims"] = data[claims_tag] + #if(flag["(51) International classification"]!=1): + universal.data["International classification"] = data["(51) International classification"] + #if(flag["(31) Priority Document"]!=1): + universal.data["Priority Document No"] = data["(31) Priority Document"] + #if(flag["(32) Priority Date"]!=1): + universal.data["Priority Date"] = data["(32) Priority Date"] + #if(flag["(33) Name priority country"]!=1): + universal.data["Name of priority country"] = data["(33) Name priority country"] + #if(flag["(86) International Application"]!=1): + universal.data["International Application No"] = data["(86) International Application"] + # if(flag["(86) International Application Filing Date"]!=1): + universal.data["IAFiling Date"] = data["(86) International Application Filing Date"] + #if(flag["(87) International Publication"]!=1): + universal.data["International Publication No"] = data["(87) International Publication"] + #if(flag["(61) Patent Addition Application"]!=1): + universal.data["Patent of Addition to Application Number"] = data["(61) Patent Addition Application"] + # if(flag["(61) Patent Addition Application Filing Date"]!=1): + universal.data["IBFiling Date"] = data["(61) Patent Addition Application Filing Date"] + #if(flag["(62) Divisional Application"]!=1): + universal.data["Divisional to Application Number"] = data["(62) Divisional Application"] + # if(flag["(62) Divisional Application Filing Date"]!=1): + universal.data["ICFiling Date"] = data["(62) Divisional Application Filing Date"] + +def getdetails(new_patent):#new_patent must have spaces b/w consecutive words + patent="" + data.clear() + flag.clear() + del indexvalues[:] + for j in range (0,len(new_patent)): + if(new_patent[j]=='('): + if(new_patent[j+1].isdigit()): + patent+=" (" + elif(new_patent[j]==')'): + if(new_patent[j-1].isdigit()): + patent+=") " + else: + patent+=new_patent[j] + temp_patent = patent #temp_patent is the original string with capital letters + patent = patent.lower() + words = burst(patent)#word(list) contains lower letter string + if(check(words)==True):#check checks if pdf has patent + tagindex=0 + for tag in Tags: + flag[tag]=0#flag[tag]=1 implies value to tag has been assigned + pages,claims = getnoofpagesandclaims(words) #here we are going to give values to no of pages and no of claims tags and insert the starting and ending index in indexvalues + if(bool(pages.start!=-1) & bool(pages.end!=-1)): + indexvalues.append(Tag(pages_tag,pages.start,pages.end))#flag has been asigned 1 already in getnoofpagesandclaims + if(bool(claims.start!=-1) & bool(claims.end!=-1)): + indexvalues.append(Tag(claims_tag,claims.start,claims.end))#flag has been asigned 1 already in getnoofpagesandclaims + + while tagindex', (lambda event, e=ents: fetch(e))) + b1 = Button(root, text='Show', + command=(lambda e=ents: fetch(e))) + b1.pack(side=LEFT, padx=5, pady=5) + b2 = Button(root, text='Quit', command=root.quit) + b2.pack(side=LEFT, padx=5, pady=5) + root.mainloop() diff --git a/Linux_sqlite_version/test.pyc b/Linux_sqlite_version/test.pyc new file mode 100644 index 0000000..f956352 Binary files /dev/null and b/Linux_sqlite_version/test.pyc differ diff --git a/Linux_sqlite_version/universal.py b/Linux_sqlite_version/universal.py new file mode 100644 index 0000000..c064946 --- /dev/null +++ b/Linux_sqlite_version/universal.py @@ -0,0 +1,41 @@ +#file containing global variables +import os +def init(): + global tag #records the name of the keys in data dictionary + tag=["Application No.","Date of filing of Application","Publication Date","Name of Applicant","Title of the invention","Name of Inventor","Abstract","No. of Pages","No. of Claims","International classification","Priority Document No","Priority Date","Name of priority country","International Publication No","International Application No","IAFiling Date","Patent of Addition to Application Number","IBFiling Date","Divisional to Application Number","ICFiling Date"] + global dbname + dbname = "patents" + global tablename + tablename = "patent_tables" + global host + host = "127.0.0.1" + global user + user = "root" + global password + password = "123" + global data + data={} + global tree + global con +# global test +# test=[] + global datastring + datastring="" + global filename #filename of pdf file containing patents + filename="15" + global current_dir + current_dir=os.getcwd() #In future use in-built python function which is platform independent. + global pdf_folder #name of folder containing pdf burst files + pdf_folder="3" + global tag_folder #name of folder containing tag-html file + tag_folder="tag_folder" + global workbook + global worksheet + global date_format + global row #row counter + global flag #Flag for process of extraction has started or not + flag=0 + global logfile#filename is set to universal.logfile.txt + logfile="" + global logflag #for knowing whether something was written to log file or not + logflag = 0 diff --git a/Linux_sqlite_version/universal.pyc b/Linux_sqlite_version/universal.pyc new file mode 100644 index 0000000..b4e6e97 Binary files /dev/null and b/Linux_sqlite_version/universal.pyc differ diff --git a/download_patents_script/patent_new_links.txt b/download_patents_script/patent_new_links.txt new file mode 100644 index 0000000..3c77eff --- /dev/null +++ b/download_patents_script/patent_new_links.txt @@ -0,0 +1,568 @@ +21 April 2017 +Part1 (7.14 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_461_1/Part1.pdf +Part2 (4.90 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_461_1/Part1.pdf +Part3_Designs (4.63 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_461_1/Part1.pdf +------- +14 April 2017 +part1 (4.94 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_461_1/Part2.pdf +part2 (3.17 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_461_1/Part2.pdf +part3 (6.56 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_461_1/Part2.pdf +------- +7 April 2017 +Part1 (5.16 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_461_1/Part3_Designs.pdf +Part2 (2.07 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_461_1/Part3_Designs.pdf +Part3_Designs (7.15 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_461_1/Part3_Designs.pdf +------- +31 March 2017 +Part-1 (6.47 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_457_1/Part1.pdf +Part-2 (2.04 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_457_1/Part1.pdf +Part-3 (8.78 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_457_1/Part1.pdf +------- +24 March 2017 +Part1 (5.20 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_457_1/Part2.pdf +Part2 (1.98 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_457_1/Part2.pdf +Part3_Designs (8.30 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_457_1/Part2.pdf +------- +17 March 2017 +Part1 (3.61 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_457_1/Part3_Designs.pdf +Part2 (6.28 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_457_1/Part3_Designs.pdf +------- +10 March 2017 +Part1 (7.28 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_454_1/Part-1.pdf +Part2_Designs (5.77 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_454_1/Part-1.pdf +------- +3 March 2017 +Part1 (7.12 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_454_1/Part-2.pdf +Part2_Designs (5.58 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_454_1/Part-2.pdf +------- +24 February 2017 +Part1 (6.10 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_454_1/Part-3.pdf +Part2_Designs (4.48 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_454_1/Part-3.pdf +------- +17 February 2017 +Part1 (5.87 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_452_1/Part1.pdf +Part2 (4.10 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_452_1/Part1.pdf +------- +10 February 2017 +Part1 (6.17 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_452_1/Part2.pdf +Part2 (1.27 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_452_1/Part2.pdf +PART3 (4.06 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_452_1/Part2.pdf +------- +03 February 2017 +Part1 (5.17 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_452_1/Part3_Designs.pdf +part2_Designs (4.85 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_452_1/Part3_Designs.pdf +------- +27 Janurary 2017 +Part1 (4.27 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_450_1/Part1.pdf +Part2_Designs (3.91 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_450_1/Part1.pdf +------- +20 January 2017 +Part1 (6.44 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_450_1/Part2.pdf +Part2_Designs (4.34 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_450_1/Part2.pdf +------- +13 January 2017 +Part1 (7.18 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_448_1/Part1.pdf +Part2_Designs (4.16 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_448_1/Part1.pdf +------- +6 January 2017 +Part1 (5.81 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_448_1/Part2_Designs.pdf +Part2_Designs (4.62 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_448_1/Part2_Designs.pdf +------- +30 December 2016 +Part1 (6.04 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_446_1/Part1.pdf +Part2 (3.46 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_446_1/Part1.pdf +Part3_Designs (3.94 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_446_1/Part1.pdf +------- +23 December 2016 +Part1 (4.76 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_446_1/Part2_Designs.pdf +Part2_Designs (4.19 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_446_1/Part2_Designs.pdf +------- +16 December 2016 +Part1 (3.94 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_444_1/Part1.pdf +Part2_Designs (3.67 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_444_1/Part1.pdf +------- +9 December 2016 +Part1 (5.72 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_444_1/Part2_Designs.pdf +Part2_Designs (4.07 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_444_1/Part2_Designs.pdf +------- +2 December 2016 +Part1 (3.72 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_442_1/Part1.pdf +Part2_Designs (4.40 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_442_1/Part1.pdf +------- +25 November 2016 +Part1 (8.00 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_442_1/Part2.pdf +Part2_Designs (4.84 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_442_1/Part2.pdf +------- +18 November 2016 +Part1 (3.95 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_440_1/Part1.pdf +Part2_Designs (4.56 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_440_1/Part1.pdf +------- +11 November 2016 +Part1 (6.85 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_440_1/Part2.pdf +Part2_Designs (4.46 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_440_1/Part2.pdf +------- +4 November 2016 +Part1 (4.81 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_438_1/Part1.pdf +Part2_Designs (4.34 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_438_1/Part1.pdf +------- +28 October 2016 +Part1 (4.12 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_435_1/Part1.pdf +Part2_Designs (4.62 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_435_1/Part1.pdf +------- +21 October 2016 +Part1 (4.21 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_435_1/Part2_Designs.pdf +Part2_Designs (4.64 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_435_1/Part2_Designs.pdf +------- +14 October 2016 +Part1 (2.54 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_433_1/Part1.pdf +Part2_Designs (4.47 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_433_1/Part1.pdf +------- +07 October 2016 +Part1_1_ (7.11 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_433_1/Part2_Designs.pdf +Part2Designs (5.12 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_433_1/Part2_Designs.pdf +------- +30 September 2016 +Part1 (7.35 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_431_1/Part1.pdf +Part2_Designs (4.41 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_431_1/Part1.pdf +------- +23rd September 2016 +Part 1 (1.62 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_431_1/Part2_Designs.pdf +Part 2 (Designs) (4.67 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_431_1/Part2_Designs.pdf +------- +16 September 2016 +Part 1 (2.52 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_428_1/Part1.pdf +Part 2 (Designs) (4.26 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_428_1/Part1.pdf +------- +9 September 2016 +Part1 (2.63 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_428_1/Part2_Designs.pdf +Part2_Designs (4.08 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_428_1/Part2_Designs.pdf +------- +02 September, 2016 +Part 1 (5.85 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part1.pdf +Part 2 (7.30 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part1.pdf +Part 3 (3.28 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part1.pdf +Part 4 (Design) (7.56 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part1.pdf +------- +31 August, 2016 +Part 1 (8.07 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part2.pdf +Part 2 (4.25 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part2.pdf +Part 3 (4.66 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part2.pdf +Part 4 (4.27 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part2.pdf +Part 5 (5.00 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part2.pdf +Part 6 (4.42 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part2.pdf +Part 7 (4.70 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part2.pdf +Part 8 (4.28 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part2.pdf +Part 9 (3.32 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part2.pdf +Part 10 (3.37 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part2.pdf +Part 11 (2.77 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part2.pdf +Part 12 (4.30 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part2.pdf +Part 13 (4.21 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part2.pdf +Part 14 (4.34 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part2.pdf +Part 15 (4.90 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part2.pdf +Part 16 (4.20 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part2.pdf +Part 17 (4.48 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part2.pdf +------- +26 August, 2016 +Part 1 (10.83 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part3_Designs.pdf +Part 2 (8.92 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part3_Designs.pdf +Part 3 (6.62 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part3_Designs.pdf +Part 4 (5.00 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part3_Designs.pdf +Part 5 (5.02 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part3_Designs.pdf +Part 6 (4.74 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part3_Designs.pdf +Part 7 (4.75 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part3_Designs.pdf +Part 8 (4.93 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part3_Designs.pdf +Part 9 (4.76 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part3_Designs.pdf +Part 10 (5.14 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part3_Designs.pdf +Part 11 (Design) (3.13 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_425_1/Part3_Designs.pdf +------- +19 August, 2016 +Part 1 (11.40 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_423_1/Part1.pdf +Part 2 (1.64 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_423_1/Part1.pdf +Part 3 (Design) (2.60 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_423_1/Part1.pdf +------- +12 August, 2016 +Part 1 (6.54 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_423_1/Part2_Designs.pdf +Part 2 (3.15 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_423_1/Part2_Designs.pdf +Part 3 (Design) (4.17 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_423_1/Part2_Designs.pdf +------- +05 August, 2016 +Part 1 (16.95 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_421_1/Part1.pdf +Part 2 (8.61 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_421_1/Part1.pdf +Part 3 (Design) (2.89 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_421_1/Part1.pdf +------- +29 July, 2016 +Part 1 (7.56 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_421_1/Part2_Designs.pdf +Part 2 (3.03 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_421_1/Part2_Designs.pdf +Part 3 (Design) (2.86 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_421_1/Part2_Designs.pdf +------- +22 July, 2016 +Part 1 (14.37 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_419_1/Part1.pdf +Part 2 (4.87 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_419_1/Part1.pdf +Part 3 (Design) (2.46 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_419_1/Part1.pdf +------- +15 July, 2016 +Part 1 (14.93 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_419_1/Part2_Designs.pdf +Part 2 (13.82 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_419_1/Part2_Designs.pdf +Part 3 (Design) (3.47 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_419_1/Part2_Designs.pdf +------- +08 July 2016 +Part 1 (12.57 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_417_1/Part1.pdf +Part 2 (7.55 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_417_1/Part1.pdf +Part 3 (Design) (3.45 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_417_1/Part1.pdf +------- +01 July, 2016 +Part 1 (4.58 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_417_1/Part2_Designs.pdf +Part 2 (16.89 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_417_1/Part2_Designs.pdf +Part 3 (17.41 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_417_1/Part2_Designs.pdf +Part 4 (14.88 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_417_1/Part2_Designs.pdf +Part 5 (17.55 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_417_1/Part2_Designs.pdf +Part 6 (16.13 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_417_1/Part2_Designs.pdf +Part 7 (17.79 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_417_1/Part2_Designs.pdf +Part 8 (15.69 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_417_1/Part2_Designs.pdf +Part 9 (17.58 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_417_1/Part2_Designs.pdf +Part 9 (Design) (3.42 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_417_1/Part2_Designs.pdf +Part 10 (7.86 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_417_1/Part2_Designs.pdf +------- +24 June, 2016 +Part 1 (5.65 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_413_1/Part1.pdf +Part 2 (13.74 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_413_1/Part1.pdf +Part 3 (3.49 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_413_1/Part1.pdf +Part 4 (Design) (7.81 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_413_1/Part1.pdf +------- +17 June, 2016 +Part 1 (3.97 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_413_1/Part2_Designs.pdf +Part 2 (7.10 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_413_1/Part2_Designs.pdf +Part 3 (Design) (6.77 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_413_1/Part2_Designs.pdf +------- +10 June, 2016 +Part 1 (6.86 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_410_1/Part1.pdf +Part 2 (7.67 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_410_1/Part1.pdf +Part 3 (Design) (7.55 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_410_1/Part1.pdf +------- +03 June, 2016 +Part 1 (9.37 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_410_1/Part2_Designs.pdf +Part 2 (8.24 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_410_1/Part2_Designs.pdf +Part 3 (Design) (5.39 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_410_1/Part2_Designs.pdf +------- +27 May, 2016 +Part 1 (7.85 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_408_1/Part1.pdf +Part 2 (11.78 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_408_1/Part1.pdf +Part 3 (Design) (5.03 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_408_1/Part1.pdf +------- +20 May, 2016 +Part 1 (4.87 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_408_1/Part2_Designs.pdf +Part 2 (6.50 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_408_1/Part2_Designs.pdf +Part 3 (Design) (4.02 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_408_1/Part2_Designs.pdf +------- +13 May, 2016 +Part 1 (6.51 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_405_1/Part1.pdf +Part 2 (3.54 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_405_1/Part1.pdf +Part 3 (Design) (3.42 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_405_1/Part1.pdf +------- +06 May, 2016 +Part 1 (6.85 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_405_1/Part2_Designs.pdf +Patr 2 (6.48 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_405_1/Part2_Designs.pdf +Part 3 (Design) (2.98 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_405_1/Part2_Designs.pdf +------- +29 April, 2016 +Part 1 (7.74 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_403_1/Part1.pdf +Patr 2 (4.29 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_403_1/Part1.pdf +Part 3 (Design) (4.00 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_403_1/Part1.pdf +------- +22 April, 2016 +Part 1 (9.11 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_403_1/Part2_Designs.pdf +Part 2 (Design) (3.82 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_403_1/Part2_Designs.pdf +------- +15 April, 2016 +Part 1 (7.59 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_401_1/Part1.pdf +Part 2 (Design) (3.18 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_401_1/Part1.pdf +------- +08 April, 2016 +Part 1 (5.49 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_401_1/Part2_Designs.pdf +Part 2 (6.84 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_401_1/Part2_Designs.pdf +Part 3 (Design) (3.92 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_401_1/Part2_Designs.pdf +------- +01 April, 2016 +Part 1 (5.96 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_399_1/Part1.pdf +Part 2 (Design) (3.67 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_399_1/Part1.pdf +------- +26 February, 2016 +Part 1 (6.91 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_399_1/Part2_Designs.pdf +Part 2 (Design) (4.00 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_399_1/Part2_Designs.pdf +------- +25 March, 2016 +Part 1 (7.85 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_388_1/Part1_1_.pdf +Part 2 (Design) (3.00 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_388_1/Part1_1_.pdf +------- +19 February, 2016 +Part 1 (3.48 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_388_1/Part2Designs.pdf +Part 2 (4.07 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_388_1/Part2Designs.pdf +Part 3 (Design) (5.21 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_388_1/Part2Designs.pdf +------- +18 March, 2016 +Part 1 (6.57 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_383_1/Part1.pdf +Part 2 (Design) (4.08 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_383_1/Part1.pdf +------- +12 February, 2016 +Part 1 (4.04 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_383_1/Part2_Designs.pdf +Part 2 (6.17 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_383_1/Part2_Designs.pdf +Part 3 (Design) (4.70 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_383_1/Part2_Designs.pdf +------- +11 March, 2016 +Part 1 (4.61 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_373_1/part1.pdf +Part 2 (Design) (3.70 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_373_1/part1.pdf +------- +05 February, 2016 +Part 1 (4.89 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_373_1/part2.pdf +Part 2 (5.04 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_373_1/part2.pdf +Part 3 (Design) (3.62 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_373_1/part2.pdf +------- +04 March, 2016 +Part 1 (6.30 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_371_1/Part1.pdf +Part 2 (Design) (4.00 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_371_1/Part1.pdf +------- +29 January, 2016 +Part 1 (3.77 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_371_1/Part2Designs.pdf +Part 2 (5.12 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_371_1/Part2Designs.pdf +Part 3 (Design) (3.11 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_371_1/Part2Designs.pdf +------- +22 January, 2016 +Part 1 (5.93 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_378_1/Part1.pdf +Part 2 (7.02 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_378_1/Part1.pdf +Part 3 (Design) (4.38 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_378_1/Part1.pdf +------- +08 January, 2016 +Part 1 (7.71 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_378_1/Part2_Designs.pdf +Part 2 (Design) (4.08 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_378_1/Part2_Designs.pdf +------- +15 January, 2016 +Part 1 (5.53 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_361_1/part1.pdf +Part 2 (6.22 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_361_1/part1.pdf +Part 3 (Design) (3.58 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_361_1/part1.pdf +------- +01 January, 2016 +Part 1 (5.61 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_361_1/part2.pdf +Part 2 (8.44 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_361_1/part2.pdf +Part 3 (Design) (5.41 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_361_1/part2.pdf +------- +25 December, 2015 +Part 1 (4.60 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_361_1/part3.pdf +Part 2 (Design) (4.16 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_361_1/part3.pdf +------- +18 December, 2015 +Part 1 (5.29 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_361_1/part4design.pdf +Part 2 (4.62 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_361_1/part4design.pdf +Part 3 (Design) (5.35 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_361_1/part4design.pdf +------- +11 December, 2015 +Part 1 (3.31 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part1.pdf +Part 2 (Design) (4.45 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part1.pdf +------- +04 December, 2015 +Part 1 (9.00 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part2.pdf +Part 2 (Design) (4.75 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part2.pdf +------- +27 November, 2015 +Part 1 (8.62 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part3.pdf +Part 2 (Design) (5.00 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part3.pdf +------- +20 November, 2015 +Part 1 (6.61 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part4.pdf +Part 2 (Design) (4.40 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part4.pdf +------- +13 November, 2015 +Part 1 (6.96 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part5.pdf +Part 2 (Design) (4.16 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part5.pdf +------- +06 November, 2015 +Part 1 (7.08 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part6.pdf +Part 2 (Design) (1.91 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part6.pdf +------- +30 October, 2015 +Part 1 (7.04 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part7.pdf +Part 2 (Design) (4.81 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part7.pdf +------- +23 October, 2015 +Part 1 (5.33 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part8.pdf +Part 2 (Design) (3.67 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part8.pdf +------- +16 October, 2015 +Part 1 (7.72 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part9.pdf +Part 2 (Design) (4.08 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part9.pdf +------- +09 October, 2015 +Part 1 (5.94 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part10.pdf +Part 2 (Design) (4.30 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part10.pdf +------- +02 October, 2015 +Part 1 (4.76 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part11.pdf +Part 2 (4.79 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part11.pdf +Part 3 (Design) (2.08 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part11.pdf +------- +25 September, 2015 +Part 1 (7.06 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part12.pdf +Part 2 (Design) (4.96 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part12.pdf +------- +18 September, 2015 +part 1 (7.28 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part13.pdf +Part 2 (Design) (5.19 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part13.pdf +------- +11 September, 2015 +Part 1 (9.15 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part14.pdf +Part 2 (Design) (5.32 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part14.pdf +------- +04 September, 2015 +part1 (6.31 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part15.pdf +Part 2 (7.03 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part15.pdf +Part 3 (Design) (1.79 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part15.pdf +------- +28 August, 2015 +Part 1 (8.41 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part16.pdf +Part 2 (Design) (4.79 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part16.pdf +------- +21 August, 2015 +Part 1 (6.70 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part17.pdf +Part 2 (6.14 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part17.pdf +Part 3 (Design) (4.85 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_360_1/part17.pdf +------- +14 August, 2015 +Part 1 (8.43 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part1.pdf +Part 2 (Design) (4.10 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part1.pdf +------- +07 August, 2015 +Part 1 (6.25 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part2.pdf +Part 2 (Design) (4.48 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part2.pdf +------- +31 July, 2015 +Part 1 (6.17 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part3.pdf +Part 2 (Design) (4.90 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part3.pdf +------- +24 July, 2015 +Part 1 (4.15 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part4.pdf +Part 2 (Design) (3.70 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part4.pdf +------- +17 July, 2015 +Part 1 (6.20 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part5.pdf +Part 2 (Design) (4.10 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part5.pdf +------- +10 July, 2015 +Part 1 (6.84 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part6.pdf +Part 2 (1.97 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part6.pdf +Part 3 (Design) (4.53 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part6.pdf +------- +03 July, 2015 +Part 1 (8.15 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part7.pdf +Part 2 (6.98 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part7.pdf +Part 3 (Design) (3.73 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part7.pdf +------- +26 June, 2015 +part 1 (6.64 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part8.pdf +Part 2 (1.76 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part8.pdf +Part 3 (Design) (3.41 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part8.pdf +------- +19 June, 2015 +Part 1 (6.31 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part9.pdf +Part 2 (Design) (3.43 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part9.pdf +------- +12 June, 2015 +Part 1 (5.63 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part10.pdf +Part 2 (3.57 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part10.pdf +Part 3 (Design) (3.45 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part10.pdf +------- +05 June, 2015 +Part 1 (6.48 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part11design.pdf +Part 2 (Design) (5.18 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_359_1/part11design.pdf +------- +29 May, 2015 +Part 1 (4.42 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_358_1/part1.pdf +Part 2 (Design) (4.32 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_358_1/part1.pdf +------- +22 May, 2015 +Part 1 (4.10 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_358_1/part2.pdf +Part 2 (3.03 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_358_1/part2.pdf +Part 3 (Design) (3.49 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_358_1/part2.pdf +------- +15 May, 2015 +Part 1 (5.39 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_358_1/part3design.pdf +Part 2 (Design) (4.15 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_358_1/part3design.pdf +------- +08 May, 2015 +Part 1 (3.30 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_357_1/part1.pdf +Part 2 (2.08 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_357_1/part1.pdf +Part 3 (Design) (3.21 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_357_1/part1.pdf +------- +01 May, 2015 +Part 1 (3.37 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_357_1/part2.pdf +Part 2 (Design) (3.70 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_357_1/part2.pdf +------- +24 April, 2015 +Part 1 (6.33 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_357_1/part3design.pdf +Part 2 (Design) (2.66 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_357_1/part3design.pdf +------- +17 April, 2015 +part 1 (1.18 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_356_1/part1.pdf +Part 2 (Design) (1.29 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_356_1/part1.pdf +------- +10 April, 2015 +Part 1 (2.64 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_356_1/part2.pdf +Part 2 (Design) (1.28 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_356_1/part2.pdf +------- +27 March, 2015 +Part 1 (2.23 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_356_1/part3design.pdf +Part 2 (Design) (2.43 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_356_1/part3design.pdf +------- +20 March, 2015 +Part 1 (1.51 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_355_1/part1.pdf +Part 2 (Design) (1.23 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_355_1/part1.pdf +------- +13 March, 2015 +Part 1 (2.35 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_355_1/part2.pdf +Part 2 (1.49 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_355_1/part2.pdf +Part 3 (Design) (977 KB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_355_1/part2.pdf +------- +06 March, 2015 +Part 1 (1.82 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_355_1/part3design.pdf +Part 2 (Design) (1.22 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_355_1/part3design.pdf +------- +03 April, 2015 +Part 1 (1.99 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_354_1/part1.pdf +Part 2 (Design) (1.38 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_354_1/part1.pdf +------- +27 February, 2015 +Part 1 (2.37 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_354_1/part2.pdf +Part 2 (Design) (1.15 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_354_1/part2.pdf +------- +20 February, 2015 +Part 1 (3.31 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_354_1/part3design.pdf +Part 2 (Design) (1.38 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_354_1/part3design.pdf +------- +13 February, 2015 +Part 1 (2.63 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_353_1/part1.pdf +Part 2 (2.19 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_353_1/part1.pdf +Part 3 (Design) (1.36 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_353_1/part1.pdf +------- +06 February, 2015 +Part 1 (3.02 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_353_1/part2.pdf +Part 2 (Design) (876 KB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_353_1/part2.pdf +------- +30 January, 2015 +Part 1 (3.11 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_353_1/part3design.pdf +Part 2 (Design) (1.07 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_353_1/part3design.pdf +------- +23 January, 2015 +Part 1 (2.48 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_352_1/part1.pdf +Part 2 (Design) (1.13 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_352_1/part1.pdf +------- +16 January, 2015 +Part 1 (1.83 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_352_1/part2.pdf +Part 2 (Design) (1.13 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_352_1/part2.pdf +------- +09 January, 2015 +Part 1 (3.26 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_352_1/part3design.pdf +Part 2 (Design) (1.22 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_352_1/part3design.pdf +------- +02 January, 2015 +Part 1 (3.15 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_351_1/part1.pdf +Part 2 (3.07 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_351_1/part1.pdf +Part 3 (Design) (1.41 MB) http://www.ipindia.nic.in/writereaddata/Portal/IPOJournal/1_351_1/part1.pdf +------- diff --git a/download_patents_script/script_for_downloading_patents.py b/download_patents_script/script_for_downloading_patents.py new file mode 100644 index 0000000..181ef45 --- /dev/null +++ b/download_patents_script/script_for_downloading_patents.py @@ -0,0 +1,29 @@ +from selenium import webdriver +from selenium.common.exceptions import TimeoutException +from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0 +from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0 +from selenium.webdriver.common.by import By + +driver= webdriver.Chrome("/home/killerbee/Desktop/automate/chromedriver") +#driver[l].set_window_size(10,10 , 'current') +driver.get("http://www.ipindia.nic.in/journal-patents.htm") +i=0 +out=open("1.txt","w") +link1 =driver.find_elements_by_partial_link_text("Part") +while i<150: + month =driver.find_elements_by_xpath("//table/tbody/tr["+str(i+1)+"]/td[2]") + t_size=driver.find_elements_by_xpath("//table/tbody/tr["+str(i+1)+"]/td[5]") + s=str(t_size[0].text) + list_s=s.split("\n") + out.write(month[0].text+"\n") + j=0 + while j abcdaaa +# tag ---------> axabcydaa +#Approach A1 +#now what we know is that the tag is complete and a subsequence of tag will be the data from html file ....but if we use s.get_matching_blocks() it returns the longest common subsequence which will be wrong consider +#Approach A2 +# data from html file--> international_total_publication +# tag ---------> international publication +#this will match while they are two different tags so...we cant use this approach +#my approach:- +#remove all the whitespaces from the universal.datastring and then we will use the approach A1 to extract tags from universal.datastring +def begin(): #return 1 if string is not present + universal.datastring="" + reopen(universal.filename+universal.filename+".html") #html-tag filename converted from pdf + #page = requests_session.get('file:///home/killerbee/Desktop/test2/'+filename) #file name + #universal.tree = html.fromstring(page.content) + s = universal.tree.itertext() +# universal.test=["(21) Application No","Date of filing of Application","Publication Date","Title of the invention","International classification","Priority Document","Priority Date","Name of priority country","International Application","Fil","International Publication","Patent of Addition to Application","Fil","Divisional to Application","Fil","Name of Applicant","(72)Name of Inventor","Abstract"] + for a in s: + universal.datastring += a + try: + return(extractor.getdetails(universal.datastring)) + except Exception as e: + logwriter.logwrite("Extracter: "+str(e)+" on page "+str(int(universal.filename)+1)) + universal.logflag = 1 + return -1 + return 0 +# write code for case when tayal returns -1 and you have to run your extraction function +# implement ur extraction function and then call it + + + + + + + + + + #extractor.getdetails(universal.datastring) +# for tag in universal.test: +# tempi=i +# # i=extractor(i,tag) +# if i==-1: +# if(extractor.mycheck(universal.datastring)==0): +# fappend=open("log.txt",'a') +# fappend.write("-->"+str(universal.filename)+"->"+tag+"--->"+universal.datastring[tempi:tempi+len(tag)]+'\n') +# fappend.close() +# return -1 +# i+=1 diff --git a/sqlite_version/Parser.pyc b/sqlite_version/Parser.pyc new file mode 100644 index 0000000..def38d3 Binary files /dev/null and b/sqlite_version/Parser.pyc differ diff --git a/sqlite_version/browser.py b/sqlite_version/browser.py new file mode 100644 index 0000000..26bd41c --- /dev/null +++ b/sqlite_version/browser.py @@ -0,0 +1,6 @@ +import Tkinter,tkFileDialog +def browse(): + root = Tkinter.Tk() + root.withdraw() + filez = tkFileDialog.askopenfilenames(parent=root,title='Choose a file',filetypes = (("pdf files","*.pdf"),("all files","*.*"))) + return root.tk.splitlist(filez) diff --git a/sqlite_version/browser.pyc b/sqlite_version/browser.pyc new file mode 100644 index 0000000..fd48f81 Binary files /dev/null and b/sqlite_version/browser.pyc differ diff --git a/sqlite_version/controller.py b/sqlite_version/controller.py new file mode 100644 index 0000000..2f9c4a4 --- /dev/null +++ b/sqlite_version/controller.py @@ -0,0 +1,46 @@ +import main +import universal +import browser +import sqlitewriter +from shutil import copyfile +import os +#import test +universal.init() +sqlitewriter.init() +files=browser.browse() +for _file in files : + #main.run_command("cp "+str(_file)+" "+universal.current_dir) + src=str(_file) + universal.filename="" + temp=len(_file)-1 + while _file[temp]!="/": + universal.filename=_file[temp]+universal.filename + temp-=1 + tempfile = "copy"+universal.filename + dst=str(universal.current_dir+'/'+str("copy"+universal.filename)) + copyfile(src,dst) + universal.logfile = universal.filename.replace('.pdf','') #as univeral.filename changes in main + sqlitewriter.createconnection() + main.initial() + sqlitewriter.closeconnection() + + if(universal.logflag==0): + os.remove(universal.logfile+".txt") +# else: +# test.init(tempfile) + os.remove(tempfile) + os.remove(_file) + #main.run_command("rm "+universal.logfile) +#year=input("year\n") +#s=main.run_command("ls "+str(year),1).split("\n") +#fappend.close() +#for x in s: +# universal.filename=x +# main.run_command("mv "+str(year)+"/"+str(x)+" "+universal.current_dir) +# main.initial() +# main.run_command("mv "+universal.current_dir+"/"+str(x)+" "+str(year)) + +#fappend=open("log.txt",'a') +#fappend.write("\n********"+"\n"+str(year)+"\n*************\n\n\n") +#fappend.close() +#i=input("Filename\n") diff --git a/sqlite_version/convert.py b/sqlite_version/convert.py new file mode 100644 index 0000000..6dcb64a --- /dev/null +++ b/sqlite_version/convert.py @@ -0,0 +1,15 @@ +import commands +import universal +import logwriter +def run_command(string): + if commands.getstatusoutput(string)[0]!=0: + logwriter.logwrite("ERROR IN Commands.getstatusoutput "+string) +def convert(): + # run_command("pdf2txt.py -t html -Y exact "+"-o "+universal.filename+".html "+universal.current_dir+"/"+universal.year+"/"+universal.filename+".pdf") + run_command("pdf2txt.py -t tag -Y exact "+"-o "+universal.current_dir+"/"+universal.tag_folder+"/"+universal.filename+universal.filename+".html "+universal.current_dir +"/"+ universal.pdf_folder+"/"+universal.filename+".pdf") +#universal.init(); +#for i in range(8,622): +# #print(i) +# universal.filename=str(i); +# convert() #for initializing conversion of files + diff --git a/sqlite_version/convert.pyc b/sqlite_version/convert.pyc new file mode 100644 index 0000000..f1282c9 Binary files /dev/null and b/sqlite_version/convert.pyc differ diff --git a/sqlite_version/excelwriter.py b/sqlite_version/excelwriter.py new file mode 100644 index 0000000..d4eef3a --- /dev/null +++ b/sqlite_version/excelwriter.py @@ -0,0 +1,97 @@ +import xlsxwriter +import universal +import logwriter +def init(): #for initializing the xlsx file + universal.workbook = xlsxwriter.Workbook(universal.filename.replace(".pdf","")+".xlsx") + universal.worksheet = universal.workbook.add_worksheet() + headformat = universal.workbook.add_format() + headformat.set_bold() + headformat.set_text_wrap() + universal.worksheet.set_row(0, 60) + universal.worksheet.set_column(0,3,11) + universal.worksheet.set_column(4,4,30) + universal.worksheet.set_column(5,5,20) + universal.worksheet.set_column(6,6,15) + universal.worksheet.set_column(7,8,7) + universal.worksheet.set_column(9,9,12) + universal.worksheet.set_column(10,10,13) + universal.worksheet.set_column(11,12,9) + universal.worksheet.set_column(13,13,15) + universal.worksheet.set_column(14,14,12) + universal.worksheet.set_column(15,17,14) + universal.worksheet.set_column(18,18,11) + universal.worksheet.set_column(19,19,14) + + universal.worksheet.write('A1',"Application No.",headformat) + universal.worksheet.write('B1',"Date of filling of Application",headformat) + universal.worksheet.write('C1',"Publication Date",headformat) + universal.worksheet.write('D1',"Name of Applicant",headformat) + universal.worksheet.write('E1',"Title of Invention",headformat) + universal.worksheet.write('F1',"Name of Inventor(s)",headformat) + universal.worksheet.write('G1',"Abstract",headformat) + universal.worksheet.write('H1',"No. of pages",headformat) + universal.worksheet.write('I1',"No. of claims",headformat) + universal.worksheet.write('J1',"International classification",headformat) + universal.worksheet.write('K1',"Priority Document No.",headformat) + universal.worksheet.write('L1',"Priority Date",headformat) + universal.worksheet.write('M1',"Name of priority country",headformat) + universal.worksheet.write('N1',"International Application No.",headformat) + universal.worksheet.write('O1',"International Application Filling Date",headformat) + universal.worksheet.write('P1',"International Publication No.",headformat) + universal.worksheet.write('Q1',"Patent of addition to Application No.",headformat) + universal.worksheet.write('R1',"Patent of addition to Application No. Filling Date",headformat) + universal.worksheet.write('S1',"Divisional to Application No.",headformat) + universal.worksheet.write('T1',"Divisional to Application No. Filling Date",headformat) + universal.row = 1 + universal.date_format = universal.workbook.add_format({'num_format':'dd mm yyyy'}) + #universal.workbook.close() + + +#inside for loop +def loop() : + try: + universal.worksheet.write(universal.row, 0, universal.data["Application No."]) + universal.worksheet.write(universal.row, 1, universal.data["Date of filing of Application"], universal.date_format) + universal.worksheet.write(universal.row, 2, universal.data["Publication Date"], universal.date_format) + universal.worksheet.write(universal.row, 3, universal.data["Name of Applicant"]) + universal.worksheet.write(universal.row, 4, universal.data["Title of the invention"]) + universal.worksheet.write(universal.row, 5, universal.data["Name of Inventor"]) + universal.worksheet.write(universal.row, 6, universal.data["Abstract"]) + if(universal.data["No. of Pages"].upper()!="NA"): + universal.worksheet.write(universal.row, 7, int(universal.data["No. of Pages"])) + else: + universal.worksheet.write(universal.row, 7, universal.data["No. of Pages"].upper()) + if(universal.data["No. of Claims"].upper()!="NA"): + universal.worksheet.write(universal.row, 8, int(universal.data["No. of Claims"])) + else: + universal.worksheet.write(universal.row, 8, universal.data["No. of Claims"].upper()) + universal.worksheet.write(universal.row, 9, universal.data["International classification"]) + universal.worksheet.write(universal.row, 10, universal.data["Priority Document No"]) + if(universal.data["Priority Date"] == "NA"): + universal.worksheet.write(universal.row, 11, universal.data["Priority Date"]) + else: + universal.worksheet.write(universal.row, 11, universal.data["Priority Date"],universal.date_format) + universal.worksheet.write(universal.row, 12, universal.data["Name of priority country"]) + universal.worksheet.write(universal.row, 13, universal.data["International Application No"]) + if(universal.data["IAFiling Date"] == "NA"): + universal.worksheet.write(universal.row, 14, universal.data["IAFiling Date"]) + else: + universal.worksheet.write(universal.row, 14, universal.data["IAFiling Date"],universal.date_format) + universal.worksheet.write(universal.row, 15, universal.data["International Publication No"]) + universal.worksheet.write(universal.row, 16, universal.data["Patent of Addition to Application Number"]) + if(universal.data["IBFiling Date"] == "NA"): + universal.worksheet.write(universal.row, 17, universal.data["IBFiling Date"]) + else: + universal.worksheet.write(universal.row, 17, universal.data["IBFiling Date"],universal.date_format) + universal.worksheet.write(universal.row, 18, universal.data["Divisional to Application Number"]) + if(universal.data["ICFiling Date"] == "NA"): + universal.worksheet.write(universal.row, 19, universal.data["ICFiling Date"]) + else: + universal.worksheet.write(universal.row, 19, universal.data["ICFiling Date"],universal.date_format) + + universal.row = universal.row + 1 + except Exception as e: + universal.logflag=1 + logwriter.logwrite("Excelfile : "+str(e)+" on page "+str(int(universal.filename)+1)) + + diff --git a/sqlite_version/excelwriter.pyc b/sqlite_version/excelwriter.pyc new file mode 100644 index 0000000..50a9bd7 Binary files /dev/null and b/sqlite_version/excelwriter.pyc differ diff --git a/sqlite_version/extractor.py b/sqlite_version/extractor.py new file mode 100644 index 0000000..bde7be5 --- /dev/null +++ b/sqlite_version/extractor.py @@ -0,0 +1,439 @@ +#confirm identity of WIPO number +#implement sql +#implement a method to find and convert patent files of all year one by one +# -*- coding: utf-8 -*- +import difflib +from collections import namedtuple +import operator +import re +import universal +import logwriter +import unicodedata +pages_tag="No of Pages" #tags for pages and claims in whole file. +claims_tag="No of Claims"#we are using No not No. so that we can match it with No, no, +Pair = namedtuple("Pair", ["start", "end"]) +Tag = namedtuple("Tag",["tag","start","end"]) +Tags=["(21) Application","Address Applicant","(22) Date filing Application","(19) India","(43) Publication Date","(54) Title Invention","(51) International classification","(31) Priority Document","(32) Priority Date","(33) Name priority country","(86) International Application","(87) International Publication","(61) Patent Addition Application","(62) Divisional Application","(71) Name Applicant","(72) Name Inventor","(57) Abstract",pages_tag, claims_tag] +indexvalues = [] +flag={}#flag[tag]=1 implies value to tag has been assigned used in line 194 main usage +data = {} +probability = 0.85 +reslt={} +#removes spaces and lowers the string + +def burst(patent): + words = patent.split() + w = [] + for word in words: + a = word.split(':') + for b in a: + if(b!=""): + w.append(b.strip()) + return w; + +def modify(string): + string="".join(burst(string)).lower() + return string +def lcs(S,T): + m = len(S) + n = len(T) + counter = [[0]*(n+1) for x in range(m+1)] + for i in range(m): + for j in range(n): + if S[i] == T[j]: + counter[i+1][j+1] = counter[i][j]+1 + else: + counter[i+1][j+1]=max(counter[i+1][j],counter[i][j+1]) + return counter[m][n] +def match(word,tag): + word=modify(word) + tag=modify(tag) + sq=lcs(word,tag) + return(float(float(sq)/float(max(len(word),len(tag))))) +#this function locates expression with MINIMUM LENGTH ,similar to tag in fstring having probability atleast p0 +#no restriction on arguments passed can be with or without spaces (as the match function matches the string after modifng it) +def locate(tag,fstring,p0): #return null for Address of applicant + if(tag.find("Address")!=-1): + return (-1,"") +# if(tag.find("International Application")!=-1): +# return (-1,"") +# return (-1,"") + tag=modify(tag) + string="" + for x in fstring: #for converting fstring(which can be a list ) into string + string+=x+" " + #print(tag+" "+string) + p=0.0 + start=0 + end=0 + i=0 + while i p): + p=arr + start=i + end=j + elif(p==arr): + p=arr + if(end-start>=j-i): + start=i + end=j + j+=1 + i+=1 + #print(tag+" "+string[start:end+1]+" "+str(p)) + if (start==0 and end==0) or (p= probability: + arr.append(index) + index = index+1 + return arr; + +def searchtag(words,tag): #returns pair of starting and ending index of a tag in words + tag = tag.lower() + query = tag.split()#query(list) + arr = matches(words,query[0]) #returns list containing indexes of occurence of query[0] in words + index = -1 #start index variable + index1 = -1 #end index variable +# print(query) +# print(words) +# print(arr) + for a in arr: + i=1 + flag = True + while i0): + if(val[0]==':'): + val = val[1:] + if(len(val)>0): + data[indexvalues[p].tag] = val.strip() + else : + data[indexvalues[p].tag] = "NA" + else : + data[indexvalues[p].tag] = "NA" + flag[indexvalues[p].tag]=1 + p = p+1 + val = ' '.join(words[indexvalues[p].end+1:]) + if(len(val)>0 and val[0]==':'): + val = val[1:] + if(bool(val.lower().find("continued")!=-1)&bool(val.lower().find("to")!=-1)&bool(val.lower().find("part")!=-1)): + position = val.lower().find("continued") + val = val[:position] + data[indexvalues[p].tag] = val.strip() + flag[indexvalues[p].tag] = 1 + if(flag[pages_tag]==0): + data[pages_tag] = "NA" + if(flag[claims_tag]==0): + data[claims_tag] = "NA" + for tag in data: + if(bool(data[tag]=="")|bool(data[tag]=="na")|bool(data[tag]=="n.a.")|bool(data[tag].lower()=="nil")): + data[tag]="NA" + if(is_ascii(data[tag])==False): + data[tag] = transformunicode(data[tag]) + data[tag] = formatval(data[tag]) + #if(flag["(21) Application"]!=1): + data["(21) Application"] = formatdocumentno(data["(21) Application"]) + #if(flag["(31) Priority Document"]!=1): + data["(31) Priority Document"] = formatdocumentno(data["(31) Priority Document"]) + #if(flag["(87) International Publication"]!=1): + data["(87) International Publication"] = formatdocumentno(data["(87) International Publication"]) + #if(flag["(61) Patent Addition Application"]): + data["(61) Patent Addition Application"] = formatfilingno(data["(61) Patent Addition Application"],"(61) Patent Addition Application") + #if(flag["(62) Divisional Application"]!=1): + data["(62) Divisional Application"] = formatfilingno(data["(62) Divisional Application"],"(62) Divisional Application") + #if(flag["(86) International Application"]!=1): + data["(86) International Application"] = formatfilingno(data["(86) International Application"],"(86) International Application") + data["(54) Title Invention"] = formatstring(data["(54) Title Invention"]) + # if(flag["(57) Abstract"]!=1): + data["(57) Abstract"] = formatabstract(data["(57) Abstract"]) + data["(32) Priority Date"] = formatdate(data["(32) Priority Date"]) + data["(43) Publication Date"] = formatdate(data["(43) Publication Date"]) + data["(22) Date filing Application"] = formatdate(data["(22) Date filing Application"]) + #data["(87) WIPO"]=formatdocumentno(data["(87) WIPO"]) + #if(data["(87) International Publication"]=="NA"): #assuming WIPO=International publication + data["(87) International Publication"]=formatdocumentno(data["(87) International Publication"]) + #if(flag["(21) Application"]!=1): + universal.data["Application No."] = data["(21) Application"] + #if(flag["(22) Date filing Application"]!=1): + universal.data["Date of filing of Application"] = data["(22) Date filing Application"] + #if(flag["(43) Publication Date"]!=1): + universal.data["Publication Date"] = data["(43) Publication Date"] + #if(flag["(71) Name Applicant"]!=1): + universal.data["Name of Applicant"] = formatstring(data["(71) Name Applicant"]) +" Address of Applicant : " + formatstring(data["Address Applicant"]) + #if(flag["(54) Title invention"]!=1): + universal.data["Title of the invention"] = data["(54) Title Invention"] + #if(flag["(72) Name Inventor"]!=1): + universal.data["Name of Inventor"] = formatstring(data["(72) Name Inventor"]) + #if(flag["(57) Abstract"]!=1): + universal.data["Abstract"] = data["(57) Abstract"] + #if(flag[pages_tag]!=1): + universal.data["No. of Pages"] = data[pages_tag] + #if(flag[claims_tag]!=1): + universal.data["No. of Claims"] = data[claims_tag] + #if(flag["(51) International classification"]!=1): + universal.data["International classification"] = data["(51) International classification"] + #if(flag["(31) Priority Document"]!=1): + universal.data["Priority Document No"] = data["(31) Priority Document"] + #if(flag["(32) Priority Date"]!=1): + universal.data["Priority Date"] = data["(32) Priority Date"] + #if(flag["(33) Name priority country"]!=1): + universal.data["Name of priority country"] = data["(33) Name priority country"] + #if(flag["(86) International Application"]!=1): + universal.data["International Application No"] = data["(86) International Application"] + # if(flag["(86) International Application Filing Date"]!=1): + universal.data["IAFiling Date"] = data["(86) International Application Filing Date"] + #if(flag["(87) International Publication"]!=1): + universal.data["International Publication No"] = data["(87) International Publication"] + #if(flag["(61) Patent Addition Application"]!=1): + universal.data["Patent of Addition to Application Number"] = data["(61) Patent Addition Application"] + # if(flag["(61) Patent Addition Application Filing Date"]!=1): + universal.data["IBFiling Date"] = data["(61) Patent Addition Application Filing Date"] + #if(flag["(62) Divisional Application"]!=1): + universal.data["Divisional to Application Number"] = data["(62) Divisional Application"] + # if(flag["(62) Divisional Application Filing Date"]!=1): + universal.data["ICFiling Date"] = data["(62) Divisional Application Filing Date"] + +def getdetails(new_patent):#new_patent must have spaces b/w consecutive words + patent="" + data.clear() + flag.clear() + del indexvalues[:] + for j in range (0,len(new_patent)): + if(new_patent[j]=='('): + if(new_patent[j+1].isdigit()): + patent+=" (" + elif(new_patent[j]==')'): + if(new_patent[j-1].isdigit()): + patent+=") " + else: + patent+=new_patent[j] + temp_patent = patent #temp_patent is the original string with capital letters + patent = patent.lower() + words = burst(patent)#word(list) contains lower letter string + if(check(words)==True):#check checks if pdf has patent + tagindex=0 + for tag in Tags: + flag[tag]=0#flag[tag]=1 implies value to tag has been assigned + pages,claims = getnoofpagesandclaims(words) #here we are going to give values to no of pages and no of claims tags and insert the starting and ending index in indexvalues + if(bool(pages.start!=-1) & bool(pages.end!=-1)): + indexvalues.append(Tag(pages_tag,pages.start,pages.end))#flag has been asigned 1 already in getnoofpagesandclaims + if(bool(claims.start!=-1) & bool(claims.end!=-1)): + indexvalues.append(Tag(claims_tag,claims.start,claims.end))#flag has been asigned 1 already in getnoofpagesandclaims + + while tagindex', (lambda event, e=ents: fetch(e))) + b1 = Button(root, text='Show', + command=(lambda e=ents: fetch(e))) + b1.pack(side=LEFT, padx=5, pady=5) + b2 = Button(root, text='Quit', command=root.quit) + b2.pack(side=LEFT, padx=5, pady=5) + root.mainloop() diff --git a/sqlite_version/test.pyc b/sqlite_version/test.pyc new file mode 100644 index 0000000..f956352 Binary files /dev/null and b/sqlite_version/test.pyc differ diff --git a/sqlite_version/universal.py b/sqlite_version/universal.py new file mode 100644 index 0000000..c064946 --- /dev/null +++ b/sqlite_version/universal.py @@ -0,0 +1,41 @@ +#file containing global variables +import os +def init(): + global tag #records the name of the keys in data dictionary + tag=["Application No.","Date of filing of Application","Publication Date","Name of Applicant","Title of the invention","Name of Inventor","Abstract","No. of Pages","No. of Claims","International classification","Priority Document No","Priority Date","Name of priority country","International Publication No","International Application No","IAFiling Date","Patent of Addition to Application Number","IBFiling Date","Divisional to Application Number","ICFiling Date"] + global dbname + dbname = "patents" + global tablename + tablename = "patent_tables" + global host + host = "127.0.0.1" + global user + user = "root" + global password + password = "123" + global data + data={} + global tree + global con +# global test +# test=[] + global datastring + datastring="" + global filename #filename of pdf file containing patents + filename="15" + global current_dir + current_dir=os.getcwd() #In future use in-built python function which is platform independent. + global pdf_folder #name of folder containing pdf burst files + pdf_folder="3" + global tag_folder #name of folder containing tag-html file + tag_folder="tag_folder" + global workbook + global worksheet + global date_format + global row #row counter + global flag #Flag for process of extraction has started or not + flag=0 + global logfile#filename is set to universal.logfile.txt + logfile="" + global logflag #for knowing whether something was written to log file or not + logflag = 0 diff --git a/sqlite_version/universal.pyc b/sqlite_version/universal.pyc new file mode 100644 index 0000000..b4e6e97 Binary files /dev/null and b/sqlite_version/universal.pyc differ diff --git a/xlsx_meger/browser.py b/xlsx_meger/browser.py new file mode 100644 index 0000000..6796140 --- /dev/null +++ b/xlsx_meger/browser.py @@ -0,0 +1,6 @@ +import Tkinter,tkFileDialog +def browse(): + root = Tkinter.Tk() + root.withdraw() + filez = tkFileDialog.askopenfilenames(parent=root,title='Choose a file',filetypes = (("excel files","*.xlsx"),("all files","*.*"))) + return root.tk.splitlist(filez) diff --git a/xlsx_meger/browser.pyc b/xlsx_meger/browser.pyc new file mode 100644 index 0000000..6392a84 Binary files /dev/null and b/xlsx_meger/browser.pyc differ diff --git a/xlsx_meger/controller.py b/xlsx_meger/controller.py new file mode 100644 index 0000000..57628f0 --- /dev/null +++ b/xlsx_meger/controller.py @@ -0,0 +1,28 @@ +import universal +import browser +import merger +from shutil import copyfile +import os +#import test +universal.init() +merger.init() +files=browser.browse() +for _file in files : + #main.run_command("cp "+str(_file)+" "+universal.current_dir) + src=str(_file) + universal.filename="" + temp=len(_file)-1 + while _file[temp]!="/": + universal.filename=_file[temp]+universal.filename + temp-=1 + universal.filename = "copy"+universal.filename + dst=str(universal.current_dir+'/'+str(universal.filename)) + try: + copyfile(src,dst) + except e as Exception: + print(str(e)+" for file "+str(universal.filename)) + merger.readfile() + os.remove(tempfile) + os.remove(_file) +universal.workbook.close() + diff --git a/xlsx_meger/copyapr 1.xlsx b/xlsx_meger/copyapr 1.xlsx new file mode 100644 index 0000000..9fa5075 Binary files /dev/null and b/xlsx_meger/copyapr 1.xlsx differ diff --git a/xlsx_meger/copycopyapr 1.xlsx b/xlsx_meger/copycopyapr 1.xlsx new file mode 100644 index 0000000..9fa5075 Binary files /dev/null and b/xlsx_meger/copycopyapr 1.xlsx differ diff --git a/xlsx_meger/main.pyc b/xlsx_meger/main.pyc new file mode 100644 index 0000000..d6feea3 Binary files /dev/null and b/xlsx_meger/main.pyc differ diff --git a/xlsx_meger/merger.py b/xlsx_meger/merger.py new file mode 100644 index 0000000..52f4513 --- /dev/null +++ b/xlsx_meger/merger.py @@ -0,0 +1,123 @@ +#first write before the loop - init() +#then use - readfile() +#after ending of loop write outside the loop - universal.workbook.close() +import xlsxwriter +import openpyxl +from openpyxl import Workbook +import universal + +def init(): #for initializing the xlsx file + fname =str(input("Enter year name(without extension) : ")) + universal.workbook = xlsxwriter.Workbook(fname+".xlsx") + universal.worksheet = universal.workbook.add_worksheet() + headformat = universal.workbook.add_format() + headformat.set_bold() + headformat.set_text_wrap() + universal.worksheet.set_row(0, 60) + universal.worksheet.set_column(0,3,11) + universal.worksheet.set_column(4,4,30) + universal.worksheet.set_column(5,5,20) + universal.worksheet.set_column(6,6,15) + universal.worksheet.set_column(7,8,7) + universal.worksheet.set_column(9,9,12) + universal.worksheet.set_column(10,10,13) + universal.worksheet.set_column(11,12,9) + universal.worksheet.set_column(13,13,15) + universal.worksheet.set_column(14,14,12) + universal.worksheet.set_column(15,17,14) + universal.worksheet.set_column(18,18,11) + universal.worksheet.set_column(19,19,14) + + universal.worksheet.write('A1',"Application No.",headformat) + universal.worksheet.write('B1',"Date of filling of Application",headformat) + universal.worksheet.write('C1',"Publication Date",headformat) + universal.worksheet.write('D1',"Name of Applicant",headformat) + universal.worksheet.write('E1',"Title of Invention",headformat) + universal.worksheet.write('F1',"Name of Inventor(s)",headformat) + universal.worksheet.write('G1',"Abstract",headformat) + universal.worksheet.write('H1',"No. of pages",headformat) + universal.worksheet.write('I1',"No. of claims",headformat) + universal.worksheet.write('J1',"International classification",headformat) + universal.worksheet.write('K1',"Priority Document No.",headformat) + universal.worksheet.write('L1',"Priority Date",headformat) + universal.worksheet.write('M1',"Name of priority country",headformat) + universal.worksheet.write('N1',"International Application No.",headformat) + universal.worksheet.write('O1',"International Application Filling Date",headformat) + universal.worksheet.write('P1',"International Publication No.",headformat) + universal.worksheet.write('Q1',"Patent of addition to Application No.",headformat) + universal.worksheet.write('R1',"Patent of addition to Application No. Filling Date",headformat) + universal.worksheet.write('S1',"Divisional to Application No.",headformat) + universal.worksheet.write('T1',"Divisional to Application No. Filling Date",headformat) + universal.row = 1 + universal.date_format = universal.workbook.add_format({'num_format':'dd mm yyyy'}) + #universal.workbook.close() + + +#inside for loop +def loop() : + universal.worksheet.write(universal.row, 0, universal.data["Application No."]) + universal.worksheet.write(universal.row, 1, universal.data["Date of filing of Application"], universal.date_format) + universal.worksheet.write(universal.row, 2, universal.data["Publication Date"], universal.date_format) + universal.worksheet.write(universal.row, 3, universal.data["Name of Applicant"]) + universal.worksheet.write(universal.row, 4, universal.data["Title of the invention"]) + universal.worksheet.write(universal.row, 5, universal.data["Name of Inventor"]) + universal.worksheet.write(universal.row, 6, universal.data["Abstract"]) + if(universal.data["No. of Pages"].upper()!="NA"): + universal.worksheet.write(universal.row, 7, int(universal.data["No. of Pages"])) + else: + universal.worksheet.write(universal.row, 7, universal.data["No. of Pages"].upper()) + if(universal.data["No. of Claims"].upper()!="NA"): + universal.worksheet.write(universal.row, 8, int(universal.data["No. of Claims"])) + else: + universal.worksheet.write(universal.row, 8, universal.data["No. of Claims"].upper()) + universal.worksheet.write(universal.row, 9, universal.data["International classification"]) + universal.worksheet.write(universal.row, 10, universal.data["Priority Document No"]) + if(universal.data["Priority Date"] == "NA"): + universal.worksheet.write(universal.row, 11, universal.data["Priority Date"]) + else: + universal.worksheet.write(universal.row, 11, universal.data["Priority Date"],universal.date_format) + universal.worksheet.write(universal.row, 12, universal.data["Name of priority country"]) + universal.worksheet.write(universal.row, 13, universal.data["International Application No"]) + if(universal.data["IAFiling Date"] == "NA"): + universal.worksheet.write(universal.row, 14, universal.data["IAFiling Date"]) + else: + universal.worksheet.write(universal.row, 14, universal.data["IAFiling Date"],universal.date_format) + universal.worksheet.write(universal.row, 15, universal.data["International Publication No"]) + universal.worksheet.write(universal.row, 16, universal.data["Patent of Addition to Application Number"]) + if(universal.data["IBFiling Date"] == "NA"): + universal.worksheet.write(universal.row, 17, universal.data["IBFiling Date"]) + else: + universal.worksheet.write(universal.row, 17, universal.data["IBFiling Date"],universal.date_format) + universal.worksheet.write(universal.row, 18, universal.data["Divisional to Application Number"]) + if(universal.data["ICFiling Date"] == "NA"): + universal.worksheet.write(universal.row, 19, universal.data["ICFiling Date"]) + else: + universal.worksheet.write(universal.row, 19, universal.data["ICFiling Date"],universal.date_format) + universal.row = universal.row + 1 + +def readfile(): + wb = openpyxl.load_workbook(universal.filename) + ws = wb.active + for row in range(1,ws.max_row): + universal.data["Application No."] = ws['A'+str(row)] + universal.data["Date of filing of Application"] = ws['B'+str(row)] + universal.data["Publication Date"] = ws['C'+str(row)] + universal.data["Name of Applicant"] = ws['D'+str(row)] + universal.data["Title of the invention"] = ws['E'+str(row)] + universal.data["Name of Inventor"] = ws['F'+str(row)] + universal.data["Abstract"] = ws['G'+str(row)] + universal.data["No. of Pages"] = ws['H'+str(row)] + universal.data["No. of Claims"] = ws['I'+str(row)] + universal.data["International classification"] = ws['J'+str(row)] + universal.data["Priority Document No"] = ws['K'+str(row)] + universal.data["Priority Date"] = ws['L'+str(row)] + universal.data["Name of priority country"] = ws['M'+str(row)] + universal.data["International Application No"] = ws['N'+str(row)] + universal.data["IAFiling Date"] = ws['O'+str(row)] + universal.data["International Publication No"] = ws['P'+str(row)] + universal.data["Patent of Addition to Application Number"] = ws['Q'+str(row)] + universal.data["IBFiling Date"] = ws['R'+str(row)] + universal.data["Divisional to Application Number"] = ws['S'+str(row)] + universal.data["ICFiling Date"] = ws['T'+str(row)] + loop() + wb.close() diff --git a/xlsx_meger/merger.pyc b/xlsx_meger/merger.pyc new file mode 100644 index 0000000..1b489ef Binary files /dev/null and b/xlsx_meger/merger.pyc differ diff --git a/xlsx_meger/universal.py b/xlsx_meger/universal.py new file mode 100644 index 0000000..c064946 --- /dev/null +++ b/xlsx_meger/universal.py @@ -0,0 +1,41 @@ +#file containing global variables +import os +def init(): + global tag #records the name of the keys in data dictionary + tag=["Application No.","Date of filing of Application","Publication Date","Name of Applicant","Title of the invention","Name of Inventor","Abstract","No. of Pages","No. of Claims","International classification","Priority Document No","Priority Date","Name of priority country","International Publication No","International Application No","IAFiling Date","Patent of Addition to Application Number","IBFiling Date","Divisional to Application Number","ICFiling Date"] + global dbname + dbname = "patents" + global tablename + tablename = "patent_tables" + global host + host = "127.0.0.1" + global user + user = "root" + global password + password = "123" + global data + data={} + global tree + global con +# global test +# test=[] + global datastring + datastring="" + global filename #filename of pdf file containing patents + filename="15" + global current_dir + current_dir=os.getcwd() #In future use in-built python function which is platform independent. + global pdf_folder #name of folder containing pdf burst files + pdf_folder="3" + global tag_folder #name of folder containing tag-html file + tag_folder="tag_folder" + global workbook + global worksheet + global date_format + global row #row counter + global flag #Flag for process of extraction has started or not + flag=0 + global logfile#filename is set to universal.logfile.txt + logfile="" + global logflag #for knowing whether something was written to log file or not + logflag = 0 diff --git a/xlsx_meger/universal.pyc b/xlsx_meger/universal.pyc new file mode 100644 index 0000000..5e2262d Binary files /dev/null and b/xlsx_meger/universal.pyc differ