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

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