From dfb6f96c11c01433dd644aba9f57b728a3cbabc8 Mon Sep 17 00:00:00 2001 From: pakjiddat Date: Fri, 18 Jun 2021 14:31:50 +0000 Subject: [PATCH] Increase package version and resubmit - Since the package has been approved by CRAN, the CRAN-RELEASE file should be removed. A commit should be tagged with the version number, 0.0.1. - Update version number in DESCRIPTION file. - Add change details in user friendly format to NEWS.md. - Correct spelling errors in README.Rmd. - Set development mode of package to release in pkgdown config file. - Test package on different platforms and update cran-comments.md. - Remove the non-standard characters from the example in data-cleaner.R. - Rebuild pkgdown website. --- CRAN-RELEASE | 4 +- DESCRIPTION | 2 +- NEWS.md | 13 ++- R/data-cleaner.R | 12 +-- README.Rmd | 12 +-- _pkgdown.yml | 2 +- cran-comments.md | 11 ++- docs/404.html | 2 +- docs/LICENSE-text.html | 2 +- docs/LICENSE.html | 2 +- docs/articles/features.html | 96 +++++++++++++++------ docs/articles/index.html | 2 +- docs/articles/man/figures/coverage.png | Bin 0 -> 56053 bytes docs/articles/man/figures/top_features.png | Bin 0 -> 64494 bytes docs/articles/overview.html | 23 +++-- docs/authors.html | 2 +- docs/index.html | 7 +- docs/news/index.html | 25 +++++- docs/pkgdown.yml | 2 +- docs/reference/Base.html | 2 +- docs/reference/DataAnalyzer.html | 10 +-- docs/reference/DataCleaner.html | 28 +++--- docs/reference/DataSampler.html | 6 +- docs/reference/EnvManager.html | 2 +- docs/reference/Model.html | 2 +- docs/reference/ModelEvaluator.html | 12 +-- docs/reference/ModelGenerator.html | 4 +- docs/reference/ModelPredictor.html | 8 +- docs/reference/TPGenerator.html | 4 +- docs/reference/TokenGenerator.html | 4 +- docs/reference/index.html | 2 +- docs/reference/wordpredictor-package.html | 2 +- man/DataCleaner.Rd | 24 +++--- tests/testthat/test-c-data-cleaner.R | 12 +-- vignettes/features.Rmd | 24 +++--- vignettes/overview.Rmd | 11 +-- 36 files changed, 234 insertions(+), 142 deletions(-) create mode 100644 docs/articles/man/figures/coverage.png create mode 100644 docs/articles/man/figures/top_features.png diff --git a/CRAN-RELEASE b/CRAN-RELEASE index 866c24d..660d888 100644 --- a/CRAN-RELEASE +++ b/CRAN-RELEASE @@ -1,2 +1,2 @@ -This package was submitted to CRAN on 2021-06-11. -Once it is accepted, delete this file and tag the release (commit 40778a5). +This package was submitted to CRAN on 2021-06-18. +Once it is accepted, delete this file and tag the release (commit 021eb41). diff --git a/DESCRIPTION b/DESCRIPTION index a15fbf7..9bad7a4 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: wordpredictor Title: Develop Text Prediction Models Based on N-Grams -Version: 0.0.1 +Version: 0.0.2 URL: https://github.com/pakjiddat/word-predictor, https://pakjiddat.github.io/word-predictor/ BugReports: https://github.com/pakjiddat/word-predictor/issues Authors@R: diff --git a/NEWS.md b/NEWS.md index 6dad56c..c1281d8 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,14 @@ +# wordpredictor 0.0.2 + +## Bug fixes + + * Fixed small bugs that were causing problems with GitHub actions and CRAN checks. + * Removed custom `.Rprofile` file as it was causing problems with GitHub actions. + * Updated sample code in `features.Rmd` vignette so it does not cause issues with R CMD Check on MacOs. + * Removed `inst/extdata folder` from `.gitignore` since it was causing problems with check-standard workflow on GitHub. + * Removed non-standard characters from example in data-cleaner.R file as they were causing problems with CRAN check on "Debian Linux, R-devel, clang". + * Issues related to the bug fixes: [#318](https://github.com/r-lib/actions/issues/318), [#319](https://github.com/r-lib/actions/issues/319), [#320](https://github.com/r-lib/actions/issues/320) + # wordpredictor 0.0.1 - - Initial Release + * Initial Release. diff --git a/R/data-cleaner.R b/R/data-cleaner.R index 9c5d5b3..73da6ab 100644 --- a/R/data-cleaner.R +++ b/R/data-cleaner.R @@ -156,13 +156,13 @@ DataCleaner <- R6::R6Class( #' ve <- 0 #' # Test data is read #' l <- c( - #' "If you think I’m wrong, send me a link to where it’s happened", - #' "We’re about 90percent done with this room", - #' "“This isn’t how I wanted it between us.”", - #' "Almost any “cute” breed can become ornamental", - #' "Once upon a time there was a kingdom with a castle…", + #' "If you think I'm wrong, send me a link to where it's happened", + #' "We're about 90percent done with this room", + #' "This isn't how I wanted it between us.", + #' "Almost any cute breed can become ornamental", + #' "Once upon a time there was a kingdom with a castle", #' "That's not a thing any of us are granted'", - #' "“Why are you being so difficult?” she asks." + #' "Why are you being so difficult? she asks." #' ) #' # The expected results #' res <- c( diff --git a/README.Rmd b/README.Rmd index 5c506fb..dcae618 100644 --- a/README.Rmd +++ b/README.Rmd @@ -121,7 +121,7 @@ mg <- ModelGenerator$new( # Generates n-gram model. The output is the file def-model.RDS mg$generate_model() -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -146,7 +146,7 @@ mp <- ModelPredictor$new(mf = mfn) # next words are returned along with their respective probabilities. res <- mp$predict_word(words = "how are", 3) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -177,7 +177,7 @@ df <- da$plot_n_gram_stats(opts = list( "dir" = NULL )) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -202,7 +202,7 @@ df <- da$plot_n_gram_stats(opts = list( "dir" = NULL )) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -226,7 +226,7 @@ df <- df[order(df$freq, decreasing = T),] # The frequency of the bi-gram "great_deal" f <- as.numeric(df[df$pre == "great_deal", "freq"]) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -310,7 +310,7 @@ me <- ModelEvaluator$new(mf = mfn, ve = 2) # a data frame and also saved within the model file itself. stats <- me$evaluate_performance(lc = 20, fn = vfn) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` diff --git a/_pkgdown.yml b/_pkgdown.yml index a81b332..27c3e94 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -1,4 +1,4 @@ url: https://pakjiddat.github.io/word-predictor title: Word Predictor development: - mode: unreleased + mode: release diff --git a/cran-comments.md b/cran-comments.md index 6a56ceb..8fe83bb 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -2,10 +2,13 @@ - local, ubuntu 20.04.2, R 3.6.3 - github actions, macos-latest, R release - - rhub, solaris x86, R patched-ods - - rhub, windows-x86_64, R release - - rhub, ubuntu-gcc, R release - - rhub, fedora-clang, R devel + - github actions, windows-latest, R release + - github actions, ubuntu 20.04, R devel + - github actions, ubuntu 20.04, R release + - rhub, debian-clang-devel, R devel + - rhub, fedora-clang-devel, R devel + - rhub, solaris-x86-patched, R release + - rhub, macos-highsierra-release, R release - winbuilder, windows, R devel ## R CMD check results diff --git a/docs/404.html b/docs/404.html index df9d734..2a68018 100644 --- a/docs/404.html +++ b/docs/404.html @@ -71,7 +71,7 @@ Word Predictor - 0.0.1 + 0.0.2 diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html index 5a1f7f5..4b2233b 100644 --- a/docs/LICENSE-text.html +++ b/docs/LICENSE-text.html @@ -71,7 +71,7 @@ Word Predictor - 0.0.1 + 0.0.2 diff --git a/docs/LICENSE.html b/docs/LICENSE.html index 3bef9a7..16d34a7 100644 --- a/docs/LICENSE.html +++ b/docs/LICENSE.html @@ -71,7 +71,7 @@ Word Predictor - 0.0.1 + 0.0.2 diff --git a/docs/articles/features.html b/docs/articles/features.html index aee7b12..13658dd 100644 --- a/docs/articles/features.html +++ b/docs/articles/features.html @@ -31,7 +31,7 @@ Word Predictor - 0.0.1 + 0.0.2 @@ -120,6 +120,9 @@

) # The test environment is setup ed <- setup_env(rf, ve) +#> [1] "CITATION" "demo" "DESCRIPTION" "examples" "extdata" +#> [6] "help" "html" "INDEX" "LICENSE" "Meta" +#> [11] "NAMESPACE" "NEWS.md" "R" # The DataAnalyzer object is created da <- DataAnalyzer$new(ve = ve) @@ -129,16 +132,16 @@

