]> www.fi.muni.cz Git - pan12-paper.git/commitdiff
First submitted version. submitted-first-version
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Fri, 22 Jun 2012 14:32:39 +0000 (16:32 +0200)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Fri, 22 Jun 2012 14:32:39 +0000 (16:32 +0200)
TODO: shorten it, write about post-processing

extended-abstract.pdf [new file with mode: 0644]
extended-abstract.tex
paper.bib [new file with mode: 0644]
splncs03.bst [new file with mode: 0644]

diff --git a/extended-abstract.pdf b/extended-abstract.pdf
new file mode 100644 (file)
index 0000000..6f5cd39
Binary files /dev/null and b/extended-abstract.pdf differ
index 301338d5982c9d3735f5d46e09d6c62c6a9e01da..0ecfb48dfd857b47dc90b70f677eea95cf20963f 100644 (file)
 
 \maketitle
 
-- odkaz na predchozi prace
+\section{General Approach}
 
-- parametry ktere jsme pouzili
+The approach Masaryk University team has used in PAN 2012 Plagiarism
+detection---detailed comparison sub-task is based on the same approach
+that we have used in PAN 2010 \cite{Kasprzak2010}.  This time, we have
+used a similar approach, enhanced by several means
 
-- multi-features
+The algorithm evaluates the document pair in several stages:
 
-- post-processing
+\begin{itemize}
+\item intrinsic plagiarism detection
+\item language detection of the source document
+\begin{itemize}
+\item cross-lingual plagiarism detection, if the source document is not in English
+\end{itemize}
+\item detecting intervals with common features
+\item post-processing phase, mainly serves for merging the nearby common intervals
+\end{itemize}
 
