레이블이 paper인 게시물을 표시합니다. 모든 게시물 표시
레이블이 paper인 게시물을 표시합니다. 모든 게시물 표시

2008-01-07

PDF 논문 목록 만들기

연구업무를 하다보면 논문을 살펴볼 일이 많은 것 같습니다.
특히 초기단계에는 더 많지요.
이 때 저는 다음과 같은 과정을 통해서 조사를 합니다.

  1. 처음에 조사할 분야의 적당한 용어를 선택해서 논문 검색
  2. 다운로드 받은 논문들을 읽어보고 중요논문 선택
  3. 중요논문에서 참고한 문헌들 다시 조사
  4. 중요논문을 읽고 조사할 분야의 보다 적합한 검색 키워드 선정
  5. 새로운 키워드로 1번 부터 반복
여기서 2번 과정에서 항상 다운로드 받은 pdf 논문 파일들을 일일이 열어보는 과정을 해야하는데요. 이 과정이 은근히 귀찮아서 스크립트를 만들어봤습니다.
특정 디렉토리를 지정하면 그 디렉토리의 모든 하위 디렉토리에 있는 pdf 파일들의 파일명, 제목과 abstract의 목록을 만듭니다. 파일명에는 해당 파일로의 링크를 걸어서 보기 편하게 만들었습니다.
단점은 현재는 IEEE 2-column 형식만 지원한다는 것입니다. 그래도 대부분의 논문이 이 형식을 지원합니다.
필요하신 분들 가져다가 유용하게 쓰세요(xpdf 툴킷 중 pdftotext.exe가 아래 python 스크립트와 같은 디렉토리에 있어야 합니다).
다른 형식을 지원하게 되었거나 향상된 점은 저에게도 알려주시구요.
# -*- coding: cp949 -*-

# Usage: "python pdflist.py starting_directory_path output_filename"
# This script find the pdf files recursively from starting_directory_path and
# get the title and the abstract of the file and build the list in HTML table.
#
# Written by guldook. 2008.1.6.
# You must let me know any changes you did (guldook at gmail)

import os, string, tempfile
import sys

def get_text(filename,start=0,end=0):
try:
cmd = "pdftotext.exe -f %d -l %d -enc UTF-8 %s -" % (start, end, filename)
f = os.popen(cmd)
text = f.read()
err = f.close()
if err is not None:
print 'unable to read %s' % filename
raise IOError
except IOError:
pass
except:
raise Exception,'unable to execute pdftotext'
return text

# paper must be formatted by IEEE 8.5 x 11-inch Proceedings Manuscripts, IEEE 2-column format
# refer http://www.computer.org/portal/site/cscps/menuitem.02df7cde46985ea21618fc2e6bcd45f3/index.jsp?&pName=cscps_level1&path=cscps/cps/final&file=wi06.xml&xsl=generic.xsl&
# I need to extend to other format

def get_info(fname):

title,abstract = None, None

try:
s = get_text(fname, 0, 10)

# get the index of 'Introduction' section
idx_abstract = s.index('Abstract')

# get the index of 'Introduction' section
idx_intro = s.index('Introduction')

title = s[:s.index('\n')]
abstract = " ".join(s[idx_abstract+len('Abstract'):idx_intro].split()).replace('\n','').replace(', ',' ')
title = '"' + title + '"'
abstract = '"' + abstract + '"'

except (IOError, ValueError):
raise
finally: return title,abstract

header = "<html>\n<title>%s directory pdf file summary</title>\n<body>\n<table>\n<tr><td>Link</td><td>Title</td><td>Abstract</td>\n"
footer = "</table></body>\n</html>"

def get_pdflist(path, outfn):

numlist = 0
f = open(outfn, "w+")
f.write(header % os.path.abspath(path))

for root, dirs, files in os.walk(path):
for fname in files:
if fname.endswith('.pdf'):
try:
title, abstract = get_info(os.path.join(root, fname))
if (title and abstract):
line = "<tr><td>"
link = "".join(['<a href="file:///', os.path.join(os.path.abspath(root), fname), '">', fname, '</a>'])
line += "</td><td>".join([link, title, abstract])
line += "</td></tr>"
f.write(line+"\n")
numlist += 1
except IOError, ValueError:
## line = ", ".join([fname, "N/A", "It must be standard IEEE 2-column format"])
## f.write(line+"\n")
continue
f.write(footer)
f.close()

if __name__ == '__main__':
if len(sys.argv) == 1:
get_pdflist('./test', "./pdflist.html")
elif len(sys.argv) != 3: print "Usage: pdflist.py start_path output_filename"
else : get_pdflist(sys.argv[1], sys.argv[2])

2007-03-31

A Password Stretching Method with User Specific Salts



WWW2007 논문들이 공개되었습니다.

제가 제출한 논문은 쉬운 패스워드로부터 어려운 패스워드를 만들어내는 방법인 Password Stretching에 관한 것입니다.



기존의 방법들은 모두 레인보우 테이블을 사용한 공격에 약한데요, 이것을 극복하는 방법에 관한 것입니다.

관심있는 분들이 많을 지는 모르겠지만, 필요하신 분들은 참고하십시오.

2006-11-15

패스워드 강화 및 피싱관련 논문


이번에 논문쓰면서 참고했던 논문리스트입니다. 참고하시고, 도움이 될만한 다른 논문이 있으면 코멘트로 추가해주세요.

2006-11-09

패스워드 강화방법

이번에 정보처리학회 추계학술발표대회에 논문을 발표하게 되었습니다.
패스워드 강화방법이란 하나의 약한 패스워드로부터 강한 패스워드를 생성하는 방법입니다.

대부분의 사용자들이 여러 웹 사이트에 동일한 패스워드를 사용하는 데, 이러한 점을 악용하여 보안이 낮은 사이트를 공격하여 얻는 패스워드를 다른 사이트를 공격하는 데 사용할 수 있습니다.
이러한 공격을 막기 위한 방법이 패스워드 강화방법(Password Stretching method)입니다.

제가 제안한 방법은 사용자들이 가지고 있는 매체(신용카드, 신분증)의 정보를 이용하여 salting을 하는 방법입니다.

앞으로 브라우저 확장모듈에 붙이고, 영문으로 작성해서 WWW2007에 포스터를 내보려고 합니다.