print(fi) #> $file_stats #> fn total_lc max_ll min_ll mean_ll size -#> 1 /tmp/RtmpENXTF8/test-clean.txt 73 50 25 39 2.8 Kb -#> 2 /tmp/RtmpENXTF8/test.txt 73 51 28 41 3 Kb -#> 3 /tmp/RtmpENXTF8/validate-clean.txt 75 48 10 37 2.8 Kb -#> 4 /tmp/RtmpENXTF8/validate.txt 73 50 31 40 2.9 Kb +#> 1 /tmp/RtmpmqAHFH/test-clean.txt 73 50 25 39 2.8 Kb +#> 2 /tmp/RtmpmqAHFH/test.txt 73 51 28 41 3 Kb +#> 3 /tmp/RtmpmqAHFH/validate-clean.txt 75 48 10 37 2.8 Kb +#> 4 /tmp/RtmpmqAHFH/validate.txt 73 50 31 40 2.9 Kb #> #> $overall_stats #> total_lc max_ll min_ll mean_ll total_s #> 1 294 51 31 41 11.5 Kb -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve)

The word count of a text file can be fetched using the command: cat file-name | wc -w. This command should work on all Unix based systems.

@@ -152,6 +155,9 @@

rf <- c("input.txt") # The test environment is setup ed <- setup_env(rf, ve) +#> [1] "CITATION" "demo" "DESCRIPTION" "examples" "extdata" +#> [6] "help" "html" "INDEX" "LICENSE" "Meta" +#> [11] "NAMESPACE" "NEWS.md" "R" # The sample size as a proportion of the input.txt file ssize <- 0.1 @@ -175,7 +181,7 @@

