SCM

SCM Repository

[tm] Annotation of /pkg/inst/NEWS.Rd
ViewVC logotype

Annotation of /pkg/inst/NEWS.Rd

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1531 - (view) (download) (as text)

1 : feinerer 1170 \name{NEWS}
2 :     \title{News for Package 'tm'}
3 : khornik 1396 \encoding{UTF-8}
4 : feinerer 1529 \section{Changes in tm version 0.7-4}{
5 :     \subsection{BUG FIXES}{
6 :     \itemize{
7 : feinerer 1531 \item Keep document names in \code{tm_map.SimpleCorpus()}.
8 : feinerer 1529 \item Fix encoding problems in \code{scan_tokenizer()} and
9 :     \code{Boost_tokenizer()}.
10 :     }
11 :     }
12 :     }
13 : feinerer 1520 \section{Changes in tm version 0.7-3}{
14 :     \subsection{BUG FIXES}{
15 :     \itemize{
16 :     \item \code{scan_tokenizer()} now works with character vectors and
17 :     character strings.
18 :     \item \code{removePunctuation()} now works again in \code{latin1} locales.
19 :     \item Handle empty term-document matrices gracefully.
20 :     }
21 :     }
22 :     }
23 : feinerer 1474 \section{Changes in tm version 0.7-2}{
24 : feinerer 1481 \subsection{SIGNIFICANT USER-VISIBLE CHANGES}{
25 :     \itemize{
26 :     \item \code{DataframeSource} now only processes data frames with the two
27 :     mandatory columns \code{"doc_id"} and \code{"text"}. Additional columns
28 :     are used as document level metadata. This implements compatibility with
29 :     \emph{Text Interchange Formats} corpora
30 :     (\url{https://github.com/ropensci/tif}).
31 :     \item \code{readTabular()} has been removed. Use \code{DataframeSource}
32 :     instead.
33 : feinerer 1495 \item \code{removeNumbers()} and \code{removePunctuation()} now have an
34 :     argument \code{ucp} to check for Unicode general categories \code{Nd}
35 :     (decimal digits) and \code{P} (punctuation), respectively. Contributed
36 :     by Kurt Hornik.
37 : feinerer 1503 \item The package \pkg{xml2} is now imported for \acronym{XML}
38 :     functionality instead of the (\acronym{CRAN} maintainer orphaned)
39 :     package \pkg{XML}.
40 : feinerer 1481 }
41 :     }
42 : feinerer 1488 \subsection{NEW FEATURES}{
43 :     \itemize{
44 :     \item \code{Boost_tokenizer} provides a tokenizer based on the Boost
45 :     (\url{http://www.boost.org}) Tokenizer.
46 :     }
47 :     }
48 : feinerer 1474 \subsection{BUG FIXES}{
49 :     \itemize{
50 :     \item Correctly handle the \code{dictionary} argument when constructing a
51 : feinerer 1478 term-document matrix from a \code{SimpleCorpus} (reported by Joe
52 :     Corrigan) or from a \code{VCorpus} (reported by Mark Rosenstein).
53 : feinerer 1474 }
54 :     }
55 :     }
56 : khornik 1472 \section{Changes in tm version 0.7-1}{
57 :     \subsection{BUG FIXES}{
58 :     \itemize{
59 :     \item Compilation fixes for Clang's libc++.
60 :     }
61 :     }
62 :     }
63 : feinerer 1437 \section{Changes in tm version 0.7}{
64 : feinerer 1436 \subsection{SIGNIFICANT USER-VISIBLE CHANGES}{
65 :     \itemize{
66 :     \item \code{inspect.TermDocumentMatrix()} now displays a sample instead
67 :     of the full matrix. The full dense representation is available via
68 :     \code{as.matrix()}.
69 :     }
70 :     }
71 :     \subsection{NEW FEATURES}{
72 :     \itemize{
73 : feinerer 1437 \item \code{SimpleCorpus} provides a corpus which is optimized for the
74 :     most common usage scenario: importing plain texts from files in a
75 : feinerer 1440 directory or directly from a vector in \R, preprocessing and transforming
76 : feinerer 1437 the texts, and finally exporting them to a term-document matrix. The aim
77 :     is to boost performance and minimize memory pressure. It loads all
78 :     documents into memory, and is designed for medium-sized to large data
79 :     sets.
80 : feinerer 1436 \item \code{inspect()} on text documents as a shorthand for
81 :     \code{writeLines(as.character())}.
82 : feinerer 1450 \item \code{findMostFreqTerms()} finds most frequent terms in a
83 :     document-term or term-document matrix, or a vector of term frequencies.
84 : feinerer 1466 \item \code{tm_parLapply()} is now internally used for the parallelization
85 :     of transformations, filters, and term-document matrix construction. The
86 :     preferred parallelization engine can be registered via
87 :     \code{tm_parLapply_engine()}. The default is to use no parallelization
88 :     (instead of \code{\link[parallel]{mclapply}} (package \pkg{parallel}) in
89 :     previous versions).
90 : feinerer 1436 }
91 :     }
92 :     }
93 : feinerer 1432 \section{Changes in tm version 0.6-2}{
94 :     \subsection{BUG FIXES}{
95 :     \itemize{
96 :     \item \code{format.PlainTextDocument()} now reports only one character
97 :     count for a whole document.
98 :     }
99 :     }
100 :     }
101 : feinerer 1397 \section{Changes in tm version 0.6-1}{
102 : feinerer 1432 \subsection{SIGNIFICANT USER-VISIBLE CHANGES}{
103 :     \itemize{
104 :     \item \code{format.PlainTextDocument()} now displays a compact
105 :     representation instead of the content. Use \code{as.character()} to
106 :     obtain the character content (which in turn can be applied to a corpus
107 :     via \code{lapply()}).
108 :     }
109 :     }
110 : feinerer 1397 \subsection{NEW FEATURES}{
111 :     \itemize{
112 : feinerer 1425 \item \code{ZipSource()} for processing ZIP files.
113 : feinerer 1397 \item Sources now provide \code{open()} and \code{close()}.
114 : feinerer 1425 \item \code{termFreq()} now accepts \code{Span_Tokenizer} and
115 :     \code{Token_Tokenizer} (both from package \pkg{NLP}) objects as
116 :     tokenizers.
117 :     \item \code{readTagged()}, a reader for text documents containing
118 :     POS-tagged words.
119 : feinerer 1397 }
120 :     }
121 : feinerer 1413 \subsection{BUG FIXES}{
122 :     \itemize{
123 :     \item The function \code{removeWords()} now correctly processes words
124 :     being truncations of others. Reported by Александр Труфанов.
125 :     }
126 :     }
127 : feinerer 1397 }
128 : feinerer 1345 \section{Changes in tm version 0.6}{
129 :     \subsection{SIGNIFICANT USER-VISIBLE CHANGES}{
130 :     \itemize{
131 : feinerer 1368 \item \code{DirSource()} and \code{URISource()} now use the argument
132 :     \code{encoding} for conversion via \code{iconv()} to \code{"UTF-8"}.
133 :     \item \code{termFreq()} now uses \code{words()} as the default tokenizer.
134 : feinerer 1345 \item Text documents now provide the functions \code{content()} and
135 :     \code{as.character()} to access the (possibly raw) document content and
136 :     the natural language text in a suitable (not necessarily structured)
137 :     form.
138 : feinerer 1372 \item The internal representation of corpora, sources, and text documents
139 :     changed. Saved objects created with older \pkg{tm} versions are
140 :     incompatible and need to be rebuilt.
141 : feinerer 1345 }
142 :     }
143 :     \subsection{NEW FEATURES}{
144 :     \itemize{
145 :     \item \code{DirSource()} and \code{URISource()} now have a \code{mode}
146 :     argument specifying how elements should be read (no read, binary, text).
147 :     \item Improved high-level documentation on corpora (\code{?Corpus}), text
148 :     documents (\code{?TextDocument}), sources (\code{?Source}), and readers
149 :     (\code{?Reader}).
150 : feinerer 1368 \item Integration with package \pkg{NLP}.
151 :     \item Romanian stopwords. Suggested by Cristian Chirita.
152 :     \item \code{words.PlainTextDocument()} delivers word tokens in the
153 :     document.
154 : feinerer 1345 }
155 :     }
156 :     \subsection{BUG FIXES}{
157 :     \itemize{
158 :     \item The function \code{stemCompletion()} now avoids spurious duplicate
159 :     results. Reported by Seong-Hyeon Kim.
160 :     }
161 :     }
162 :     \subsection{DEPRECATED & DEFUNCT}{
163 :     \itemize{
164 :     \item Following functions have been removed:
165 :     \itemize{
166 :     \item \code{Author()}, \code{DateTimeStamp()}, \code{CMetaData()},
167 :     \code{content_meta()}, \code{DMetaData()}, \code{Description()},
168 :     \code{Heading()}, \code{ID()}, \code{Language()},
169 :     \code{LocalMetaData()}, \code{Origin()}, \code{prescindMeta()},
170 :     \code{sFilter()} (use \code{meta()} instead).
171 :     \item \code{dissimilarity()} (use \code{proxy::dist()} instead).
172 :     \item \code{makeChunks()} (use \code{[} and \code{[[} manually).
173 :     \item \code{summary.Corpus()} and \code{summary.TextRepository()}
174 :     (\code{print()} now gives a more informative but succinct overview).
175 :     \item \code{TextRepository()} and \code{RepoMetaData()} (use e.g. a
176 :     list to store multiple corpora instead).
177 :     }
178 :     }
179 :     }
180 :     }
181 : feinerer 1239 \section{Changes in tm version 0.5-10}{
182 :     \subsection{SIGNIFICANT USER-VISIBLE CHANGES}{
183 :     \itemize{
184 :     \item License changed to GPL-3 (from GPL-2 | GPL-3).
185 : feinerer 1255 \item Following functions have been renamed:
186 :     \itemize{
187 : feinerer 1432 \item \code{tm_tag_score()} to \code{tm_term_score()}.
188 : feinerer 1255 }
189 : feinerer 1239 }
190 :     }
191 : feinerer 1242 \subsection{DEPRECATED & DEFUNCT}{
192 :     \itemize{
193 : feinerer 1253 \item Following functions have been removed:
194 :     \itemize{
195 : feinerer 1277 \item \code{Dictionary()} (use a character vector instead; use
196 : feinerer 1280 \code{Terms()} to extract terms from a document-term or term-document
197 : feinerer 1277 matrix),
198 : feinerer 1258 \item \code{GmaneSource()} (but still available via an example in
199 : feinerer 1283 \code{XMLSource()}),
200 : feinerer 1260 \item \code{preprocessReut21578XML()} (moved to package
201 :     \pkg{tm.corpus.Reuters21578}),
202 : feinerer 1258 \item \code{readGmane()} (but still available via an example in
203 : feinerer 1283 \code{readXML()}),
204 : feinerer 1432 \item \code{searchFullText()} and \code{tm_intersect()}
205 : feinerer 1253 (use \code{grep()} instead).
206 :     }
207 : feinerer 1242 \item Following S3 classes are no longer registered as S4 classes:
208 :     \itemize{
209 : feinerer 1432 \item \code{VCorpus} and \code{PlainTextDocument}.
210 : feinerer 1242 }
211 :     }
212 :     }
213 : feinerer 1239 }
214 : feinerer 1224 \section{Changes in tm version 0.5-9}{
215 :     \subsection{SIGNIFICANT USER-VISIBLE CHANGES}{
216 :     \itemize{
217 : feinerer 1226 \item Stemming functionality is now provided by the package
218 :     \pkg{SnowballC} replacing packages \pkg{Snowball} and \pkg{RWeka}.
219 : feinerer 1224 \item All stopword lists (besides Catalan and SMART) available via
220 :     \code{stopwords()} now come from the Snowball stemmer project.
221 : feinerer 1227 \item Transformations, filters, and term-document matrix construction
222 :     now use \code{\link[parallel]{mclapply}} (package \pkg{parallel}).
223 :     Packages \pkg{snow} and \pkg{Rmpi} are no longer used.
224 : feinerer 1224 }
225 :     }
226 : feinerer 1227 \subsection{DEPRECATED & DEFUNCT}{
227 :     \itemize{
228 :     \item Following functions have been removed:
229 :     \itemize{
230 : feinerer 1432 \item \code{tm_startCluster()} and \code{tm_stopCluster()}.
231 : feinerer 1227 }
232 :     }
233 :     }
234 : feinerer 1224 }
235 : feinerer 1173 \section{Changes in tm version 0.5-8}{
236 :     \subsection{SIGNIFICANT USER-VISIBLE CHANGES}{
237 :     \itemize{
238 :     \item The function \code{termFreq()} now processes the
239 :     \code{tolower} and \code{tokenize} options first.
240 :     }
241 :     }
242 : feinerer 1174 \subsection{NEW FEATURES}{
243 :     \itemize{
244 :     \item Catalan stopwords. Requested by Xavier Fernández i Marín.
245 :     }
246 :     }
247 : feinerer 1173 \subsection{BUG FIXES}{
248 :     \itemize{
249 :     \item The function \code{termFreq()} now correctly accepts
250 :     user-provided stopwords. Reported by Bettina Grün.
251 :     \item The function \code{termFreq()} now correctly handles the
252 :     lower bound of the option \code{wordLength}. Reported by Steven
253 :     C. Bagley.
254 :     }
255 :     }
256 :     }
257 : feinerer 1170 \section{Changes in tm version 0.5-7}{
258 :     \subsection{SIGNIFICANT USER-VISIBLE CHANGES}{
259 :     \itemize{
260 :     \item The function \code{termFreq()} provides two new arguments for
261 :     generalized bounds checking of term frequencies and word
262 :     lengths. This replaces the arguments minDocFreq and
263 :     minWordLength.
264 :     \item The function \code{termFreq()} is now sensitive to the order of
265 :     control options.
266 :     }
267 :     }
268 :     \subsection{NEW FEATURES}{
269 :     \itemize{
270 :     \item Weighting schemata for term-document matrices in SMART notation.
271 :     \item Local and global options for term-document matrix
272 :     construction.
273 :     \item SMART stopword list was added.
274 :     }
275 :     }
276 :     }
277 :     \section{Changes in tm version 0.5-5}{
278 :     \subsection{NEW FEATURES}{
279 :     \itemize{
280 :     \item Access documents in a corpus by names (fallback to IDs if names are
281 :     not set), i.e., allow a string for the corpus operator `[[`.
282 :     }
283 :     }
284 :     \subsection{BUG FIXES}{
285 :     \itemize{
286 :     \item The function \code{findFreqTerms()} now checks bounds on a global level
287 :     (to comply with the manual page) instead per document. Reported
288 :     and fixed by Thomas Zapf-Schramm.
289 :     }
290 :     }
291 :     }
292 :     \section{Changes in tm version 0.5-4}{
293 :     \subsection{SIGNIFICANT USER-VISIBLE CHANGES}{
294 :     \itemize{
295 :     \item Use IETF language tags for language codes (instead of ISO 639-2).
296 :     }
297 :     }
298 :     \subsection{NEW FEATURES}{
299 :     \itemize{
300 :     \item The function \code{tm_tag_score()} provides functionality to score
301 :     documents based on the number of tags found. This is useful for
302 :     sentiment analysis.
303 :     \item The weighting function for term frequency-inverse document
304 :     frequency \code{weightTfIdf()} has now an option for term
305 :     normalization.
306 :     \item Plotting functions to test for Zipf's and Heaps' law on a
307 :     term-document matrix were added: \code{Zipf_plot()} and
308 :     \code{Heaps_plot()}. Contributed by Kurt Hornik.
309 :     }
310 :     }
311 :     }
312 :     \section{Changes in tm version 0.5-3}{
313 :     \subsection{NEW FEATURES}{
314 :     \itemize{
315 :     \item The reader function \code{readRCV1asPlain()} was added and combines the
316 :     functionality of \code{readRCV1()} and \code{as.PlainTextDocument()}.
317 :     \item The function \code{stemCompletion()} has a set of new heuristics.
318 :     }
319 :     }
320 :     }
321 :     \section{Changes in tm version 0.5-2}{
322 :     \subsection{SIGNIFICANT USER-VISIBLE CHANGES}{
323 :     \itemize{
324 :     \item The function \code{termFreq()} which is used for building a
325 :     term-document matrix now uses a whitespace oriented tokenizer
326 :     as default.
327 :     }
328 :     }
329 :     \subsection{NEW FEATURES}{
330 :     \itemize{
331 :     \item A combine method for merging multiple term-document matrices
332 :     was added (\code{c.TermDocumentMatrix()}).
333 :     \item The function \code{termFreq()} has now an option to remove
334 :     punctuation characters.
335 :     }
336 :     }
337 :     \subsection{DEPRECATED & DEFUNCT}{
338 :     \itemize{
339 :     \item Following functions have been removed:
340 :     \itemize{
341 : feinerer 1432 \item \code{CSVSource()} (use \code{DataframeSource(read.csv(..., stringsAsFactors = FALSE))} instead), and
342 : feinerer 1170 \item \code{TermDocMatrix()} (use \code{DocumentTermMatrix()} instead).
343 :     }
344 :     }
345 :     }
346 :     \subsection{BUG FIXES}{
347 :     \itemize{
348 :     \item \code{removeWords()} no longer skips words at the beginning or the end
349 :     of a line. Reported by Mark Kimpel.
350 :     }
351 :     }
352 :     }
353 :     \section{Changes in tm version 0.5-1}{
354 :     \subsection{BUG FIXES}{
355 :     \itemize{
356 :     \item \code{preprocessReut21578XML()} no longer generates invalid file names.
357 :     }
358 :     }
359 :     }
360 :     \section{Changes in tm version 0.5}{
361 :     \subsection{SIGNIFICANT USER-VISIBLE CHANGES}{
362 :     \itemize{
363 :     \item All classes, functions, and generics are reimplemented using
364 :     the S3 class system.
365 :     \item Following functions have been renamed:
366 :     \itemize{
367 : feinerer 1432 \item \code{activateCluster()} to \code{tm_startCluster()},
368 : feinerer 1170 \item \code{asPlain()} to \code{as.PlainTextDocument()},
369 :     \item \code{deactivateCluster()} to \code{tm_stopCluster()},
370 :     \item \code{tmFilter()} to \code{tm_filter()},
371 :     \item \code{tmIndex()} to \code{tm_index()},
372 :     \item \code{tmIntersect()} to \code{tm_intersect()}, and
373 :     \item \code{tmMap()} to \code{tm_map()}.
374 :     }
375 :     \item Mail handling functionality is factored out to the
376 : feinerer 1233 \pkg{tm.plugin.mail} package.
377 : feinerer 1170 }
378 :     }
379 :     \subsection{DEPRECATED & DEFUNCT}{
380 :     \itemize{
381 :     \item Following functions have been removed:
382 :     \itemize{
383 :     \item \code{tmTolower()} (use \code{tolower()} instead), and
384 : feinerer 1172 \item \code{replacePatterns()} (use \code{gsub()} instead).
385 : feinerer 1170 }
386 :     }
387 :     }
388 :     }
389 :     \section{Changes in tm version 0.4}{
390 :     \subsection{SIGNIFICANT USER-VISIBLE CHANGES}{
391 :     \itemize{
392 :     \item The Corpus class is now virtual providing an abstract
393 :     interface.
394 :     \item VCorpus, the default implementation of the abstract corpus
395 :     interface (by subclassing), provides a corpus with volatile (=
396 : feinerer 1438 standard \R object) semantics. It loads all documents into
397 : feinerer 1170 memory, and is designed for small to medium-sized data sets.
398 :     \item PCorpus, an implementation of the abstract corpus interface (by
399 :     subclassing), provides a corpus with permanent storage
400 :     semantics. The actual data is stored in an external database
401 : feinerer 1233 (file) object (as supported by the \pkg{filehash} package), with
402 : feinerer 1170 automatic (un-)loading into memory. It is designed for systems
403 :     with small memory.
404 :     \item Language codes are now in ISO 639-2 (instead of ISO 639-1).
405 :     \item Reader functions no longer have a load argument for lazy
406 :     loading.
407 :     }
408 :     }
409 :     \subsection{NEW FEATURES}{
410 :     \itemize{
411 :     \item The reader function \code{readReut21578XMLasPlain()} was added and
412 :     combines the functionality of \code{readReut21578XML()} and \code{asPlain()}.
413 :     }
414 :     }
415 :     \subsection{BUG FIXES}{
416 :     \itemize{
417 :     \item \code{weightTfIdf()} no longer applies a binary weighting to an input
418 :     matrix in term frequency format (which happened only in 0.3-4).
419 :     }
420 :     }
421 :     }
422 :     \section{Changes in tm version 0.3-4}{
423 :     \subsection{SIGNIFICANT USER-VISIBLE CHANGES}{
424 :     \itemize{
425 :     \item \code{.onLoad()} no longer tries to start a MPI cluster (which often
426 :     failed in misconfigured environments). Use \code{activateCluster()}
427 :     and \code{deactivateCluster()} instead.
428 :     \item DocumentTermMatrix (the improved reimplementation of defunct
429 : feinerer 1233 TermDocMatrix) does not use the \pkg{Matrix} package anymore.
430 : feinerer 1170 }
431 :     }
432 :     \subsection{NEW FEATURES}{
433 :     \itemize{
434 :     \item The \code{DirSource()} constructor now accepts the two new (optional)
435 :     arguments pattern and ignore.case. With pattern one can define
436 :     a regular expression for selecting only matching files, and
437 :     ignore.case specifies whether pattern-matching is
438 :     case-sensitive.
439 :     \item The \code{readNewsgroup()} reader function can now be configured for
440 :     custom date formats (via the DateFormat argument).
441 :     \item The \code{readPDF()} reader function can now be configured (via the
442 :     PdfinfoOptions and PdftotextOptions arguments).
443 :     \item The \code{readDOC()} reader function can now be configured (via the
444 :     AntiwordOptions argument).
445 :     \item Sources now can be vectorized. This allows faster corpus
446 :     construction.
447 :     \item New XMLSource class for arbitrary XML files.
448 :     \item The new \code{readTabular()} reader function allows to create a custom
449 :     tailor-made reader configured via mappings from a tabular data
450 :     structure.
451 :     \item The new \code{readXML()} reader function allows to read in arbitrary
452 :     XML files which are described with a specification.
453 :     \item The new \code{tmReduce()} transformation allows to combine multiple
454 :     maps into one transformation.
455 :     }
456 :     }
457 :     \subsection{DEPRECATED & DEFUNCT}{
458 :     \itemize{
459 :     \item CSVSource is defunct (use DataframeSource instead).
460 :     \item weightLogical is defunct.
461 :     \item TermDocMatrix is defunct (use DocumentTermMatrix or
462 :     TermDocumentMatrix instead).
463 :     }
464 :     }
465 :     }
466 :     \section{Changes in tm version 0.3-3}{
467 :     \subsection{NEW FEATURES}{
468 :     \itemize{
469 :     \item The abstract Source class gets a default implementation for
470 :     the \code{stepNext()} method. It increments the position counter by
471 :     one, a reasonable value for most sources. For special purposes
472 :     custom methods can be created via overloading \code{stepNext()} of
473 :     the subclass.
474 :     \item New URISource class for a single document identified by a
475 :     Uniform Resource Identifier.
476 :     \item New DataframeSource for documents stored in a data frame. Each
477 :     row is interpreted as a single document.
478 :     }
479 :     }
480 :     \subsection{BUG FIXES}{
481 :     \itemize{
482 :     \item Fix off-by-one error in \code{convertMboxEml()} function. Reported by
483 :     Angela Bohn.
484 :     \item Sort row indices in sparse term-document matrices. Kudos to
485 :     Martin Mächler for his suggestions.
486 :     \item Sources and readers no longer evaluate calls in a non-standard
487 :     way.
488 :     }
489 :     }
490 :     }
491 :     \section{Changes in tm version 0.3-2}{
492 :     \subsection{NEW FEATURES}{
493 :     \itemize{
494 :     \item Weighting functions now have an Acronym slot containing
495 :     abbreviations of the weighting functions' names. This is highly
496 :     useful when generating tables with indications which weighting
497 :     scheme was actually used for your experiments.
498 :     \item The functions \code{tmFilter()}, \code{tmIndex()}, \code{tmMap()} and \code{TermDocMatrix()}
499 : feinerer 1233 now can use a MPI cluster (via the \pkg{snow} and \pkg{Rmpi} packages) if
500 : feinerer 1170 available. Use \code{(de)activateCluster()} to manually override
501 :     cluster usage settings. Special thanks to Stefan Theussl for
502 :     his constructive comments.
503 :     \item The Source class receives a new Length slot. It contains the
504 :     number of elements provided by the source (although there
505 :     might be rare cases where the number cannot be determined in
506 :     advance---then it should be set to zero).
507 :     }
508 :     }
509 :     }

R-Forge@R-project.org
ViewVC Help
Powered by ViewVC 1.0.0  
Thanks to:
Vienna University of Economics and Business University of Wisconsin - Madison Powered By FusionForge