Science Score: 23.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
○.zenodo.json file
-
○DOI references
-
○Academic publication links
-
✓Committers with academic emails
1 of 10 committers (10.0%) from academic institutions -
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (16.6%) to scientific vocabulary
Keywords
peer-reviewed
r
r-package
rstats
Keywords from Contributors
genome
tidyverse
package-creation
weather-data
geocode
taxonomy
taxize
crypto-currency-exchanges
setup
tidy-data
Last synced: 10 months ago
·
JSON representation
Repository
Detect text reuse and document similarity
Basic Info
- Host: GitHub
- Owner: ropensci
- Language: R
- Default Branch: master
- Homepage: https://docs.ropensci.org/textreuse
- Size: 3.88 MB
Statistics
- Stars: 202
- Watchers: 26
- Forks: 34
- Open Issues: 18
- Releases: 1
Topics
peer-reviewed
r
r-package
rstats
Created over 11 years ago
· Last pushed over 1 year ago
Metadata Files
Readme
Changelog
README.Rmd
---
output: md_document
title: Detect Text Reuse and Document Similarity
---
```{r, echo = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "README-"
)
suppressPackageStartupMessages(library(dplyr))
```
# textreuse
[](https://cran.r-project.org/package=textreuse)
[](https://cran.r-project.org/package=textreuse)
[](https://travis-ci.org/ropensci/textreuse)
[](https://ci.appveyor.com/project/lmullen/textreuse-6xljc/branch/master)
[](https://codecov.io/github/ropensci/textreuse?branch=master)
[](https://github.com/ropensci/onboarding/issues/20)
## Overview
This [R](https://www.r-project.org/) package provides a set of functions for measuring similarity among documents and detecting passages which have been reused. It implements shingled n-gram, skip n-gram, and other tokenizers; similarity/dissimilarity functions; pairwise comparisons; minhash and locality sensitive hashing algorithms; and a version of the Smith-Waterman local alignment algorithm suitable for natural language. It is broadly useful for, for example, detecting duplicate documents in a corpus prior to text analysis, or for identifying borrowed passages between texts. The classes provides by this package follow the model of other natural language processing packages for R, especially the [NLP](https://cran.r-project.org/package=NLP) and [tm](https://cran.r-project.org/package=tm) packages. (However, this package has no dependency on Java, which should make it easier to install.)
### Citation
If you use this package for scholarly research, I would appreciate a citation.
```{r}
citation("textreuse")
```
## Installation
To install this package from CRAN:
```{r eval=FALSE}
install.packages("textreuse")
```
To install the development version from GitHub, use [devtools](https://github.com/hadley/devtools).
```{r eval=FALSE}
# install.packages("devtools")
devtools::install_github("ropensci/textreuse", build_vignettes = TRUE)
```
## Examples
There are three main approaches that one may take when using this package: pairwise comparisons, minhashing/locality sensitive hashing, and extracting matching passages through text alignment.
See the [introductory vignette](https://cran.r-project.org/package=textreuse/vignettes/textreuse-introduction.html) for a description of the classes provided by this package.
```{r eval = FALSE}
vignette("textreuse-introduction", package = "textreuse")
```
### Pairwise comparisons
In this example we will load a tiny corpus of three documents. These documents are drawn from Kellen Funk's [research](http://kellenfunk.org/field-code/) into the propagation of legal codes of civil procedure in the nineteenth-century United States.
```{r}
library(textreuse)
dir <- system.file("extdata/legal", package = "textreuse")
corpus <- TextReuseCorpus(dir = dir, meta = list(title = "Civil procedure"),
tokenizer = tokenize_ngrams, n = 7)
```
We have loaded the three documents into a corpus, which involves tokenizing the text and hashing the tokens. We can inspect the corpus as a whole or the individual documents that make it up.
```{r}
corpus
names(corpus)
corpus[["ca1851-match"]]
```
Now we can compare each of the documents to one another. The `pairwise_compare()` function applies a comparison function (in this case, `jaccard_similarity()`) to every pair of documents. The result is a matrix of scores. As we would expect, some documents are similar and others are not.
```{r}
comparisons <- pairwise_compare(corpus, jaccard_similarity)
comparisons
```
We can convert that matrix to a data frame of pairs and scores if we prefer.
```{r}
pairwise_candidates(comparisons)
```
See the [pairwise vignette](https://cran.r-project.org/package=textreuse/vignettes/textreuse-pairwise.html) for a fuller description.
```{r eval=FALSE}
vignette("textreuse-pairwise", package = "textreuse")
```
### Minhashing and locality sensitive hashing
Pairwise comparisons can be very time-consuming because they grow geometrically with the size of the corpus. (A corpus with 10 documents would require at least 45 comparisons; a corpus with 100 documents would require 4,950 comparisons; a corpus with 1,000 documents would require 499,500 comparisons.) That's why this package implements the minhash and locality sensitive hashing algorithms, which can detect candidate pairs much faster than pairwise comparisons in corpora of any significant size.
For this example we will load a small corpus of ten documents published by the American Tract Society. We will also create a minhash function, which represents an entire document (regardless of length) by a fixed number of integer hashes. When we create the corpus, the documents will each have a minhash signature.
```{r}
dir <- system.file("extdata/ats", package = "textreuse")
minhash <- minhash_generator(200, seed = 235)
ats <- TextReuseCorpus(dir = dir,
tokenizer = tokenize_ngrams, n = 5,
minhash_func = minhash)
```
Now we can calculate potential matches, extract the candidates, and apply a comparison function to just those candidates.
```{r}
buckets <- lsh(ats, bands = 50, progress = FALSE)
candidates <- lsh_candidates(buckets)
scores <- lsh_compare(candidates, ats, jaccard_similarity, progress = FALSE)
scores
```
For details, see the [minhash vignette](https://cran.r-project.org/package=textreuse/vignettes/textreuse-minhash.html).
```{r eval=FALSE}
vignette("textreuse-minhash", package = "textreuse")
```
### Text alignment
We can also extract the optimal alignment between two documents with a version of the [Smith-Waterman](https://en.wikipedia.org/wiki/Smith-Waterman_algorithm) algorithm, used for protein sequence alignment, adapted for natural language. The longest matching substring according to scoring values will be extracted, and variations in the alignment will be marked.
```{r}
a <- "'How do I know', she asked, 'if this is a good match?'"
b <- "'This is a match', he replied."
align_local(a, b)
```
For details, see the [text alignment vignette](https://cran.r-project.org/package=textreuse/vignettes/textreuse-alignment.html).
```{r eval=FALSE}
vignette("textreuse-alignment", package = "textreuse")
```
### Parallel processing
Loading the corpus and creating tokens benefit from using multiple cores, if available. (This works only on non-Windows machines.) To use multiple cores, set `options("mc.cores" = 4L)`, where the number is how many cores you wish to use.
### Contributing and acknowledgments
Please note that this project is released with a [Contributor Code of Conduct](https://github.com/ropensci/textreuse/blob/master/CONDUCT.md). By participating in this project you agree to abide by its terms.
Thanks to [Noam Ross](http://www.noamross.net/) for his thorough [peer review](https://github.com/ropensci/onboarding/issues/20) of this package for [rOpenSci](https://ropensci.org/).
------------------------------------------------------------------------
[](http://ropensci.org)
Owner
- Name: rOpenSci
- Login: ropensci
- Kind: organization
- Email: info@ropensci.org
- Location: Berkeley, CA
- Website: https://ropensci.org/
- Twitter: rOpenSci
- Repositories: 307
- Profile: https://github.com/ropensci
GitHub Events
Total
- Issues event: 1
- Watch event: 4
- Issue comment event: 4
- Push event: 1
- Pull request event: 4
Last Year
- Issues event: 1
- Watch event: 4
- Issue comment event: 4
- Push event: 1
- Pull request event: 4
Committers
Last synced: about 1 year ago
Top Committers
| Name | Commits | |
|---|---|---|
| Lincoln Mullen | l****n@l****m | 261 |
| Yaoxiang Li | l****g@o****m | 6 |
| Romain Francois | r****n@r****m | 2 |
| Noam Ross | n****s@g****m | 2 |
| Mayeul Kauffmann | m****k | 1 |
| Karthik Ram | k****m@g****m | 1 |
| Jeroen Ooms | j****s@g****m | 1 |
| Jaime Ashander | j****r@u****u | 1 |
| rOpenSci Bot | m****t@g****m | 1 |
| ironholds | i****s@g****m | 1 |
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 11 months ago
All Time
- Total issues: 91
- Total pull requests: 12
- Average time to close issues: about 1 month
- Average time to close pull requests: about 1 year
- Total issue authors: 18
- Total pull request authors: 9
- Average comments per issue: 0.77
- Average comments per pull request: 1.08
- Merged pull requests: 8
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 2
- Pull requests: 4
- Average time to close issues: N/A
- Average time to close pull requests: 1 day
- Issue authors: 1
- Pull request authors: 1
- Average comments per issue: 0.5
- Average comments per pull request: 0.5
- Merged pull requests: 2
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- lmullen (70)
- bihappywater (2)
- retrography (2)
- maelle (2)
- mayeulk (2)
- ManuelBurghardt (1)
- pommedeterresautee (1)
- Lrantala (1)
- under-score (1)
- Ninoninoninonino (1)
- mdlincoln (1)
- tylerandrewscott (1)
- ghost (1)
- vmustafa (1)
- awagner-mainz (1)
Pull Request Authors
- mayeulk (4)
- romainfrancois (2)
- jeroen (2)
- ashander (1)
- noamross (1)
- davidfuhry (1)
- Ironholds (1)
- quartin (1)
- karthik (1)
Top Labels
Issue Labels
help wanted (1)
Pull Request Labels
Packages
- Total packages: 2
-
Total downloads:
- cran 552 last-month
- Total docker downloads: 110,562
-
Total dependent packages: 2
(may contain duplicates) -
Total dependent repositories: 2
(may contain duplicates) - Total versions: 12
- Total maintainers: 1
proxy.golang.org: github.com/ropensci/textreuse
- Documentation: https://pkg.go.dev/github.com/ropensci/textreuse#section-documentation
-
Latest release: v0.1.5
published about 6 years ago
Rankings
Dependent packages count: 5.4%
Average: 5.6%
Dependent repos count: 5.8%
Last synced:
11 months ago
cran.r-project.org: textreuse
Detect Text Reuse and Document Similarity
- Homepage: https://docs.ropensci.org/textreuse
- Documentation: http://cran.r-project.org/web/packages/textreuse/textreuse.pdf
- License: MIT + file LICENSE
-
Latest release: 0.1.5
published about 6 years ago
Rankings
Docker downloads count: 0.0%
Stargazers count: 2.2%
Forks count: 2.3%
Average: 9.2%
Dependent packages count: 13.7%
Downloads: 17.5%
Dependent repos count: 19.2%
Maintainers (1)
Last synced:
11 months ago
Dependencies
DESCRIPTION
cran
- R >= 3.1.1 depends
- NLP >= 0.1.8 imports
- Rcpp >= 0.12.0 imports
- RcppProgress imports
- assertthat >= 0.1 imports
- digest >= 0.6.8 imports
- dplyr >= 0.8.0 imports
- stringr >= 1.0.0 imports
- tibble >= 3.0.1 imports
- tidyr >= 0.3.1 imports
- covr * suggests
- knitr >= 1.11 suggests
- rmarkdown >= 0.8 suggests
- testthat >= 0.11.0 suggests