is = T ) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve)

Usually we need a train data set for generating the n-gram model. A test data set for testing the model and a validation data set for evaluating the performance of the model. The following example shows how to generate the train, test and validation files. The train file contains the first 80% of the lines, the test set contains the next 10% of the lines. The remaining lines are in the validation set.

The data in the validation file must be different from the data in the train file. Otherwise it can result in over-fitting of the model. When a model is over-fitted, the model evaluation results will be exaggerated, overly optimistic and unreliable. So care should be taken to ensure that the data in the validation and train files is different.

@@ -184,6 +190,9 @@

rf <- c("input.txt") # The test environment is setup ed <- setup_env(rf, ve) +#> [1] "CITATION" "demo" "DESCRIPTION" "examples" "extdata" +#> [6] "help" "html" "INDEX" "LICENSE" "Meta" +#> [11] "NAMESPACE" "NEWS.md" "R" # An object of class DataSampler is created ds <- DataSampler$new(dir = ed, ve = ve) @@ -197,7 +206,7 @@

) ) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve)

In the above example, dir parameter is the directory containing the input.txt file and the generated test, validation and train data files.

@@ -211,6 +220,9 @@

rf <- c("input.txt") # The test environment is setup ed <- setup_env(rf, ve) +#> [1] "CITATION" "demo" "DESCRIPTION" "examples" "extdata" +#> [6] "help" "html" "INDEX" "LICENSE" "Meta" +#> [11] "NAMESPACE" "NEWS.md" "R" # The data file path fn <- paste0(ed, "/input.txt") @@ -233,7 +245,7 @@

# The sample file is cleaned and saved as input-clean.txt in the ed dir dc$clean_file() -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve)

The clean_file method reads a certain number of lines at a time, cleans the lines of text and saves them to an output text file. It can be used for cleaning large text files.

@@ -246,6 +258,9 @@

rf <- c("test-clean.txt") # The test environment is setup ed <- setup_env(rf, ve) +#> [1] "CITATION" "demo" "DESCRIPTION" "examples" "extdata" +#> [6] "help" "html" "INDEX" "LICENSE" "Meta" +#> [11] "NAMESPACE" "NEWS.md" "R" # The test file path fn <- paste0(ed, "/test-clean.txt") @@ -259,7 +274,7 @@

tg$generate_tokens() } -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve)

The above code generates the files n1.RDS, n2.RDS, n3.RDS and n4.RDS in the data directory. These files contains n-gram tokens along with their frequencies. N-grams of larger size provide more context. Usually n-grams of size 4 are generated.

Two important customization options supported by the TokenGenerator class are min_freq and stem_words. min_freq sets minimum frequency for n-gram tokens. All n-gram tokens with frequency less than min_freq are excluded.

@@ -270,6 +285,9 @@

rf <- c("n2.RDS") # The test environment is setup ed <- setup_env(rf, ve) +#> [1] "CITATION" "demo" "DESCRIPTION" "examples" "extdata" +#> [6] "help" "html" "INDEX" "LICENSE" "Meta" +#> [11] "NAMESPACE" "NEWS.md" "R" # The ngram file name fn <- paste0(ed, "/n2.RDS") @@ -279,13 +297,17 @@

df <- da$plot_n_gram_stats(opts = list( "type" = "top_features", "n" = 10, - "save_to" = NULL, - "dir" = ed -)) -

+ "save_to" = "png", + "dir" = "./man/figures" +)) + +# The output file path +fn <- paste0("./man/figures/top_features.png") +knitr::include_graphics(fn) +

 
-# The test envionment is cleaned up
+# The test environment is cleaned up
 clean_up(ve)

The following example shows the distribution of word frequencies:

@@ -293,6 +315,9 @@ 

rf <- c("n2.RDS") # The test environment is setup ed <- setup_env(rf, ve) +#> [1] "CITATION" "demo" "DESCRIPTION" "examples" "extdata" +#> [6] "help" "html" "INDEX" "LICENSE" "Meta" +#> [11] "NAMESPACE" "NEWS.md" "R" # The ngram file name fn <- paste0(ed, "/n2.RDS") @@ -302,13 +327,17 @@

df <- da$plot_n_gram_stats(opts = list( "type" = "coverage", "n" = 10, - "save_to" = NULL, - "dir" = ed -))

-

+ "save_to" = "png", + "dir" = "./man/figures" +)) + +# The output file path +fn <- paste0("./man/figures/coverage.png") +knitr::include_graphics(fn) +

 
-# The test envionment is cleaned up
+# The test environment is cleaned up
 clean_up(ve)

The following example returns top 10 2-gram tokens that start with and_:

@@ -316,6 +345,9 @@ 

rf <- c("n2.RDS") # The test environment is setup ed <- setup_env(rf, ve) +#> [1] "CITATION" "demo" "DESCRIPTION" "examples" "extdata" +#> [6] "help" "html" "INDEX" "LICENSE" "Meta" +#> [11] "NAMESPACE" "NEWS.md" "R" # The ngram file name fn <- paste0(ed, "/n2.RDS") @@ -377,7 +409,7 @@

 
-# The test envionment is cleaned up
+# The test environment is cleaned up
 clean_up(ve)

@@ -391,12 +423,15 @@