-- kritika plagdet?
+\section{Intrinsic plagiarism detection}
+
+Our approach is based on character $n$-gram profiles of the interval of
+the fixed size (in terms of $n$-grams), and their differences to the
+profile of the whole document \cite{pan09stamatatos}. We have further
+enhanced the approach with using gaussian smoothing of the style-change
+function \cite{Kasprzak2010}.
+
+For PAN 2012, we have experimented with using 1-, 2-, and 3-grams instead
+of only 3-grams, and using the different measure of the difference between
+the n-gram profiles. We have used an approach similar to \cite{ngram},
+where we have compute the profile as an ordered set of 400 most-frequent
+$n$-grams in a given text (the whole document or a partial window). Apart
+from ordering the set we have ignored the actual number of occurrences
+of a given $n$-gram altogether, and used the value inveresly
+proportional to the $n$-gram order in the profile, in accordance with
+the Zipf's law \cite{zipf1935psycho}.
+
+This approach has provided more stable style-change function than
+than the one proposed in \cite{pan09stamatatos}. Because of pair-wise
+nature of the detailed comparison sub-task, we couldn't use the results
+of the intrinsic detection immediately, so we wanted to use them
+as hints to the external detection.
+
+\section{Cross-lingual detection}
+
+%For language detection, we used the $n$-gram based categorization \cite{ngram}.
+%We have computed the language profiles from the source documents of the
+%training corpus (using the annotations from the corpus itself). The result
+%of this approach was better than using the stopwords-based detection we have
+%used in PAN 2010. However, there were still mis-detected documents,
+%mainly the long lists of surnames and other tabular data. We have added
+%an ad-hoc fix, where for documents having their profile too distant from all of
+%English, German, and Spanish profiles, we have declared them to be in English.
+
+For cross-lingual plagiarism detection, our aim was to use the public
+interface to Google translate if possible, and use the resulting document
+as the source for standard intra-lingual detector.
+Should the translation service not be available, we wanted
+to use the fall-back strategy of translating isolated words only,
+with the additional exact matching of longer words (we have used words with
+5 characters or longer).
+We have supposed these longer words can be names or specialized terms,
+present in both languages.
+
+We have used dictionaries from several sources, like
+{\tt dicts.info\footnote{\url{http://www.dicts.info/}}},
+{\tt omegawiki\footnote{\url{http://www.omegawiki.org/}}},
+and {\tt wiktionary\footnote{\url{http://en.wiktionary.org/}}}. The source
+and translated document were aligned on a line-by-line basis.
+
+In the final form of the detailed comparison sub-task, the results of machine
+translation of the source documents were provided to the detector programs
+by the surrounding environment, so we have discarded the language detection
+and machine translation from our submission altogether, and used only
+line-by-line alignment of the source and translated document for calculating
+the offsets of text features in the source document.
+
+\section{Multi-feature Plagiarism Detection}
+
+Our pair-wise plagiarism detection is based on finding common passages
+of text, present both in the source and suspicious document. We call them
+{\it features}. In PAN 2010, we have used sorted word 5-grams, formed from
+words of three or more characters, as features to compare.
+Recently, other means of plagiarism detection have been explored:
+Stop-word $n$-gram detection is one of them
+\cite{stamatatos2011plagiarism}.
+
+We propose the plagiarism detection system based on detecting common
+features of various type, like word $n$-grams, stopword $n$-grams,
+translated words or word bigrams, exact common longer words from document
+pairs having each document in a different language, etc. The system
+has to be to the great extent independent of the specialities of various
+feature types. It cannot, for example, use the order of given features
+as a measure of distance between the features, as for example, several
+word 5-grams can be fully contained inside one stopword 8-gram.
+
+We thus define {\it common feature} of two documents (susp and src)
+as the following tuple:
+$$\langle
+\hbox{offset}_{\hbox{susp}},
+\hbox{length}_{\hbox{susp}},
+\hbox{offset}_{\hbox{src}},
+\hbox{length}_{\hbox{src}} \rangle$$
+
+In our final submission, we have used only the following two types
+of common features:
+
+\begin{itemize}
+\item word 5-grams, from words of three or more characters, sorted, lowercased
+\item stop-word 8-grams, from 50 most-frequent English words (including
+       the possessive suffix 's), unsorted, lowercased, with 8-grams formed
+       only from the seven most-frequent words ({\it the, of, a, in, to, 's})
+       removed
+\end{itemize}
+
+We have gathered all the common features for a given document pair, and formed
+{\it valid intervals} from them, as described in \cite{Kasprzak2009a}
+(a similar approach is used also in \cite{stamatatos2011plagiarism}).
+The algorithm is modified for multi-feature detection to use character offsets
+only instead of feature order numbers. We have used valid intervals
+consisting of at least 5 common features, with the maximum allowed gap
+inside the interval (characters not belonging to any common feature
+of a given valid interval) set to 3,500 characters.
+
+We have also experimented with modifying the allowed gap size using the
+intrinsic plagiarism detection: to allow only shorter gap if the common
+features around the gap belong to different passages, detected as plagiarized
+in the suspicious document by the intrinsic detector, and allow larger gap,
+if both the surrounding common features belong to the same passage,
+detected by the intrinsic detector. This approach, however, did not show
+any improvement against allowed gap of a static size, so it was omitted
+from the final submission.
+
+\section{Postprocessing}
+
+
+\section{Further discussion}
+
+In the full paper, we will also discuss the following topics:
+
+\begin{itemize}
+\item language detection
+\item suitability of plagdet score\cite{potthastframework} for performance measurement
+\item feasibility of our approach in large-scale systems
+\item other possible features to use, especially for cross-lingual detection
+\item discussion of parameter settings
+\end{itemize}
 
 \bibliographystyle{splncs03}
 \begin{raggedright}
-\bibliography{}
+\bibliography{paper}
 \end{raggedright}
 
 \end{document}
diff --git a/paper.bib b/paper.bib
new file mode 100644 (file)
index 0000000..c4e9b52
--- /dev/null
+++ b/paper.bib
@@ -0,0 +1,436 @@
+\r
+@INPROCEEDINGS{Kasprzak2008,\r
+  AUTHOR =       "Jan Kasprzak and Michal Brandejs and Miroslav K\v{r}ipa\v{c} and Pavel {\v S}merk",\r
+  TITLE =        "Distributed System for Discovering Similar Documents",\r
+  SUBTITLE =     "From a Relational Database to the Custom-Developed Parallel solution",\r
+  BOOKTITLE =    "ICEIS 2008: Proceedings of the Tenth International Conference on Enterprise Information Systems, Vol. DISI---Databases and Informations Systems Integration",\r
+  YEAR =         "2008",\r
+  publisher =    "INSTICC (Institute for Systems and Technologies of Information, Control and Communication), Setúbal, Portugal",\r
+  pages = "437--440",\r
+  isbn =         "978-989-8111-36-4",\r
+  file = F\r
+}\r
+\r
+@INPROCEEDINGS{Kasprzak2009,\r
+  AUTHOR =       "Jan Kasprzak and Michal Brandejs and Jitka Brandejsová",\r
+  TITLE =        "Distributed Aspects of the System for Discovering Similar Documents",\r
+  BOOKTITLE =    "ITA 09: Proceedings of the Third International Conference on Internet Technology and Applications",\r
+  YEAR =         "2009",\r
+  file = F\r
+}\r
+\r
+@INPROCEEDINGS{Kasprzak2009a,\r
+  AUTHOR =       "Jan Kasprzak and Michal Brandejs and Miroslav Křipač",\r
+  TITLE =        "Finding Plagiarism by Evaluating Document Similarities",\r
+  BOOKTITLE =    "SEPLN'09: The 25th edition of the Annual Conference of the Spanish Society for Natural Language Processing",\r
+  YEAR =         "2009",\r
+  file = F\r
+}\r
+\r
+@INPROCEEDINGS{Monostori2002,\r
+ author = {Kriszti\'{a}n Monostori and Raphael A. Finkel and Arkady B. Zaslavsky and G\'{a}bor Hod\'{a}sz and M\'{a}t\'{e} Pataki},\r
+ title = {Comparison of Overlap Detection Techniques},\r
+ booktitle = {ICCS '02: Proceedings of the International Conference on Computational Science-Part I},\r
+ year = {2002},\r
+ isbn = {3-540-43591-3},\r
+ pages = {51--60},\r
+ publisher = {Springer-Verlag},\r
+ address = {London, UK},\r
+ }\r
+\r
+@MISC{theses.cz,\r
+  key = {Theses.CZ},\r
+  title = "{Czech National Archive of Graduate Theses}",\r
+  howpublished = "\url{http://theses.cz/}",\r
+  year = "2008--2011",\r
+}\r
+\r
+@MISC{ismu,\r
+  key = "{IS MU}",\r
+  title = "{Masaryk University Information System}",\r
+  howpublished = "\url{http://is.muni.cz/}",\r
+  year = "1999--2011",\r
+}\r
+\r
+@MISC{odevzdej.cz,\r
+  key = "{Odevzdej.CZ}",\r
+  title = "{Odevzdej---the system for collecting seminar works}",\r
+  howpublished = "\url{http://odevzdej.cz/}",\r
+  year = "2009--2011",\r
+}\r
+\r
+\r
+@inproceedings{finkel2002,\r
+ author = {Finkel, Raphael A. and Zaslavsky, Arkady and Monostori, Kriszti\'{a}n and Schmidt, Heinz},\r
+ title = {Signature extraction for overlap detection in documents},\r
+ booktitle = {ACSC '02: Proceedings of the twenty-fifth Australasian conference on Computer science},\r
+ year = {2002},\r
+ isbn = {0-909925-82-8},\r
+ pages = {59--64},\r
+ location = {Melbourne, Victoria, Australia},\r
+ publisher = {Australian Computer Society, Inc.},\r
+ address = {Darlinghurst, Australia},\r
+ }\r
+\r
+@INPROCEEDINGS{broder97,\r
+title={On the resemblance and containment of documents},\r
+author={Broder, A.Z.},\r
+booktitle={Compression and Complexity of Sequences 1997. Proceedings},\r
+year={1997},\r
+month={Jun},\r
+volume={},\r
+number={},\r
+pages={21-29},\r
+keywords={information retrieval, random processes, set theoryRabin fingerprints, World Wide Web, containment, documents, fixed size sample, informal notions, information retrieval, intersection problems, mathematical notions, mathematical properties, random sampling, resemblance, roughly contained, roughly the same},\r
+doi={10.1109/SEQUEN.1997.666900},\r
+ISSN={}, }\r
+\r
+\r
+@ARTICLE{RFC1321,\r
+ author="{Rivest, R.}",\r
+ title="{RFC1321: The MD5 Message-Digest Algorithm}",\r
+ year = {1992},\r
+ publisher = {RFC Editor},\r
+ address = {United States},\r
+ note={\url{http://www.rfc-editor.org/rfc/rfc1321.txt}},\r
+ }\r
+\r
+@Misc{britannicaplagiarism,\r
+  author     =          "Encyclop\ae{}dia Britannica",\r
+  title      =          "Plagiarism",\r
+  howpublished = "retrieved 2009--08--24 from \url{http://www.britannica.com/EBchecked/topic/462640/plagiarism}",\r
+  year = 2009\r
+}\r
+\r
+@Misc{idneszlin,\r
+  author     =          "iDnes.CZ",\r
+  title      =          "Zlínského děkana usvědčili z plagiátorství",\r
+  howpublished = "retrieved 2009--08--25 from \url{http://zpravy.idnes.cz/studium.asp?c=A080709_085836_studium_bar}",\r
+  year = 2008\r
+}\r
+\r
+@inproceedings{pomikalek2008,\r
+       author = "Pomikálek, Jan and Rychlý, Pavel",\r
+       title = "Detecting Co-Derivative Documents in Large Text Collections",\r
+       booktitle = "Proceedings of the Sixth International Language Resources and Evaluation (LREC'08)",\r
+       year = "2008",\r
+       pages = "132-135",\r
+       address = "Marrakech, Morocco",\r
+       url = "http://www.lrec-conf.org/lrec2008/"\r
+}\r
+\r
+@inproceedings{pomikalek2009,\r
+       author = "Pomikálek, Jan and Rychlý, Pavel and Kilgarriff, Adam",\r
+       title = "Scaling to Billion-plus Word Corpora",\r
+       booktitle = "Advances in Computational Linguistics",\r
+       year = "2009",\r
+       pages = "3-13",\r
+       address = "Mexico",\r
+       issn = "1870-4069",\r
+       publisher = "Instituto Politécnico Nacional",\r
+}\r
+\r
+@Misc{munisearch,\r
+       key = "MU",\r
+       title = "Masaryk University: Full-text search",\r
+       howpublished = "retrieved 2009--08--25 from \url{http://www.muni.cz/general/search}",\r
+       year = 2009\r
+}\r
+\r
+@Misc{coxslashdot,\r
+       author = "Alan Cox",\r
+       title = "{Alan Cox talks about laws... and Linux}",\r
+       howpublished = "retrieved 2009--08--27 from \url{http://interviews.slashdot.org/article.pl?sid=02/05/20/1314214}",\r
+       year = 2002\r
+}\r
+\r
+@inproceedings{coderivative,\r
+Author = {Bernstein, Y and Zobel, J},\r
+Title = {{A Scalable System for Identifying Co-derivative Documents}},\r
+Booktitle = {{String Processing and Information Retrieval, Proceedings}},\r
+Series = {{Lecture Notes in Computer Science}},\r
+Year = {{2004}},\r
+Volume = {{3246}},\r
+Pages = {{55-67}},\r
+Publisher = {{Springer-Verlag Berlin}},\r
+Type = {{Proceedings Paper}},\r
+Language = {{English}},\r
+Affiliation = {{Bernstein, Y (Reprint Author), RMIT Univ, Sch Comp Sci \& Informat Technol, Melbourne, Vic, Australia.\r
+   RMIT Univ, Sch Comp Sci \& Informat Technol, Melbourne, Vic, Australia.}},\r
+ISSN = {{0302-9743}},\r
+ISBN = {{3-540-23210-9}},\r
+Keywords-Plus = {{COMPRESSION}},\r
+Subject-Category = {{Computer Science, Theory \& Methods}},\r
+Author-Email = {{ybernste@cs.rmit.edu.au\r
+   jz@cs.rmit.edu.au}},\r
+Number-of-Cited-References = {{17}},\r
+Times-Cited = {{2}},\r
+Doc-Delivery-Number = {{BBA15}},\r
+Unique-ID = {{ISI:000224377200006}},\r
+}\r
+\r
+@MISC{turnitin,\r
+  key = "{Turnitin.com}",\r
+  title = "Turnitin",\r
+  howpublished = "\url{http://turnitin.com/}, retrieved 2009--08--26",\r
+  year = "2009",\r
+}\r
+\r
+@MISC{copyscape,\r
+  key = "{Copyscape.com}",\r
+  title = "Copyscape",\r
+  howpublished = "\url{http://copyscape.com/}, retrieved 2009--08--26",\r
+  year = "2009",\r
+}\r
+\r
+@MISC{doccop,\r
+  key = "{Doccop.com}",\r
+  title = "DocCop",\r
+  howpublished = "\url{http://doccop.com/}, retrieved 2009--08--26",\r
+  year = "2009",\r
+}\r
+\r
+@MISC{pan09competition,\r
+  key = "{PAN'09}",\r
+  title = "1st International Competition on Plagiarism Detection",\r
+  howpublished = "\url{http://www.uni-weimar.de/medien/webis/research/workshopseries/pan-09/competition.html}, retrieved 2009--08--26",\r
+  year = "2009",\r
+}\r
+\r
+@INPROCEEDINGS{Brin95copydetection,\r
+    author = {Sergey Brin and James Davis and Hector Garcia-Molina},\r
+    title = {Copy Detection Mechanisms for Digital Documents},\r
+    booktitle = {Proceedings of the ACM SIGMOD Annual Conference},\r
+    year = {1995},\r
+    pages = {398--409}\r
+}\r
+\r
+@INPROCEEDINGS{Shivakumar95scam,\r
+    author = {Narayanan Shivakumar and Hector Garcia-Molina},\r
+    title = {SCAM: A Copy Detection Mechanism for Digital Documents},\r
+    booktitle = {Proceedings of the Second Annual Conference on the Theory and Practice of Digital Libraries},\r
+    year = {1995}\r
+}\r
+\r
+@INPROCEEDINGS{Garcia-Molina96dscam:finding,\r
+    author = {Hector Garcia-Molina and Luis Gravano and Narayanan Shivakumar},\r
+    title = {dSCAM: Finding Document Copies across Multiple Databases},\r
+    booktitle = {In Proceedings of the 4th International Conference on Parallel and Distributed Information Systems},\r
+    year = {1996}\r
+}\r
+\r
+@INPROCEEDINGS{LinuxDesktop,\r
+    author = {Jan Kasprzak},\r
+    title = "{Desktop a jádro Linuxu}",\r
+    booktitle = {Proceedings of the XXXI EurOpen.CZ Conference},\r
+    isbn = "978-80-86583-13-6",\r
+    pages = {45--60},\r
+    publisher = "EurOpen.CZ, Plzeň",\r
+    year = {2007}\r
+}\r
+\r
+@INPROCEEDINGS{Filesystems,\r
+    author = {Jan Kasprzak},\r
+    title = "{Co umí souborové systémy}",\r
+    booktitle = {Proceedings of the XXXII EurOpen.CZ Conference},\r
+    isbn = "978-80-86583-14-3",\r
+    pages = {105--118},\r
+    publisher = "EurOpen.CZ, Plzeň",\r
+    year = {2008}\r
+}\r
+\r
+@INPROCEEDINGS{GitEuropen,\r
+    author = {Jan Kasprzak},\r
+    title = "{Git aneb správa verzí trochu jinak}",\r
+    booktitle = {Proceedings of the XXXIV EurOpen.CZ Conference},\r
+    isbn = "978-80-86583-16-7",\r
+    pages = {107--118},\r
+    publisher = "EurOpen.CZ, Plzeň",\r
+    year = {2009}\r
+}\r
+\r
+@INPROCEEDINGS{Clusters,\r
+    author = {Jan Kasprzak},\r
+    title = "{Clusterová řešení pod Linuxem}",\r
+    booktitle = {SLT 2001: Proceedings of the 2nd Seminar on Linux and \TeX},\r
+    isbn = "80-7302-009-2",\r
+    pages = {161--168},\r
+    publisher = "Konvoj, Brno",\r
+    year = {2001}\r
+}\r
+\r
+@MISC{pan09corpus,\r
+  AUTHOR        = {{Webis at Bauhaus-Universität Weimar} and\r
+                   {NLEL at Universidad Polytécnica de Valencia}},\r
+  HOWPUBLISHED  = {\url{http://www.webis.de/research/corpora}},\r
+  TITLE         = {{PAN Plagiarism Corpus 2009 (PAN-PC-09)}},\r
+  YEAR          = {2009},\r
+  NOTE          = {{Martin Potthast, Andreas Eiselt, Benno Stein,\r
+                    Alberto Barrón-Cedeño, and Paolo Rosso (editors)}}\r
+}\r
+\r
+@INPROCEEDINGS{ngram,\r
+    author = {William B. Cavnar and John M. Trenkle},\r
+    title = {N-Gram-Based Text Categorization},\r
+    booktitle = {In Proceedings of SDAIR-94, 3rd Annual Symposium on Document Analysis and Information Retrieval},\r
+    year = {1994},\r
+    pages = {161--175}\r
+}\r
+\r
+@inproceedings{intrinsic,\r
+  author = {Sven Meyer zu Eissen and Benno Stein},\r
+  booktitle = {ECIR},\r
+  editor = {Mounia Lalmas and Andy MacFarlane and Stefan M. Rüger and Anastasios Tombros and Theodora Tsikrika and Alexei Yavlinsky},\r
+  pages = {565-569},\r
+  publisher = {Springer},\r
+  series = {Lecture Notes in Computer Science},\r
+  title = {Intrinsic Plagiarism Detection.},\r
+  url = {\url{http://dblp.uni-trier.de/db/conf/ecir/ecir2006.html#EissenS06}},\r
+  volume = {3936},\r
+  year = {2006},\r
+  ee = {http://dx.doi.org/10.1007/11735106_66},\r
+  isbn = {3-540-33347-9},\r
+  date = {2006-04-03}\r
+}\r
+\r
+@INPROCEEDINGS{Heintze96scalabledocument,\r
+    author = {Nevin Heintze},\r
+    title = {Scalable Document Fingerprinting},\r
+    booktitle = {In Proc. USENIX Workshop on Electronic Commerce},\r
+    year = {1996}\r
+}\r
+\r
+@inproceedings{suffixtree,\r
+ author = {Manber, Udi and Myers, Gene},\r
+ title = {Suffix arrays: a new method for on-line string searches},\r
+ booktitle = {SODA '90: Proceedings of the first annual ACM-SIAM symposium on Discrete algorithms},\r
+ year = {1990},\r
+ isbn = {0-89871-251-3},\r
+ pages = {319--327},\r
+ location = {San Francisco, California, United States},\r
+ publisher = {Society for Industrial and Applied Mathematics},\r
+ address = {Philadelphia, PA, USA}\r
+}\r
+\r
+\r
+@techreport{rsync,\r
+       KEY = "Rsync",\r
+       AUTHOR = "Andrew Tridgell and Paul Mackerras",\r
+       TITLE = "The rsync algorithm",\r
+       DATE = "2004--05--19",\r
+       YEAR = "2004",\r
+       INSTITUTION = "Department of Computer Science, FEIT, Australian National university",\r
+       \r
+       NOTE = "\url{http://hdl.handle.net/1885/40765}",\r
+}\r
+\r
+@MISC{git,\r
+       KEY = "Git",\r
+       AUTHOR = "Linus Torvalds et al",\r
+       TITLE = "{Git---the Fast Version Control System}",\r
+       HOWPUBLISHED = "\url{http://git-scm.com/}, retrieved 2011--01--12",\r
+}\r
+\r
+@MISC{rpm,\r
+       KEY = "RPM",\r
+       TITLE = "{The RPM Package Manager}",\r
+       HOWPUBLISHED = "\url{http://www.rpm.org/}, retrieved 2011-01--12",\r
+}\r
+\r
+@MISC{deltarpm,\r
+       KEY = "DeltaRPM",\r
+       TITLE = "{DeltaRPM}",\r
+       HOWPUBLISHED = "\url{ftp://ftp.suse.com/pub/projects/deltarpm/}, retrieved 2011--01--12",\r
+}\r
+\r
+@mastersthesis{zazrivec,\r
+       AUTHOR = "Milan Zázrivec",\r
+       TITLE = "Algoritmus a implementace software pro tvorbu binárních záplat",\r
+       SCHOOL = "Faculty of Informatics, Masaryk University",\r
+       NOTE = "\url{http://is.muni.cz/th/60716/fi_m/}",\r
+       YEAR = "2009",\r
+}\r
+\r
+@MISC{scholar,\r
+       KEY = "Google Scholar",\r
+       TITLE = "{Google Scholar}",\r
+       HOWPUBLISHED = "\url{http://scholar.google.com/}, retrieved 2011--01--12",\r
+}\r
+\r
+@MISC{ascii,\r
+       KEY = "ASCII",\r
+       TITLE = "{American National Standard for Information Systems -- Coded Character Sets -- 7-Bit American National Standard Code for Information Interchange (7-Bit ASCII), ANSI X3.4-1986}",\r
+       DATE="1986--03--26",\r
+       YEAR="1986",\r
+       INSTITUTION = "American National Standards Institute, Inc.",\r
+}\r
+\r
+@BOOK{unicode,\r
+       AUTHOR = "The Unicode Consortium",\r
+       TITLE = "{The Unicode Standard -- Version 4.0}", \r
+       PUBLISHER = "Addison-Wesley, Boston, MA",\r
+       YEAR = "2003",\r
+       ISBN = "0--321--18578--1",\r
+       NOTE = "\url{http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode_4_0_0}",\r
+}\r
+\r
+@MISC{rfc3629,\r
+       KEY = "RFC 3629",\r
+       TITLE = "{RFC 3629: UTF-8, a transformation format of ISO 10646}",\r
+       AUTHOR = "F. Yergeau",\r
+       YEAR = "2003",\r
+       NOTE = "\url{http://tools.ietf.org/html/rfc3629}",\r
+}\r
+\r
+@MISC{thesisproposal,\r
+       TITLE = "{Systems for Discovering Similar Documents}",\r
+       AUTHOR = "Jan Kasprzak",\r
+       INSTITUTION = "Faculty of Informatics, Masaryk University",\r
+       YEAR = "2010",\r
+       NOTE = "Ph.D. thesis proposal, \url{http://is.muni.cz/th/1885/fi_r/}",\r
+}\r
+\r
+@inproceedings{Kasprzak2010,\r
+  title={Improving the reliability of the plagiarism detection system},\r
+  author={Kasprzak, J. and Brandejs, M.},\r
+  booktitle={Notebook Papers of CLEF 2010 LABs and Workshops},\r
+  year={2010},\r
+  organization={Citeseer}\r
+}\r
+\r
+@article{stamatatos2011plagiarism,\r
+  title={Plagiarism detection using stopword n-grams},\r
+  author={Stamatatos, E.},\r
+  journal={Journal of the American Society for Information Science and Technology},\r
+  year={2011},\r
+  publisher={Wiley Online Library}\r
+}\r
+@inproceedings{pan09stamatatos,\r
+ author = {Efstathios Stamatatos},\r
+ pages = {38--46},\r
+ title = {Intrinsic Plagiarism Detection Using Character n-gram Profiles},\r
+ booktitle = {Proceedings of the SEPLN'09  Workshop on Uncovering Plagiarism, Authorship and Social Software Misuse},\r
+ year = {2009},\r
+ location = {San Sebastian (Donostia), Spain},\r
+ issn = {1613--0073},\r
+}\r
+\r
+\r
+@article{zipf1935psycho,\r
+  title={The psycho-biology of language.},\r
+  author={Zipf, G.K.},\r
+  year={1935},\r
+  publisher={Houghton, Mifflin}\r
+}\r
+\r
+@INPROCEEDINGS{potthastframework,\r
+        TITLE              = {{An Evaluation Framework for Plagiarism Detection}\r
+},\r
+        AUTHOR             = {Martin Potthast and Benno Stein and Alberot Barr{\'o}n-Cede{\~n}o and Paolo Rosso},\r
+        BOOKTITLE          = {Proceedings of the 23rd International Conference on Computational Linguistics (COLING 2010) (to appear)},\r
+        MONTH              = aug,\r
+        YEAR               = {2010},\r
+        ADDRESS            = {Beijing, China},\r
+        PUBLISHER          = {Association for Computational Linguistics},\r
+}\r
+\r
diff --git a/splncs03.bst b/splncs03.bst
new file mode 100644 (file)
index 0000000..3279169
--- /dev/null
@@ -0,0 +1,1519 @@
+%% BibTeX bibliography style `splncs03'\r
+%%\r
+%% BibTeX bibliography style for use with numbered references in\r
+%% Springer Verlag's "Lecture Notes in Computer Science" series.\r
+%% (See Springer's documentation for llncs.cls for\r
+%% more details of the suggested reference format.)  Note that this\r
+%% file will not work for author-year style citations.\r
+%%\r
+%% Use \documentclass{llncs} and \bibliographystyle{splncs03}, and cite\r
+%% a reference with (e.g.) \cite{smith77} to get a "[1]" in the text.\r
+%%\r
+%% This file comes to you courtesy of Maurizio "Titto" Patrignani of\r
+%% Dipartimento di Informatica e Automazione Universita' Roma Tre\r
+%%\r
+%% ================================================================================================\r
+%% This was file `titto-lncs-02.bst' produced on Wed Apr 1, 2009\r
+%% Edited by hand by titto based on `titto-lncs-01.bst' (see below)\r
+%%\r
+%% CHANGES (with respect to titto-lncs-01.bst):\r
+%% - Removed the call to \urlprefix (thus no "URL" string is added to the output)\r
+%% ================================================================================================\r
+%% This was file `titto-lncs-01.bst' produced on Fri Aug 22, 2008\r
+%% Edited by hand by titto based on `titto.bst' (see below)\r
+%%\r
+%% CHANGES (with respect to titto.bst):\r
+%% - Removed the "capitalize" command for editors string "(eds.)" and "(ed.)"\r
+%% - Introduced the functions titto.bbl.pages and titto.bbl.page for journal pages (without "pp.")\r
+%% - Added a new.sentence command to separate with a dot booktitle and series in the inproceedings\r
+%% - Commented all new.block commands before urls and notes (to separate them with a comma)\r
+%% - Introduced the functions titto.bbl.volume for handling journal volumes (without "vol." label)\r
+%% - Used for editors the same name conventions used for authors (see function format.in.ed.booktitle)\r
+%% - Removed a \newblock to avoid long spaces between title and "In: ..."\r
+%% - Added function titto.space.prefix to add a space instead of "~" after the (removed) "vol." label\r
+%% ================================================================================================\r
+%% This was file `titto.bst',\r
+%% generated with the docstrip utility.\r
+%%\r
+%% The original source files were:\r
+%%\r
+%% merlin.mbs  (with options: `vonx,nm-rvvc,yr-par,jttl-rm,volp-com,jwdpg,jwdvol,numser,ser-vol,jnm-x,btit-rm,bt-rm,edparxc,bkedcap,au-col,in-col,fin-bare,pp,ed,abr,mth-bare,xedn,jabr,and-com,and-com-ed,xand,url,url-blk,em-x,nfss,')\r
+%% ----------------------------------------\r
+%% *** Tentative .bst file for Springer LNCS ***\r
+%%\r
+%% Copyright 1994-2007 Patrick W Daly\r
+ % ===============================================================\r
+ % IMPORTANT NOTICE:\r
+ % This bibliographic style (bst) file has been generated from one or\r
+ % more master bibliographic style (mbs) files, listed above.\r
+ %\r
+ % This generated file can be redistributed and/or modified under the terms\r
+ % of the LaTeX Project Public License Distributed from CTAN\r
+ % archives in directory macros/latex/base/lppl.txt; either\r
+ % version 1 of the License, or any later version.\r
+ % ===============================================================\r
+ % Name and version information of the main mbs file:\r
+ % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)]\r
+ %   For use with BibTeX version 0.99a or later\r
+ %-------------------------------------------------------------------\r
+ % This bibliography style file is intended for texts in ENGLISH\r
+ % This is a numerical citation style, and as such is standard LaTeX.\r
+ % It requires no extra package to interface to the main text.\r
+ % The form of the \bibitem entries is\r
+ %   \bibitem{key}...\r
+ % Usage of \cite is as follows:\r
+ %   \cite{key} ==>>          [#]\r
+ %   \cite[chap. 2]{key} ==>> [#, chap. 2]\r
+ % where # is a number determined by the ordering in the reference list.\r
+ % The order in the reference list is alphabetical by authors.\r
+ %---------------------------------------------------------------------\r
+\r
+ENTRY\r
+  { address\r
+    author\r
+    booktitle\r
+    chapter\r
+    edition\r
+    editor\r
+    eid\r
+    howpublished\r
+    institution\r
+    journal\r
+    key\r
+    month\r
+    note\r
+    number\r
+    organization\r
+    pages\r
+    publisher\r
+    school\r
+    series\r
+    title\r
+    type\r
+    url\r
+    volume\r
+    year\r
+  }\r
+  {}\r
+  { label }\r
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }\r
+FUNCTION {init.state.consts}\r
+{ #0 'before.all :=\r
+  #1 'mid.sentence :=\r
+  #2 'after.sentence :=\r
+  #3 'after.block :=\r
+}\r
+STRINGS { s t}\r
+FUNCTION {output.nonnull}\r
+{ 's :=\r
+  output.state mid.sentence =\r
+    { ", " * write$ }\r
+    { output.state after.block =\r
+        { add.period$ write$\r
+%          newline$\r
+%          "\newblock " write$  % removed for titto-lncs-01\r
+          " " write$            % to avoid long spaces between title and "In: ..."\r
+        }\r
+        { output.state before.all =\r
+            'write$\r
+            { add.period$ " " * write$ }\r
+          if$\r
+        }\r
+      if$\r
+      mid.sentence 'output.state :=\r
+    }\r
+  if$\r
+  s\r
+}\r
+FUNCTION {output}\r
+{ duplicate$ empty$\r
+    'pop$\r
+    'output.nonnull\r
+  if$\r
+}\r
+FUNCTION {output.check}\r
+{ 't :=\r
+  duplicate$ empty$\r
+    { pop$ "empty " t * " in " * cite$ * warning$ }\r
+    'output.nonnull\r
+  if$\r
+}\r
+FUNCTION {fin.entry}\r
+{ duplicate$ empty$\r
+    'pop$\r
+    'write$\r
+  if$\r
+  newline$\r
+}\r
+\r
+FUNCTION {new.block}\r
+{ output.state before.all =\r
+    'skip$\r
+    { after.block 'output.state := }\r
+  if$\r
+}\r
+FUNCTION {new.sentence}\r
+{ output.state after.block =\r
+    'skip$\r
+    { output.state before.all =\r
+        'skip$\r
+        { after.sentence 'output.state := }\r
+      if$\r
+    }\r
+  if$\r
+}\r
+FUNCTION {add.blank}\r
+{  " " * before.all 'output.state :=\r
+}\r
+\r
+\r
+FUNCTION {add.colon}\r
+{ duplicate$ empty$\r
+    'skip$\r
+    { ":" * add.blank }\r
+  if$\r
+}\r
+\r
+FUNCTION {date.block}\r
+{\r
+  new.block\r
+}\r
+\r
+FUNCTION {not}\r
+{   { #0 }\r
+    { #1 }\r
+  if$\r
+}\r
+FUNCTION {and}\r
+{   'skip$\r
+    { pop$ #0 }\r
+  if$\r
+}\r
+FUNCTION {or}\r
+{   { pop$ #1 }\r
+    'skip$\r
+  if$\r
+}\r
+STRINGS {z}\r
+FUNCTION {remove.dots}\r
+{ 'z :=\r
+  ""\r
+  { z empty$ not }\r
+  { z #1 #1 substring$\r
+    z #2 global.max$ substring$ 'z :=\r
+    duplicate$ "." = 'pop$\r
+      { * }\r
+    if$\r
+  }\r
+  while$\r
+}\r
+FUNCTION {new.block.checka}\r
+{ empty$\r
+    'skip$\r
+    'new.block\r
+  if$\r
+}\r
+FUNCTION {new.block.checkb}\r
+{ empty$\r
+  swap$ empty$\r
+  and\r
+    'skip$\r
+    'new.block\r
+  if$\r
+}\r
+FUNCTION {new.sentence.checka}\r
+{ empty$\r
+    'skip$\r
+    'new.sentence\r
+  if$\r
+}\r
+FUNCTION {new.sentence.checkb}\r
+{ empty$\r
+  swap$ empty$\r
+  and\r
+    'skip$\r
+    'new.sentence\r
+  if$\r
+}\r
+FUNCTION {field.or.null}\r
+{ duplicate$ empty$\r
+    { pop$ "" }\r
+    'skip$\r
+  if$\r
+}\r
+FUNCTION {emphasize}\r
+{ skip$ }\r
+FUNCTION {tie.or.space.prefix}\r
+{ duplicate$ text.length$ #3 <\r
+    { "~" }\r
+    { " " }\r
+  if$\r
+  swap$\r
+}\r
+FUNCTION {titto.space.prefix} %  always introduce a space\r
+{ duplicate$ text.length$ #3 <\r
+    { " " }\r
+    { " " }\r
+  if$\r
+  swap$\r
+}\r
+\r
+\r
+FUNCTION {capitalize}\r
+{ "u" change.case$ "t" change.case$ }\r
+\r
+FUNCTION {space.word}\r
+{ " " swap$ * " " * }\r
+ % Here are the language-specific definitions for explicit words.\r
+ % Each function has a name bbl.xxx where xxx is the English word.\r
+ % The language selected here is ENGLISH\r
+FUNCTION {bbl.and}\r
+{ "and"}\r
+\r
+FUNCTION {bbl.etal}\r
+{ "et~al." }\r
+\r
+FUNCTION {bbl.editors}\r
+{ "eds." }\r
+\r
+FUNCTION {bbl.editor}\r
+{ "ed." }\r
+\r
+FUNCTION {bbl.edby}\r
+{ "edited by" }\r
+\r
+FUNCTION {bbl.edition}\r
+{ "edn." }\r
+\r
+FUNCTION {bbl.volume}\r
+{ "vol." }\r
+\r
+FUNCTION {titto.bbl.volume} % for handling journals\r
+{ "" }\r
+\r
+FUNCTION {bbl.of}\r
+{ "of" }\r
+\r
+FUNCTION {bbl.number}\r
+{ "no." }\r
+\r
+FUNCTION {bbl.nr}\r
+{ "no." }\r
+\r
+FUNCTION {bbl.in}\r
+{ "in" }\r
+\r
+FUNCTION {bbl.pages}\r
+{ "pp." }\r
+\r
+FUNCTION {bbl.page}\r
+{ "p." }\r
+\r
+FUNCTION {titto.bbl.pages} % for journals\r
+{ "" }\r
+\r
+FUNCTION {titto.bbl.page}  % for journals\r
+{ "" }\r
+\r
+FUNCTION {bbl.chapter}\r
+{ "chap." }\r
+\r
+FUNCTION {bbl.techrep}\r
+{ "Tech. Rep." }\r
+\r
+FUNCTION {bbl.mthesis}\r
+{ "Master's thesis" }\r
+\r
+FUNCTION {bbl.phdthesis}\r
+{ "Ph.D. thesis" }\r
+\r
+MACRO {jan} {"Jan."}\r
+\r
+MACRO {feb} {"Feb."}\r
+\r
+MACRO {mar} {"Mar."}\r
+\r
+MACRO {apr} {"Apr."}\r
+\r
+MACRO {may} {"May"}\r
+\r
+MACRO {jun} {"Jun."}\r
+\r
+MACRO {jul} {"Jul."}\r
+\r
+MACRO {aug} {"Aug."}\r
+\r
+MACRO {sep} {"Sep."}\r
+\r
+MACRO {oct} {"Oct."}\r
+\r
+MACRO {nov} {"Nov."}\r
+\r
+MACRO {dec} {"Dec."}\r
+\r
+MACRO {acmcs} {"ACM Comput. Surv."}\r
+\r
+MACRO {acta} {"Acta Inf."}\r
+\r
+MACRO {cacm} {"Commun. ACM"}\r
+\r
+MACRO {ibmjrd} {"IBM J. Res. Dev."}\r
+\r
+MACRO {ibmsj} {"IBM Syst.~J."}\r
+\r
+MACRO {ieeese} {"IEEE Trans. Software Eng."}\r
+\r
+MACRO {ieeetc} {"IEEE Trans. Comput."}\r
+\r
+MACRO {ieeetcad}\r
+ {"IEEE Trans. Comput. Aid. Des."}\r
+\r
+MACRO {ipl} {"Inf. Process. Lett."}\r
+\r
+MACRO {jacm} {"J.~ACM"}\r
+\r
+MACRO {jcss} {"J.~Comput. Syst. Sci."}\r
+\r
+MACRO {scp} {"Sci. Comput. Program."}\r
+\r
+MACRO {sicomp} {"SIAM J. Comput."}\r
+\r
+MACRO {tocs} {"ACM Trans. Comput. Syst."}\r
+\r
+MACRO {tods} {"ACM Trans. Database Syst."}\r
+\r
+MACRO {tog} {"ACM Trans. Graphic."}\r
+\r
+MACRO {toms} {"ACM Trans. Math. Software"}\r
+\r
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}\r
+\r
+MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}\r
+\r
+MACRO {tcs} {"Theor. Comput. Sci."}\r
+\r
+FUNCTION {bibinfo.check}\r
+{ swap$\r
+  duplicate$ missing$\r
+    {\r
+      pop$ pop$\r
+      ""\r
+    }\r
+    { duplicate$ empty$\r
+        {\r
+          swap$ pop$\r
+        }\r
+        { swap$\r
+          pop$\r
+        }\r
+      if$\r
+    }\r
+  if$\r
+}\r
+FUNCTION {bibinfo.warn}\r
+{ swap$\r
+  duplicate$ missing$\r
+    {\r
+      swap$ "missing " swap$ * " in " * cite$ * warning$ pop$\r
+      ""\r
+    }\r
+    { duplicate$ empty$\r
+        {\r
+          swap$ "empty " swap$ * " in " * cite$ * warning$\r
+        }\r
+        { swap$\r
+          pop$\r
+        }\r
+      if$\r
+    }\r
+  if$\r
+}\r
+FUNCTION {format.url}\r
+{ url empty$\r
+    { "" }\r
+%    { "\urlprefix\url{" url * "}" * }\r
+    { "\url{" url * "}" * }  % changed in titto-lncs-02.bst\r
+  if$\r
+}\r
+\r
+INTEGERS { nameptr namesleft numnames }\r
+\r
+\r
+STRINGS  { bibinfo}\r
+\r
+FUNCTION {format.names}\r
+{ 'bibinfo :=\r
+  duplicate$ empty$ 'skip$ {\r
+  's :=\r
+  "" 't :=\r
+  #1 'nameptr :=\r
+  s num.names$ 'numnames :=\r
+  numnames 'namesleft :=\r
+    { namesleft #0 > }\r
+    { s nameptr\r
+      "{vv~}{ll}{, jj}{, f{.}.}"\r
+      format.name$\r
+      bibinfo bibinfo.check\r
+      't :=\r
+      nameptr #1 >\r
+        {\r
+          namesleft #1 >\r
+            { ", " * t * }\r
+            {\r
+              s nameptr "{ll}" format.name$ duplicate$ "others" =\r
+                { 't := }\r
+                { pop$ }\r
+              if$\r
+              "," *\r
+              t "others" =\r
+                {\r
+                  " " * bbl.etal *\r
+                }\r
+                { " " * t * }\r
+              if$\r
+            }\r
+          if$\r
+        }\r
+        't\r
+      if$\r
+      nameptr #1 + 'nameptr :=\r
+      namesleft #1 - 'namesleft :=\r
+    }\r
+  while$\r
+  } if$\r
+}\r
+FUNCTION {format.names.ed}\r
+{\r
+  'bibinfo :=\r
+  duplicate$ empty$ 'skip$ {\r
+  's :=\r
+  "" 't :=\r
+  #1 'nameptr :=\r
+  s num.names$ 'numnames :=\r
+  numnames 'namesleft :=\r
+    { namesleft #0 > }\r
+    { s nameptr\r
+      "{f{.}.~}{vv~}{ll}{ jj}"\r
+      format.name$\r
+      bibinfo bibinfo.check\r
+      't :=\r
+      nameptr #1 >\r
+        {\r
+          namesleft #1 >\r
+            { ", " * t * }\r
+            {\r
+              s nameptr "{ll}" format.name$ duplicate$ "others" =\r
+                { 't := }\r
+                { pop$ }\r
+              if$\r
+              "," *\r
+              t "others" =\r
+                {\r
+\r
+                  " " * bbl.etal *\r
+                }\r
+                { " " * t * }\r
+              if$\r
+            }\r
+          if$\r
+        }\r
+        't\r
+      if$\r
+      nameptr #1 + 'nameptr :=\r
+      namesleft #1 - 'namesleft :=\r
+    }\r
+  while$\r
+  } if$\r
+}\r
+FUNCTION {format.authors}\r
+{ author "author" format.names\r
+}\r
+FUNCTION {get.bbl.editor}\r
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }\r
+\r
+FUNCTION {format.editors}\r
+{ editor "editor" format.names duplicate$ empty$ 'skip$\r
+    {\r
+      " " *\r
+      get.bbl.editor\r
+%      capitalize\r
+   "(" swap$ * ")" *\r
+      *\r
+    }\r
+  if$\r
+}\r
+FUNCTION {format.note}\r
+{\r
+ note empty$\r
+    { "" }\r
+    { note #1 #1 substring$\r
+      duplicate$ "{" =\r
+        'skip$\r
+        { output.state mid.sentence =\r
+          { "l" }\r
+          { "u" }\r
+        if$\r
+        change.case$\r
+        }\r
+      if$\r
+      note #2 global.max$ substring$ * "note" bibinfo.check\r
+    }\r
+  if$\r
+}\r
+\r
+FUNCTION {format.title}\r
+{ title\r
+  duplicate$ empty$ 'skip$\r
+    { "t" change.case$ }\r
+  if$\r
+  "title" bibinfo.check\r
+}\r
+FUNCTION {output.bibitem}\r
+{ newline$\r
+  "\bibitem{" write$\r
+  cite$ write$\r
+  "}" write$\r
+  newline$\r
+  ""\r
+  before.all 'output.state :=\r
+}\r
+\r
+FUNCTION {n.dashify}\r
+{\r
+  't :=\r
+  ""\r
+    { t empty$ not }\r
+    { t #1 #1 substring$ "-" =\r
+        { t #1 #2 substring$ "--" = not\r
+            { "--" *\r
+              t #2 global.max$ substring$ 't :=\r
+            }\r
+            {   { t #1 #1 substring$ "-" = }\r
+                { "-" *\r
+                  t #2 global.max$ substring$ 't :=\r
+                }\r
+              while$\r
+            }\r
+          if$\r
+        }\r
+        { t #1 #1 substring$ *\r
+          t #2 global.max$ substring$ 't :=\r
+        }\r
+      if$\r
+    }\r
+  while$\r
+}\r
+\r
+FUNCTION {word.in}\r
+{ bbl.in capitalize\r
+  ":" *\r
+  " " * }\r
+\r
+FUNCTION {format.date}\r
+{\r
+  month "month" bibinfo.check\r
+  duplicate$ empty$\r
+  year  "year"  bibinfo.check duplicate$ empty$\r
+    { swap$ 'skip$\r
+        { "there's a month but no year in " cite$ * warning$ }\r
+      if$\r
+      *\r
+    }\r
+    { swap$ 'skip$\r
+        {\r
+          swap$\r
+          " " * swap$\r
+        }\r
+      if$\r
+      *\r
+      remove.dots\r
+    }\r
+  if$\r
+  duplicate$ empty$\r
+    'skip$\r
+    {\r
+      before.all 'output.state :=\r
+    " (" swap$ * ")" *\r
+    }\r
+  if$\r
+}\r
+FUNCTION {format.btitle}\r
+{ title "title" bibinfo.check\r
+  duplicate$ empty$ 'skip$\r
+    {\r
+    }\r
+  if$\r
+}\r
+FUNCTION {either.or.check}\r
+{ empty$\r
+    'pop$\r
+    { "can't use both " swap$ * " fields in " * cite$ * warning$ }\r
+  if$\r
+}\r
+FUNCTION {format.bvolume}\r
+{ volume empty$\r
+    { "" }\r
+    { bbl.volume volume tie.or.space.prefix\r
+      "volume" bibinfo.check * *\r
+      series "series" bibinfo.check\r
+      duplicate$ empty$ 'pop$\r
+        { emphasize ", " * swap$ * }\r
+      if$\r
+      "volume and number" number either.or.check\r
+    }\r
+  if$\r
+}\r
+FUNCTION {format.number.series}\r
+{ volume empty$\r
+    { number empty$\r
+        { series field.or.null }\r
+        { output.state mid.sentence =\r
+            { bbl.number }\r
+            { bbl.number capitalize }\r
+          if$\r
+          number tie.or.space.prefix "number" bibinfo.check * *\r
+          series empty$\r
+            { "there's a number but no series in " cite$ * warning$ }\r
+            { bbl.in space.word *\r
+              series "series" bibinfo.check *\r
+            }\r
+          if$\r
+        }\r
+      if$\r
+    }\r
+    { "" }\r
+  if$\r
+}\r
+\r
+FUNCTION {format.edition}\r
+{ edition duplicate$ empty$ 'skip$\r
+    {\r
+      output.state mid.sentence =\r
+        { "l" }\r
+        { "t" }\r
+      if$ change.case$\r
+      "edition" bibinfo.check\r
+      " " * bbl.edition *\r
+    }\r
+  if$\r
+}\r
+INTEGERS { multiresult }\r
+FUNCTION {multi.page.check}\r
+{ 't :=\r
+  #0 'multiresult :=\r
+    { multiresult not\r
+      t empty$ not\r
+      and\r
+    }\r
+    { t #1 #1 substring$\r
+      duplicate$ "-" =\r
+      swap$ duplicate$ "," =\r
+      swap$ "+" =\r
+      or or\r
+        { #1 'multiresult := }\r
+        { t #2 global.max$ substring$ 't := }\r
+      if$\r
+    }\r
+  while$\r
+  multiresult\r
+}\r
+FUNCTION {format.pages}\r
+{ pages duplicate$ empty$ 'skip$\r
+    { duplicate$ multi.page.check\r
+        {\r
+          bbl.pages swap$\r
+          n.dashify\r
+        }\r
+        {\r
+          bbl.page swap$\r
+        }\r
+      if$\r
+      tie.or.space.prefix\r
+      "pages" bibinfo.check\r
+      * *\r
+    }\r
+  if$\r
+}\r
+FUNCTION {format.journal.pages}\r
+{ pages duplicate$ empty$ 'pop$\r
+    { swap$ duplicate$ empty$\r
+        { pop$ pop$ format.pages }\r
+        {\r
+          ", " *\r
+          swap$\r
+          n.dashify\r
+          pages multi.page.check\r
+            'titto.bbl.pages\r
+            'titto.bbl.page\r
+          if$\r
+          swap$ tie.or.space.prefix\r
+          "pages" bibinfo.check\r
+          * *\r
+          *\r
+        }\r
+      if$\r
+    }\r
+  if$\r
+}\r
+FUNCTION {format.journal.eid}\r
+{ eid "eid" bibinfo.check\r
+  duplicate$ empty$ 'pop$\r
+    { swap$ duplicate$ empty$ 'skip$\r
+      {\r
+          ", " *\r
+      }\r
+      if$\r
+      swap$ *\r
+    }\r
+  if$\r
+}\r
+FUNCTION {format.vol.num.pages} % this function is used only for journal entries\r
+{ volume field.or.null\r
+  duplicate$ empty$ 'skip$\r
+    {\r
+%     bbl.volume swap$ tie.or.space.prefix\r
+      titto.bbl.volume swap$ titto.space.prefix\r
+%             rationale for the change above: for journals you don't want "vol." label\r
+%             hence it does not make sense to attach the journal number to the label when\r
+%             it is short\r
+      "volume" bibinfo.check\r
+      * *\r
+    }\r
+  if$\r
+  number "number" bibinfo.check duplicate$ empty$ 'skip$\r
+    {\r
+      swap$ duplicate$ empty$\r
+        { "there's a number but no volume in " cite$ * warning$ }\r
+        'skip$\r
+      if$\r
+      swap$\r
+      "(" swap$ * ")" *\r
+    }\r
+  if$ *\r
+  eid empty$\r
+    { format.journal.pages }\r
+    { format.journal.eid }\r
+  if$\r
+}\r
+\r
+FUNCTION {format.chapter.pages}\r
+{ chapter empty$\r
+    'format.pages\r
+    { type empty$\r
+        { bbl.chapter }\r
+        { type "l" change.case$\r
+          "type" bibinfo.check\r
+        }\r
+      if$\r
+      chapter tie.or.space.prefix\r
+      "chapter" bibinfo.check\r
+      * *\r
+      pages empty$\r
+        'skip$\r
+        { ", " * format.pages * }\r
+      if$\r
+    }\r
+  if$\r
+}\r
+\r
+FUNCTION {format.booktitle}\r
+{\r
+  booktitle "booktitle" bibinfo.check\r
+}\r
+FUNCTION {format.in.ed.booktitle}\r
+{ format.booktitle duplicate$ empty$ 'skip$\r
+    {\r
+%     editor "editor" format.names.ed duplicate$ empty$ 'pop$ % changed by titto\r
+      editor "editor" format.names duplicate$ empty$ 'pop$\r
+        {\r
+          " " *\r
+          get.bbl.editor\r
+%          capitalize\r
+          "(" swap$ * ") " *\r
+          * swap$\r
+          * }\r
+      if$\r
+      word.in swap$ *\r
+    }\r
+  if$\r
+}\r
+FUNCTION {empty.misc.check}\r
+{ author empty$ title empty$ howpublished empty$\r
+  month empty$ year empty$ note empty$\r
+  and and and and and\r
+  key empty$ not and\r
+    { "all relevant fields are empty in " cite$ * warning$ }\r
+    'skip$\r
+  if$\r
+}\r
+FUNCTION {format.thesis.type}\r
+{ type duplicate$ empty$\r
+    'pop$\r
+    { swap$ pop$\r
+      "t" change.case$ "type" bibinfo.check\r
+    }\r
+  if$\r
+}\r
+FUNCTION {format.tr.number}\r
+{ number "number" bibinfo.check\r
+  type duplicate$ empty$\r
+    { pop$ bbl.techrep }\r
+    'skip$\r
+  if$\r
+  "type" bibinfo.check\r
+  swap$ duplicate$ empty$\r
+    { pop$ "t" change.case$ }\r
+    { tie.or.space.prefix * * }\r
+  if$\r
+}\r
+FUNCTION {format.article.crossref}\r
+{\r
+  key duplicate$ empty$\r
+    { pop$\r
+      journal duplicate$ empty$\r
+        { "need key or journal for " cite$ * " to crossref " * crossref * warning$ }\r
+        { "journal" bibinfo.check emphasize word.in swap$ * }\r
+      if$\r
+    }\r
+    { word.in swap$ * " " *}\r
+  if$\r
+  " \cite{" * crossref * "}" *\r
+}\r
+FUNCTION {format.crossref.editor}\r
+{ editor #1 "{vv~}{ll}" format.name$\r
+  "editor" bibinfo.check\r
+  editor num.names$ duplicate$\r
+  #2 >\r
+    { pop$\r
+      "editor" bibinfo.check\r
+      " " * bbl.etal\r
+      *\r
+    }\r
+    { #2 <\r
+        'skip$\r
+        { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =\r
+            {\r
+              "editor" bibinfo.check\r
+              " " * bbl.etal\r
+              *\r
+            }\r
+            {\r
+             bbl.and space.word\r
+              * editor #2 "{vv~}{ll}" format.name$\r
+              "editor" bibinfo.check\r
+              *\r
+            }\r
+          if$\r
+        }\r
+      if$\r
+    }\r
+  if$\r
+}\r
+FUNCTION {format.book.crossref}\r
+{ volume duplicate$ empty$\r
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$\r
+      pop$ word.in\r
+    }\r
+    { bbl.volume\r
+      capitalize\r
+      swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *\r
+    }\r
+  if$\r
+  editor empty$\r
+  editor field.or.null author field.or.null =\r
+  or\r
+    { key empty$\r
+        { series empty$\r
+            { "need editor, key, or series for " cite$ * " to crossref " *\r
+              crossref * warning$\r
+              "" *\r
+            }\r
+            { series emphasize * }\r
+          if$\r
+        }\r
+        { key * }\r
+      if$\r
+    }\r
+    { format.crossref.editor * }\r
+  if$\r
+  " \cite{" * crossref * "}" *\r
+}\r
+FUNCTION {format.incoll.inproc.crossref}\r
+{\r
+  editor empty$\r
+  editor field.or.null author field.or.null =\r
+  or\r
+    { key empty$\r
+        { format.booktitle duplicate$ empty$\r
+            { "need editor, key, or booktitle for " cite$ * " to crossref " *\r
+              crossref * warning$\r
+            }\r
+            { word.in swap$ * }\r
+          if$\r
+        }\r
+        { word.in key * " " *}\r
+      if$\r
+    }\r
+    { word.in format.crossref.editor * " " *}\r
+  if$\r
+  " \cite{" * crossref * "}" *\r
+}\r
+FUNCTION {format.org.or.pub}\r
+{ 't :=\r
+  ""\r
+  address empty$ t empty$ and\r
+    'skip$\r
+    {\r
+      t empty$\r
+        { address "address" bibinfo.check *\r
+        }\r
+        { t *\r
+          address empty$\r
+            'skip$\r
+            { ", " * address "address" bibinfo.check * }\r
+          if$\r
+        }\r
+      if$\r
+    }\r
+  if$\r
+}\r
+FUNCTION {format.publisher.address}\r
+{ publisher "publisher" bibinfo.warn format.org.or.pub\r
+}\r
+\r
+FUNCTION {format.organization.address}\r
+{ organization "organization" bibinfo.check format.org.or.pub\r
+}\r
+\r
+FUNCTION {article}\r
+{ output.bibitem\r
+  format.authors "author" output.check\r
+  add.colon\r
+  new.block\r
+  format.title "title" output.check\r
+  new.block\r
+  crossref missing$\r
+    {\r
+      journal\r
+      "journal" bibinfo.check\r
+      "journal" output.check\r
+      add.blank\r
+      format.vol.num.pages output\r
+      format.date "year" output.check\r
+    }\r
+    { format.article.crossref output.nonnull\r
+      format.pages output\r
+    }\r
+  if$\r
+%  new.block\r
+  format.url output\r
+%  new.block\r
+  format.note output\r
+  fin.entry\r
+}\r
+FUNCTION {book}\r
+{ output.bibitem\r
+  author empty$\r
+    { format.editors "author and editor" output.check\r
+      add.colon\r
+    }\r
+    { format.authors output.nonnull\r
+      add.colon\r
+      crossref missing$\r
+        { "author and editor" editor either.or.check }\r
+        'skip$\r
+      if$\r
+    }\r
+  if$\r
+  new.block\r
+  format.btitle "title" output.check\r
+  crossref missing$\r
+    { format.bvolume output\r
+      new.block\r
+      new.sentence\r
+      format.number.series output\r
+      format.publisher.address output\r
+    }\r
+    {\r
+      new.block\r
+      format.book.crossref output.nonnull\r
+    }\r
+  if$\r
+  format.edition output\r
+  format.date "year" output.check\r
+%  new.block\r
+  format.url output\r
+%  new.block\r
+  format.note output\r
+  fin.entry\r
+}\r
+FUNCTION {booklet}\r
+{ output.bibitem\r
+  format.authors output\r
+  add.colon\r
+  new.block\r
+  format.title "title" output.check\r
+  new.block\r
+  howpublished "howpublished" bibinfo.check output\r
+  address "address" bibinfo.check output\r
+  format.date output\r
+%  new.block\r
+  format.url output\r
+%  new.block\r
+  format.note output\r
+  fin.entry\r
+}\r
+\r
+FUNCTION {inbook}\r
+{ output.bibitem\r
+  author empty$\r
+    { format.editors "author and editor" output.check\r
+      add.colon\r
+    }\r
+    { format.authors output.nonnull\r
+      add.colon\r
+      crossref missing$\r
+        { "author and editor" editor either.or.check }\r
+        'skip$\r
+      if$\r
+    }\r
+  if$\r
+  new.block\r
+  format.btitle "title" output.check\r
+  crossref missing$\r
+    {\r
+      format.bvolume output\r
+      format.chapter.pages "chapter and pages" output.check\r
+      new.block\r
+      new.sentence\r
+      format.number.series output\r
+      format.publisher.address output\r
+    }\r
+    {\r
+      format.chapter.pages "chapter and pages" output.check\r
+      new.block\r
+      format.book.crossref output.nonnull\r
+    }\r
+  if$\r
+  format.edition output\r
+  format.date "year" output.check\r
+%  new.block\r
+  format.url output\r
+%  new.block\r
+  format.note output\r
+  fin.entry\r
+}\r
+\r
+FUNCTION {incollection}\r
+{ output.bibitem\r
+  format.authors "author" output.check\r
+  add.colon\r
+  new.block\r
+  format.title "title" output.check\r
+  new.block\r
+  crossref missing$\r
+    { format.in.ed.booktitle "booktitle" output.check\r
+      format.bvolume output\r
+      format.chapter.pages output\r
+      new.sentence\r
+      format.number.series output\r
+      format.publisher.address output\r
+      format.edition output\r
+      format.date "year" output.check\r
+    }\r
+    { format.incoll.inproc.crossref output.nonnull\r
+      format.chapter.pages output\r
+    }\r
+  if$\r
+%  new.block\r
+  format.url output\r
+%  new.block\r
+  format.note output\r
+  fin.entry\r
+}\r
+FUNCTION {inproceedings}\r
+{ output.bibitem\r
+  format.authors "author" output.check\r
+  add.colon\r
+  new.block\r
+  format.title "title" output.check\r
+  new.block\r
+  crossref missing$\r
+    { format.in.ed.booktitle "booktitle" output.check\r
+      new.sentence % added by titto\r
+      format.bvolume output\r
+      format.pages output\r
+      new.sentence\r
+      format.number.series output\r
+      publisher empty$\r
+        { format.organization.address output }\r
+        { organization "organization" bibinfo.check output\r
+          format.publisher.address output\r
+        }\r
+      if$\r
+      format.date "year" output.check\r
+    }\r
+    { format.incoll.inproc.crossref output.nonnull\r
+      format.pages output\r
+    }\r
+  if$\r
+%  new.block\r
+  format.url output\r
+%  new.block\r
+  format.note output\r
+  fin.entry\r
+}\r
+FUNCTION {conference} { inproceedings }\r
+FUNCTION {manual}\r
+{ output.bibitem\r
+  author empty$\r
+    { organization "organization" bibinfo.check\r
+      duplicate$ empty$ 'pop$\r
+        { output\r
+          address "address" bibinfo.check output\r
+        }\r
+      if$\r
+    }\r
+    { format.authors output.nonnull }\r
+  if$\r
+  add.colon\r
+  new.block\r
+  format.btitle "title" output.check\r
+  author empty$\r
+    { organization empty$\r
+        {\r
+          address new.block.checka\r
+          address "address" bibinfo.check output\r
+        }\r
+        'skip$\r
+      if$\r
+    }\r
+    {\r
+      organization address new.block.checkb\r
+      organization "organization" bibinfo.check output\r
+      address "address" bibinfo.check output\r
+    }\r
+  if$\r
+  format.edition output\r
+  format.date output\r
+%  new.block\r
+  format.url output\r
+%  new.block\r
+  format.note output\r
+  fin.entry\r
+}\r
+\r
+FUNCTION {mastersthesis}\r
+{ output.bibitem\r
+  format.authors "author" output.check\r
+  add.colon\r
+  new.block\r
+  format.btitle\r
+  "title" output.check\r
+  new.block\r
+  bbl.mthesis format.thesis.type output.nonnull\r
+  school "school" bibinfo.warn output\r
+  address "address" bibinfo.check output\r
+  format.date "year" output.check\r
+%  new.block\r
+  format.url output\r
+%  new.block\r
+  format.note output\r
+  fin.entry\r
+}\r
+\r
+FUNCTION {misc}\r
+{ output.bibitem\r
+  format.authors output\r
+  add.colon\r
+  title howpublished new.block.checkb\r
+  format.title output\r
+  howpublished new.block.checka\r
+  howpublished "howpublished" bibinfo.check output\r
+  format.date output\r
+%  new.block\r
+  format.url output\r
+%  new.block\r
+  format.note output\r
+  fin.entry\r
+  empty.misc.check\r
+}\r
+FUNCTION {phdthesis}\r
+{ output.bibitem\r
+  format.authors "author" output.check\r
+  add.colon\r
+  new.block\r
+  format.btitle\r
+  "title" output.check\r
+  new.block\r
+  bbl.phdthesis format.thesis.type output.nonnull\r
+  school "school" bibinfo.warn output\r
+  address "address" bibinfo.check output\r
+  format.date "year" output.check\r
+%  new.block\r
+  format.url output\r
+%  new.block\r
+  format.note output\r
+  fin.entry\r
+}\r
+\r
+FUNCTION {proceedings}\r
+{ output.bibitem\r
+  editor empty$\r
+    { organization "organization" bibinfo.check output\r
+    }\r
+    { format.editors output.nonnull }\r
+  if$\r
+  add.colon\r
+  new.block\r
+  format.btitle "title" output.check\r
+  format.bvolume output\r
+  editor empty$\r
+    { publisher empty$\r
+        {  format.number.series output }\r
+        {\r
+          new.sentence\r
+          format.number.series output\r
+          format.publisher.address output\r
+        }\r
+      if$\r
+    }\r
+    { publisher empty$\r
+        {\r
+          new.sentence\r
+          format.number.series output\r
+          format.organization.address output }\r
+        {\r
+          new.sentence\r
+          format.number.series output\r
+          organization "organization" bibinfo.check output\r
+          format.publisher.address output\r
+        }\r
+      if$\r
+     }\r
+  if$\r
+      format.date "year" output.check\r
+%  new.block\r
+  format.url output\r
+%  new.block\r
+  format.note output\r
+  fin.entry\r
+}\r
+\r
+FUNCTION {techreport}\r
+{ output.bibitem\r
+  format.authors "author" output.check\r
+  add.colon\r
+  new.block\r
+  format.title\r
+  "title" output.check\r
+  new.block\r
+  format.tr.number output.nonnull\r
+  institution "institution" bibinfo.warn output\r
+  address "address" bibinfo.check output\r
+  format.date "year" output.check\r
+%  new.block\r
+  format.url output\r
+%  new.block\r
+  format.note output\r
+  fin.entry\r
+}\r
+\r
+FUNCTION {unpublished}\r
+{ output.bibitem\r
+  format.authors "author" output.check\r
+  add.colon\r
+  new.block\r
+  format.title "title" output.check\r
+  format.date output\r
+%  new.block\r
+  format.url output\r
+%  new.block\r
+  format.note "note" output.check\r
+  fin.entry\r
+}\r
+\r
+FUNCTION {default.type} { misc }\r
+READ\r
+FUNCTION {sortify}\r
+{ purify$\r
+  "l" change.case$\r
+}\r
+INTEGERS { len }\r
+FUNCTION {chop.word}\r
+{ 's :=\r
+  'len :=\r
+  s #1 len substring$ =\r
+    { s len #1 + global.max$ substring$ }\r
+    's\r
+  if$\r
+}\r
+FUNCTION {sort.format.names}\r
+{ 's :=\r
+  #1 'nameptr :=\r
+  ""\r
+  s num.names$ 'numnames :=\r
+  numnames 'namesleft :=\r
+    { namesleft #0 > }\r
+    { s nameptr\r
+      "{ll{ }}{  ff{ }}{  jj{ }}"\r
+      format.name$ 't :=\r
+      nameptr #1 >\r
+        {\r
+          "   "  *\r
+          namesleft #1 = t "others" = and\r
+            { "zzzzz" * }\r
+            { t sortify * }\r
+          if$\r
+        }\r
+        { t sortify * }\r
+      if$\r
+      nameptr #1 + 'nameptr :=\r
+      namesleft #1 - 'namesleft :=\r
+    }\r
+  while$\r
+}\r
+\r
+FUNCTION {sort.format.title}\r
+{ 't :=\r
+  "A " #2\r
+    "An " #3\r
+      "The " #4 t chop.word\r
+    chop.word\r
+  chop.word\r
+  sortify\r
+  #1 global.max$ substring$\r
+}\r
+FUNCTION {author.sort}\r
+{ author empty$\r
+    { key empty$\r
+        { "to sort, need author or key in " cite$ * warning$\r
+          ""\r
+        }\r
+        { key sortify }\r
+      if$\r
+    }\r
+    { author sort.format.names }\r
+  if$\r
+}\r
+FUNCTION {author.editor.sort}\r
+{ author empty$\r
+    { editor empty$\r
+        { key empty$\r
+            { "to sort, need author, editor, or key in " cite$ * warning$\r
+              ""\r
+            }\r
+            { key sortify }\r
+          if$\r
+        }\r
+        { editor sort.format.names }\r
+      if$\r
+    }\r
+    { author sort.format.names }\r
+  if$\r
+}\r
+FUNCTION {author.organization.sort}\r
+{ author empty$\r
+    { organization empty$\r
+        { key empty$\r
+            { "to sort, need author, organization, or key in " cite$ * warning$\r
+              ""\r
+            }\r
+            { key sortify }\r
+          if$\r
+        }\r
+        { "The " #4 organization chop.word sortify }\r
+      if$\r
+    }\r
+    { author sort.format.names }\r
+  if$\r
+}\r
+FUNCTION {editor.organization.sort}\r
+{ editor empty$\r
+    { organization empty$\r
+        { key empty$\r
+            { "to sort, need editor, organization, or key in " cite$ * warning$\r
+              ""\r
+            }\r
+            { key sortify }\r
+          if$\r
+        }\r
+        { "The " #4 organization chop.word sortify }\r
+      if$\r
+    }\r
+    { editor sort.format.names }\r
+  if$\r
+}\r
+FUNCTION {presort}\r
+{ type$ "book" =\r
+  type$ "inbook" =\r
+  or\r
+    'author.editor.sort\r
+    { type$ "proceedings" =\r
+        'editor.organization.sort\r
+        { type$ "manual" =\r
+            'author.organization.sort\r
+            'author.sort\r
+          if$\r
+        }\r
+      if$\r
+    }\r
+  if$\r
+  "    "\r
+  *\r
+  year field.or.null sortify\r
+  *\r
+  "    "\r
+  *\r
+  title field.or.null\r
+  sort.format.title\r
+  *\r
+  #1 entry.max$ substring$\r
+  'sort.key$ :=\r
+}\r
+ITERATE {presort}\r
+SORT\r
+STRINGS { longest.label }\r
+INTEGERS { number.label longest.label.width }\r
+FUNCTION {initialize.longest.label}\r
+{ "" 'longest.label :=\r
+  #1 'number.label :=\r
+  #0 'longest.label.width :=\r
+}\r
+FUNCTION {longest.label.pass}\r
+{ number.label int.to.str$ 'label :=\r
+  number.label #1 + 'number.label :=\r
+  label width$ longest.label.width >\r
+    { label 'longest.label :=\r
+      label width$ 'longest.label.width :=\r
+    }\r
+    'skip$\r
+  if$\r
+}\r
+EXECUTE {initialize.longest.label}\r
+ITERATE {longest.label.pass}\r
+FUNCTION {begin.bib}\r
+{ preamble$ empty$\r
+    'skip$\r
+    { preamble$ write$ newline$ }\r
+  if$\r
+  "\begin{thebibliography}{"  longest.label  * "}" *\r
+  write$ newline$\r
+  "\providecommand{\url}[1]{\texttt{#1}}"\r
+  write$ newline$\r
+  "\providecommand{\urlprefix}{URL }"\r
+  write$ newline$\r
+}\r
+EXECUTE {begin.bib}\r
+EXECUTE {init.state.consts}\r
+ITERATE {call.type$}\r
+FUNCTION {end.bib}\r
+{ newline$\r
+  "\end{thebibliography}" write$ newline$\r
+}\r
+EXECUTE {end.bib}\r
+%% End of customized bst file\r
+%%\r
+%% End of file `titto.bst'.\r
+\r
+\r