rf <- c("n1.RDS", "n2.RDS", "n3.RDS", "n4.RDS") # The test environment is setup ed <- setup_env(rf, ve) +#> [1] "CITATION" "demo" "DESCRIPTION" "examples" "extdata" +#> [6] "help" "html" "INDEX" "LICENSE" "Meta" +#> [11] "NAMESPACE" "NEWS.md" "R" # The TPGenerator object is created tp <- TPGenerator$new(opts = list(n = 4, dir = ed), ve = ve) # The combined transition probabilities are generated tp$generate_tp() -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve)

The above code produces the file model-4.RDS.

@@ -437,7 +472,7 @@

# Generates n-gram model. The output is the file def-model.RDS mg$generate_model() -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) @@ -451,6 +486,9 @@

rf <- c("def-model.RDS", "validate-clean.txt") # The test environment is setup ed <- setup_env(rf, ve) +#> [1] "CITATION" "demo" "DESCRIPTION" "examples" "extdata" +#> [6] "help" "html" "INDEX" "LICENSE" "Meta" +#> [11] "NAMESPACE" "NEWS.md" "R" # The model file name mfn <- paste0(ed, "/def-model.RDS") @@ -461,7 +499,7 @@

# The intrinsic evaluation is performed on first 20 lines stats <- me$intrinsic_evaluation(lc = 20, fn = vfn) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve)

The following example performs Extrinsic evaluation. It measures the accuracy score for each sentence in validation.txt file. For each sentence the model is used to predict the last word in the sentence given the previous words. If the last word was correctly predicted, then the prediction is considered to be accurate.

@@ -469,6 +507,9 @@ 

rf <- c("def-model.RDS", "validate-clean.txt") # The test environment is setup ed <- setup_env(rf, ve) +#> [1] "CITATION" "demo" "DESCRIPTION" "examples" "extdata" +#> [6] "help" "html" "INDEX" "LICENSE" "Meta" +#> [11] "NAMESPACE" "NEWS.md" "R" # The model file name mfn <- paste0(ed, "/def-model.RDS") @@ -479,7 +520,7 @@

# The intrinsic evaluation is performed on first 100 lines stats <- me$extrinsic_evaluation(lc = 100, fn = vfn) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve)

@@ -491,6 +532,9 @@

rf <- c("def-model.RDS") # The test environment is setup ed <- setup_env(rf, ve) +#> [1] "CITATION" "demo" "DESCRIPTION" "examples" "extdata" +#> [6] "help" "html" "INDEX" "LICENSE" "Meta" +#> [11] "NAMESPACE" "NEWS.md" "R" # The model file name mfn <- paste0(ed, "/def-model.RDS") @@ -501,7 +545,7 @@

# next words are returned along with their respective probabilities. res <- mp$predict_word(words = "how are", 3) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve)

diff --git a/docs/articles/index.html b/docs/articles/index.html index 1ad5200..f0d566b 100644 --- a/docs/articles/index.html +++ b/docs/articles/index.html @@ -71,7 +71,7 @@ Word Predictor - 0.0.1 + 0.0.2 diff --git a/docs/articles/man/figures/coverage.png b/docs/articles/man/figures/coverage.png new file mode 100644 index 0000000000000000000000000000000000000000..47b7eda5b1773de0cccf7f6ae07864ca14ac3ead GIT binary patch literal 56053 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 gb6Rg)wgg{cqHK)@Xa|7x0c-(nE90@_G?Cw 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 QZ;<~yUHx3vIVCg!0QK-OVgLXD literal 0 HcmV?d00001 diff --git a/docs/articles/overview.html b/docs/articles/overview.html index 24cf1e6..7965272 100644 --- a/docs/articles/overview.html +++ b/docs/articles/overview.html @@ -31,7 +31,7 @@ Word Predictor - 0.0.1 + 0.0.2 @@ -173,7 +173,7 @@

# ./data/model/def-model.RDS mg$generate_model() -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve)
@@ -186,6 +186,9 @@

rf <- c("def-model.RDS", "validate-clean.txt") # The test environment is setup ed <- setup_env(rf, ve) +#> [1] "CITATION" "demo" "DESCRIPTION" "examples" "extdata" +#> [6] "help" "html" "INDEX" "LICENSE" "Meta" +#> [11] "NAMESPACE" "NEWS.md" "R" # The model file name mfn <- paste0(ed, "/def-model.RDS") @@ -196,7 +199,7 @@

# The intrinsic evaluation is performed on first 20 lines stats <- me$intrinsic_evaluation(lc = 20, fn = vfn) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve)

The following example performs extrinsic evaluation. It measures the accuracy score for each sentence in validation.txt file. For each sentence the model is used to predict the last word in the sentence given the previous words. If the last word was correctly predicted, then the prediction is considered to be accurate. The extrinsic evaluation returns the number of correct and incorrect predictions.

@@ -204,6 +207,9 @@ 

rf <- c("def-model.RDS", "validate-clean.txt") # The test environment is setup ed <- setup_env(rf, ve) +#> [1] "CITATION" "demo" "DESCRIPTION" "examples" "extdata" +#> [6] "help" "html" "INDEX" "LICENSE" "Meta" +#> [11] "NAMESPACE" "NEWS.md" "R" # The model file name mfn <- paste0(ed, "/def-model.RDS") @@ -214,7 +220,7 @@

# The intrinsic evaluation is performed on first 100 lines stats <- me$extrinsic_evaluation(lc = 100, fn = vfn) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve)

@@ -226,6 +232,9 @@

rf <- c("def-model.RDS", "validate-clean.txt") # The test environment is setup ed <- setup_env(rf, ve) +#> [1] "CITATION" "demo" "DESCRIPTION" "examples" "extdata" +#> [6] "help" "html" "INDEX" "LICENSE" "Meta" +#> [11] "NAMESPACE" "NEWS.md" "R" # The model file name mfn <- paste0(ed, "/def-model.RDS") @@ -235,7 +244,7 @@

# Given the words: "how are", the next word is predicted. The top 3 most likely # next words are returned along with their respective probabilities. res <- mp$predict_word(words = "how are", 3) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve)

@@ -247,8 +256,8 @@

Package dependencies

-

The wordpredictor package uses the following packages: digest, dply, ggplot2, pryr, R6, testthat and stingr

-

The following packages were useful during package development: quanteda, tm and hash lintr styler pkgdown

+

The wordpredictor package uses the following packages: digest, dply, ggplot2, R6, testthat and stingr

+

The following packages were useful during package development: quanteda, tm and hash lintr styler pkgdown pryr,

diff --git a/docs/index.html b/docs/index.html index 192c535..aba9648 100644 --- a/docs/index.html +++ b/docs/index.html @@ -38,7 +38,7 @@ Word Predictor - 0.0.1 + 0.0.2

@@ -390,6 +390,8 @@

+
+

+wordpredictor 0.0.2 Unreleased +

+
+

+Bug fixes

+
    +
  • Fixed small bugs that were causing problems with GitHub actions and CRAN checks.
  • +
  • Removed custom .Rprofile file as it was causing problems with GitHub actions.
  • +
  • Updated sample code in features.Rmd vignette so it does not cause issues with R CMD Check on MacOs.
  • +
  • Removed inst/extdata folder from .gitignore since it was causing problems with check-standard workflow on GitHub.
  • +
  • Removed non-standard characters from example in data-cleaner.R file as they were causing problems with CRAN check on “Debian Linux, R-devel, clang”.
  • +
  • Issues related to the bug fixes: #318, #319, #320 +
  • +
+
+

-wordpredictor 0.0.1

+wordpredictor 0.0.1 2021-06-14 +

    -
  • Initial Release
  • +
  • Initial Release.
diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index f11f9f8..84416b2 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -4,7 +4,7 @@ pkgdown_sha: ~ articles: features: features.html overview: overview.html -last_built: 2021-06-14T04:00Z +last_built: 2021-06-18T13:35Z urls: reference: https://pakjiddat.github.io/word-predictor/reference article: https://pakjiddat.github.io/word-predictor/articles diff --git a/docs/reference/Base.html b/docs/reference/Base.html index f9c4eb7..e2a4d73 100644 --- a/docs/reference/Base.html +++ b/docs/reference/Base.html @@ -73,7 +73,7 @@ Word Predictor - 0.0.1 + 0.0.2 diff --git a/docs/reference/DataAnalyzer.html b/docs/reference/DataAnalyzer.html index f865637..3516f7e 100644 --- a/docs/reference/DataAnalyzer.html +++ b/docs/reference/DataAnalyzer.html @@ -76,7 +76,7 @@ Word Predictor - 0.0.1 + 0.0.2 @@ -379,7 +379,7 @@

Examp em <- EnvManager$new(ve = ve, rp = "./") # The required files are downloaded ed <- em$setup_env(rf, fn) -# End of environment setup code +
#> [1] "CITATION" "examples" "extdata"
# End of environment setup code # The n-gram file name nfn <- paste0(ed, "/n2.RDS") @@ -427,7 +427,7 @@

Examp em <- EnvManager$new(ve = ve, rp = "./") # The required files are downloaded ed <- em$setup_env(rf, fn) -# End of environment setup code +

#> [1] "CITATION" "examples" "extdata"
# End of environment setup code # The test file name cfn <- paste0(ed, "/test.txt") @@ -439,7 +439,7 @@

Examp print(fi)

#> $file_stats #> fn total_lc max_ll min_ll mean_ll size -#> 1 /tmp/RtmpNqf9Ge/test.txt 73 51 28 41 3 Kb +#> 1 /tmp/Rtmpgcy76G/test.txt 73 51 28 41 3 Kb #> #> $overall_stats #> total_lc max_ll min_ll mean_ll total_s @@ -466,7 +466,7 @@

Examp em <- EnvManager$new(ve = ve, rp = "./") # The required files are downloaded ed <- em$setup_env(rf, fn) -# End of environment setup code +

#> [1] "CITATION" "examples" "extdata"
# End of environment setup code # The n-gram file name nfn <- paste0(ed, "/n2.RDS") diff --git a/docs/reference/DataCleaner.html b/docs/reference/DataCleaner.html index 7a7c99c..7898ad8 100644 --- a/docs/reference/DataCleaner.html +++ b/docs/reference/DataCleaner.html @@ -73,7 +73,7 @@ Word Predictor - 0.0.1 + 0.0.2
@@ -261,13 +261,13 @@

Exa ve <- 0 # Test data is read l <- c( - "If you think I’m wrong, send me a link to where it’s happened", - "We’re about 90percent done with this room", - "“This isn’t how I wanted it between us.”", - "Almost any “cute” breed can become ornamental", - "Once upon a time there was a kingdom with a castle…", + "If you think I'm wrong, send me a link to where it's happened", + "We're about 90percent done with this room", + "This isn't how I wanted it between us.", + "Almost any cute breed can become ornamental", + "Once upon a time there was a kingdom with a castle", "That's not a thing any of us are granted'", - "“Why are you being so difficult?” she asks." + "Why are you being so difficult? she asks." ) # The expected results res <- c( @@ -319,7 +319,7 @@

Examp em <- EnvManager$new(ve = ve, rp = "./") # The required files are downloaded ed <- em$setup_env(rf, fn) -# End of environment setup code +
#> [1] "CITATION" "examples" "extdata"
# End of environment setup code # The cleaned test file name cfn <- paste0(ed, "/test-clean.txt") @@ -344,13 +344,13 @@

Examp ve <- 0 # Test data is read l <- c( - "If you think I’m wrong, send me a link to where it’s happened", - "We’re about 90percent done with this room", - "“This isn’t how I wanted it between us.”", - "Almost any “cute” breed can become ornamental", - "Once upon a time there was a kingdom with a castle…", + "If you think I'm wrong, send me a link to where it's happened", + "We're about 90percent done with this room", + "This isn't how I wanted it between us.", + "Almost any cute breed can become ornamental", + "Once upon a time there was a kingdom with a castle", "That's not a thing any of us are granted'", - "“Why are you being so difficult?” she asks." + "Why are you being so difficult? she asks." ) # The expected results res <- c( diff --git a/docs/reference/DataSampler.html b/docs/reference/DataSampler.html index f0b7544..465f41e 100644 --- a/docs/reference/DataSampler.html +++ b/docs/reference/DataSampler.html @@ -76,7 +76,7 @@ Word Predictor - 0.0.1 + 0.0.2

@@ -324,7 +324,7 @@

Examp em <- EnvManager$new(ve = ve, rp = "./") # The required files are downloaded ed <- em$setup_env(rf, fn) -# End of environment setup code +
#> [1] "CITATION" "examples" "extdata"
# End of environment setup code # The sample file name sfn <- paste0(ed, "/sample.txt") @@ -362,7 +362,7 @@

Examp em <- EnvManager$new(ve = ve) # The required files are downloaded ed <- em$setup_env(rf, fn) -# End of environment setup code +

#> [1] "CITATION" "examples" "extdata"
# End of environment setup code # The files to clean fns <- c("train", "test", "validate") diff --git a/docs/reference/EnvManager.html b/docs/reference/EnvManager.html index fad8928..e1aa57a 100644 --- a/docs/reference/EnvManager.html +++ b/docs/reference/EnvManager.html @@ -74,7 +74,7 @@ Word Predictor - 0.0.1 + 0.0.2
diff --git a/docs/reference/Model.html b/docs/reference/Model.html index 05bc868..844c301 100644 --- a/docs/reference/Model.html +++ b/docs/reference/Model.html @@ -75,7 +75,7 @@ Word Predictor - 0.0.1 + 0.0.2 diff --git a/docs/reference/ModelEvaluator.html b/docs/reference/ModelEvaluator.html index 3ad2e7a..53fcb20 100644 --- a/docs/reference/ModelEvaluator.html +++ b/docs/reference/ModelEvaluator.html @@ -77,7 +77,7 @@ Word Predictor - 0.0.1 + 0.0.2 @@ -458,7 +458,7 @@

Examp em <- EnvManager$new(ve = ve, rp = "./") # The required files are downloaded ed <- em$setup_env(rf, fn) -# End of environment setup code +
#> [1] "CITATION" "examples" "extdata"
# End of environment setup code # ModelEvaluator class object is created me <- ModelEvaluator$new(ve = ve) # The performance evaluation is performed @@ -488,7 +488,7 @@

Examp em <- EnvManager$new(ve = ve, rp = "./") # The required files are downloaded ed <- em$setup_env(rf, fn) -# End of environment setup code +

#> [1] "CITATION" "examples" "extdata"
# End of environment setup code # The model file name mfn <- paste0(ed, "/def-model.RDS") @@ -505,7 +505,7 @@

Examp #> [1] 279320 #> #> $t -#> [1] 0.759 +#> [1] 0.747 #> #> $p #> [1] 2297.35 @@ -534,7 +534,7 @@

Examp em <- EnvManager$new(ve = ve, rp = "./") # The required files are downloaded ed <- em$setup_env(rf, fn) -# End of environment setup code +

#> [1] "CITATION" "examples" "extdata"
# End of environment setup code # The model file name mfn <- paste0(ed, "/def-model.RDS") @@ -577,7 +577,7 @@

Examp em <- EnvManager$new(ve = ve, rp = "./") # The required files are downloaded ed <- em$setup_env(rf, fn) -# End of environment setup code +

#> [1] "CITATION" "examples" "extdata"
# End of environment setup code # The model file name mfn <- paste0(ed, "/def-model.RDS") diff --git a/docs/reference/ModelGenerator.html b/docs/reference/ModelGenerator.html index 53b7f88..6d33efc 100644 --- a/docs/reference/ModelGenerator.html +++ b/docs/reference/ModelGenerator.html @@ -73,7 +73,7 @@ Word Predictor - 0.0.1 + 0.0.2
@@ -282,7 +282,7 @@

Examp em <- EnvManager$new(ve = ve, rp = "./") # The required files are downloaded ed <- em$setup_env(rf, fn) -# End of environment setup code +
#> [1] "CITATION" "examples" "extdata"
# End of environment setup code # ModelGenerator class object is created mg <- ModelGenerator$new( diff --git a/docs/reference/ModelPredictor.html b/docs/reference/ModelPredictor.html index c9b5754..2a7c651 100644 --- a/docs/reference/ModelPredictor.html +++ b/docs/reference/ModelPredictor.html @@ -75,7 +75,7 @@ Word Predictor - 0.0.1 + 0.0.2
@@ -379,7 +379,7 @@

Examp em <- EnvManager$new(ve = ve, rp = "./") # The required files are downloaded ed <- em$setup_env(rf, fn) -# End of environment setup code +
#> [1] "CITATION" "examples" "extdata"
# End of environment setup code # The model file name mfn <- paste0(ed, "/def-model.RDS") @@ -414,7 +414,7 @@

Examp em <- EnvManager$new(ve = ve, "rp" = "./") # The required files are downloaded ed <- em$setup_env(rf, fn) -# End of environment setup code +

#> [1] "CITATION" "examples" "extdata"
# End of environment setup code # The model file name mfn <- paste0(ed, "/def-model.RDS") @@ -456,7 +456,7 @@

Examp em <- EnvManager$new(ve = ve, "rp" = "./") # The required files are downloaded ed <- em$setup_env(rf, fn) -# End of environment setup code +

#> [1] "CITATION" "examples" "extdata"
# End of environment setup code # The model file name mfn <- paste0(ed, "/def-model.RDS") diff --git a/docs/reference/TPGenerator.html b/docs/reference/TPGenerator.html index 0966f01..8ac169b 100644 --- a/docs/reference/TPGenerator.html +++ b/docs/reference/TPGenerator.html @@ -75,7 +75,7 @@ Word Predictor - 0.0.1 + 0.0.2
@@ -290,7 +290,7 @@

Examp em <- EnvManager$new(ve = ve, rp = "./") # The required files are downloaded ed <- em$setup_env(rf, fn) -# End of environment setup code +
#> [1] "CITATION" "examples" "extdata"
# End of environment setup code # The list of output files fns <- c("words", "model-4", "tp2", "tp3", "tp4") diff --git a/docs/reference/TokenGenerator.html b/docs/reference/TokenGenerator.html index dbf6b8d..0e4b107 100644 --- a/docs/reference/TokenGenerator.html +++ b/docs/reference/TokenGenerator.html @@ -73,7 +73,7 @@ Word Predictor - 0.0.1 + 0.0.2
@@ -259,7 +259,7 @@

Examp em <- EnvManager$new(ve = ve, rp = "./") # The required files are downloaded ed <- em$setup_env(rf, fn) -# End of environment setup code +
#> [1] "CITATION" "examples" "extdata"
# End of environment setup code # The n-gram size n <- 4 diff --git a/docs/reference/index.html b/docs/reference/index.html index 8a6e168..cacd4f8 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -71,7 +71,7 @@ Word Predictor - 0.0.1 + 0.0.2
diff --git a/docs/reference/wordpredictor-package.html b/docs/reference/wordpredictor-package.html index 1c97b63..21d5764 100644 --- a/docs/reference/wordpredictor-package.html +++ b/docs/reference/wordpredictor-package.html @@ -79,7 +79,7 @@ Word Predictor - 0.0.1 + 0.0.2 diff --git a/man/DataCleaner.Rd b/man/DataCleaner.Rd index 56cd81c..734f9e9 100644 --- a/man/DataCleaner.Rd +++ b/man/DataCleaner.Rd @@ -57,13 +57,13 @@ em$td_env() ve <- 0 # Test data is read l <- c( - "If you think I’m wrong, send me a link to where it’s happened", - "We’re about 90percent done with this room", - "“This isn’t how I wanted it between us.”", - "Almost any “cute” breed can become ornamental", - "Once upon a time there was a kingdom with a castle…", + "If you think I'm wrong, send me a link to where it's happened", + "We're about 90percent done with this room", + "This isn't how I wanted it between us.", + "Almost any cute breed can become ornamental", + "Once upon a time there was a kingdom with a castle", "That's not a thing any of us are granted'", - "“Why are you being so difficult?” she asks." + "Why are you being so difficult? she asks." ) # The expected results res <- c( @@ -223,13 +223,13 @@ The cleaned lines of text. ve <- 0 # Test data is read l <- c( - "If you think I’m wrong, send me a link to where it’s happened", - "We’re about 90percent done with this room", - "“This isn’t how I wanted it between us.”", - "Almost any “cute” breed can become ornamental", - "Once upon a time there was a kingdom with a castle…", + "If you think I'm wrong, send me a link to where it's happened", + "We're about 90percent done with this room", + "This isn't how I wanted it between us.", + "Almost any cute breed can become ornamental", + "Once upon a time there was a kingdom with a castle", "That's not a thing any of us are granted'", - "“Why are you being so difficult?” she asks." + "Why are you being so difficult? she asks." ) # The expected results res <- c( diff --git a/tests/testthat/test-c-data-cleaner.R b/tests/testthat/test-c-data-cleaner.R index c013bc4..cbd5e00 100644 --- a/tests/testthat/test-c-data-cleaner.R +++ b/tests/testthat/test-c-data-cleaner.R @@ -29,13 +29,13 @@ test_that("Sample line of text are cleaned as expected", { # Test data is read l <- c( - "If you think I'm wrong, send me a link to where it's happened", - "We're about 90percent done with this room", - "This isn't how I wanted it between us.", - "Almost any cute breed can become ornamental", - "Once upon a time there was a kingdom with a castle", + "If you think I’m wrong, send me a link to where it’s happened", + "We’re about 90percent done with this room", + "“This isn’t how I wanted it between us.”", + "Almost any “cute” breed can become ornamental", + "Once upon a time there was a kingdom with a castle…", "That's not a thing any of us are granted'", - "Why are you being so difficult? she asks." + "“Why are you being so difficult?” she asks." ) # The expected results res <- c( diff --git a/vignettes/features.Rmd b/vignettes/features.Rmd index ca8ca32..f9dad89 100644 --- a/vignettes/features.Rmd +++ b/vignettes/features.Rmd @@ -77,7 +77,7 @@ fi <- da$get_file_info(ed) # The file information is printed print(fi) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -116,7 +116,7 @@ ds$generate_sample( is = T ) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -142,7 +142,7 @@ ds$generate_data( ) ) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -180,7 +180,7 @@ dc <- DataCleaner$new(fn, dc_opts, ve = ve) # The sample file is cleaned and saved as input-clean.txt in the ed dir dc$clean_file() -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -207,7 +207,7 @@ for (n in 1:4) { tg$generate_tokens() } -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -269,7 +269,7 @@ df <- da$plot_n_gram_stats(opts = list( fn <- paste0("./man/figures/coverage.png") knitr::include_graphics(fn) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -292,7 +292,7 @@ df <- df[order(df$freq, decreasing = T),] # The first 10 rows of the data frame are printed knitr::kable(df[1:10,], col.names = c("Prefix", "Frequency")) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -313,7 +313,7 @@ tp <- TPGenerator$new(opts = list(n = 4, dir = ed), ve = ve) # The combined transition probabilities are generated tp$generate_tp() -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -353,7 +353,7 @@ mg <- ModelGenerator$new( # Generates n-gram model. The output is the file def-model.RDS mg$generate_model() -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -377,7 +377,7 @@ me <- ModelEvaluator$new(mf = mfn, ve = ve) # The intrinsic evaluation is performed on first 20 lines stats <- me$intrinsic_evaluation(lc = 20, fn = vfn) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -398,7 +398,7 @@ me <- ModelEvaluator$new(mf = mfn, ve = ve) # The intrinsic evaluation is performed on first 100 lines stats <- me$extrinsic_evaluation(lc = 100, fn = vfn) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -421,6 +421,6 @@ mp <- ModelPredictor$new(mf = mfn, ve = ve) # next words are returned along with their respective probabilities. res <- mp$predict_word(words = "how are", 3) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` diff --git a/vignettes/overview.Rmd b/vignettes/overview.Rmd index 609c5f9..eb78847 100644 --- a/vignettes/overview.Rmd +++ b/vignettes/overview.Rmd @@ -141,7 +141,7 @@ mg <- ModelGenerator$new( # ./data/model/def-model.RDS mg$generate_model() -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -165,7 +165,7 @@ me <- ModelEvaluator$new(mf = mfn, ve = ve) # The intrinsic evaluation is performed on first 20 lines stats <- me$intrinsic_evaluation(lc = 20, fn = vfn) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -186,7 +186,7 @@ me <- ModelEvaluator$new(mf = mfn, ve = ve) # The intrinsic evaluation is performed on first 100 lines stats <- me$extrinsic_evaluation(lc = 100, fn = vfn) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -208,7 +208,7 @@ mp <- ModelPredictor$new(mf = mfn, ve = ve) # Given the words: "how are", the next word is predicted. The top 3 most likely # next words are returned along with their respective probabilities. res <- mp$predict_word(words = "how are", 3) -# The test envionment is cleaned up +# The test environment is cleaned up clean_up(ve) ``` @@ -220,7 +220,7 @@ The wordpredictor package includes a demo called "word-predictor". The demo is a ## Package dependencies -The wordpredictor package uses the following packages: [digest](https://cran.r-project.org/package=digest), [dply](https://cran.r-project.org/package=dplyr), [ggplot2](https://cran.r-project.org/package=ggplot2), [pryr](https://cran.r-project.org/package=pryr), +The wordpredictor package uses the following packages: [digest](https://cran.r-project.org/package=digest), [dply](https://cran.r-project.org/package=dplyr), [ggplot2](https://cran.r-project.org/package=ggplot2), [R6](https://cran.r-project.org/package=R6), [testthat](https://cran.r-project.org/package=testthat) and [stingr](https://cran.r-project.org/package=stringr) @@ -232,6 +232,7 @@ The following packages were useful during package development: [lintr](https://cran.r-project.org/package=lintr) [styler](https://cran.r-project.org/package=styler) [pkgdown](https://cran.r-project.org/package=pkgdown) +[pryr](https://cran.r-project.org/package=pryr), ## Useful Links